J'expérimente des capacités, sur Debian Gnu / Linux.
J'ai copié / bin / ping dans mon répertoire de travail actuel. Comme prévu, cela ne fonctionne pas, il était à l'origine root setuid.
Je donne ensuite à mon ping les capacités minimales (pas root) en faisant sudo /sbin/setcap cap_net_raw=ep ./ping
, et mon ping fonctionne, comme prévu.
Ensuite, sudo /sbin/setcap -r ./ping
pour révoquer cette capacité. Cela ne fonctionne plus comme prévu.
J'essaie maintenant de faire fonctionner ping avec capsh
.
capsh
n'a pas de privilèges, je dois donc l'exécuter en tant que root, mais ensuite supprimer root et donc tous les autres privilèges.
Je pense que j'ai aussi besoin secure-keep-caps
, ce n'est pas documenté dans capsh
, mais c'est dans le manuel des capacités. J'ai obtenu les numéros de bits /usr/include/linux/securebits.h
. Ils semblent corrects, car la sortie de --print
montre que ces bits sont corrects.
Je tripote depuis des heures, jusqu'à présent je l'ai.
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
Cependant les ping
erreurs avec ping: icmp open socket: Operation not permitted
, c'est ce qui se passe quand il ne possède pas la capacité. Aussi les --print
spectacles Current: =p cap_net_raw+i
, ce n'est pas suffisant dont nous avons besoin e
.
sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"
définira la capacité à Current: = cap_net_raw+eip
cela est correct, mais nous laisse comme root
.
Édition-1
J'ai essayé sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"
Cela produit:
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
La première erreur est attendue car secure-noroot: yes
Mais la seconde n'est pasCurrent: = cap_net_raw+eip
Edit-2
Si je mets ==
avant le --print
, il apparaît maintenant Current: = cap_net_raw+i
, ce qui explique l'erreur précédente, mais pas pourquoi nous perdons des capacités lors du passage hors de root, je pensais que cela secure-keep-caps
devrait résoudre ce problème.
Edit-3
D'après ce que je peux voir, je perds Efficace (e) et Autorisé (p), lorsque exec est appelé. C'est prévu, mais je pensais que les bouchons de sécurité devraient empêcher leur perte. Suis-je en train de manquer quelque chose.
Edit-4
J'ai fait plus de recherches et relu le manuel. Il semble que normalement e
et les p
capacités soient perdues lorsque: vous changez d'utilisateur root
(ou appliquez secure-noroot
, faisant ainsi de root un utilisateur normal), cela peut être remplacé par secure-keep-caps
; quand vous appelez exec
, autant que je sache, c'est un invariant.
Pour autant que je sache, cela fonctionne selon le manuel. Autant que je sache, il n'y a aucun moyen de faire quoi que ce soit d'utile capsh
. Pour autant que je sache, pour utiliser les capacités, vous devez: utiliser des capacités de fichier ou avoir un programme prenant en charge les capacités, qui n'utilise pas exec
. Aucun wrapper privilégié donc.
Alors maintenant, ma question est de savoir ce qui me manque, à quoi ça sert capsh
.
Edit-5
J'ai ajouté une réponse concernant les capacités ambiantes. Peut-être capsh
peut-être également être utilisé avec des capacités héritées, mais pour être utiles, celles-ci devront être définies sur le fichier exécutable. Je ne vois pas comment capsh peut faire quelque chose d'utile sans les capacités ambiantes, ou pour permettre des capacités héritées.
Versions:
capsh
à partir de lalibcap2-bin
version du package1:2.22-1.2
- avant edit-3 Je saisis la dernière à
capsh
partirgit://git.debian.org/collab-maint/libcap2.git
et commencé à l' utiliser. uname -a
Linux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
L'utilisateur-terre est 32 bits.
capsh
, en l'absence de température ambiante (comme c'était le cas à l'origine). Qu'est-ce que je rate. Il doit avoir une utilité.
capsh
le dépôt collab-maint ne vous aurait pas donné la «dernière»capsh
, le paquet Debian ne supporte toujours pas les capacités ambiantes. En amont 2.27 fait.