Selon man 7 capabilities
CAP_DAC_READ_SEARCH
* Bypass file read permission checks and directory read and execute permission checks;
* Invoke open_by_handle_at(2).
Cela a fonctionné pour moi. (les lignes commençant par '#' sont root, celles avec '$' ne sont pas root) dans ce cas, l'utilisateur non root est dans le wheel
groupe.
# cp /usr/bin/find /usr/bin/sudofind
# chmod 710 /usr/bin/sudofind
# chown root:wheel /usr/bin/sudofind
# setcap cap_dac_read_search+ep /usr/bin/sudofind
# exit
$ find /root
find: ‘/root’: Permission denied
$ sudofind /root
/root /root
/root/Testbed
...
...
$ sudofind /root -exec cat {} \;
cat: /root: Permission denied
cat: /root/Testbed: Permission denied
$ sudofind /root -printf "%u %g %m %c %p\n"
root root 644 Mon Apr 20 09:20:48.0457518493 2015 /root
root root 755 Fri Dec 4 02:34:03.0016294644 2015 /root/Testbed
...
...
$ # Capability inheritance test..
$ sudofind /root -exec /bin/sleep 10 \; &
[1] 17017
$ getpcaps $(pgrep find)
Capabilities for `17017': = cap_dac_read_search+ep
$ getpcaps $(pgrep sleep)
Capabilities for `17019': =
Compte tenu de ce que la capacité accorde, elle correspond exactement à ce que vous voulez. Je n'ai pas vérifié de manière exhaustive si find
une fonctionnalité vous permet de lire des octets à l'intérieur des fichiers, mais des choses évidentes comme les LD_PRELOAD
attaques de cales de bibliothèque ne devraient pas fonctionner en raison de la nature des vérifications de setuid sous Linux, et les bits de capacité ne sont pas hérité par les processus enfants non plus (contrairement au setuid brut), c'est donc un autre bonus.
Gardez à l'esprit que ce que vous voulez faire soulève des problèmes de confidentialité potentiels en ce qui concerne la création de fichiers temporaires ou l'accès, et le programme pourrait être utilisé comme base pour monter une condition de concurrence critique / tentative d'escalade de privilèges (contre les programmes qui créent des noms de fichiers bien connus mais ne faites pas les contrôles de sécurité corrects).
De plus, certaines applications mal écrites peuvent s'appuyer sur des métadonnées de fichier ou une structure arborescente pour transmettre du sens ou masquer des données. Cela pourrait provoquer la divulgation d'informations restreintes ou révéler des documents privilégiés inconnus autrement (la sécurité par l'obscurité, je sais, mais c'est une chose que les fournisseurs de sources fermées en particulier aiment faire, malheureusement).
Par conséquent, soyez prudent et méfiez-vous de le faire et comprenez qu'il y a toujours un risque associé à cela, même si les choses évidentes ne fonctionnent pas.
Oh, et je serais intéressé de voir si quelqu'un a une attaque de preuve de concept qui utilise ce mécanisme comme base pour une élévation de privilèges dans les commentaires!