De acuerdo a 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).
Esto funcionó para mí. (las líneas que comienzan con '#' son root, las que tienen '$' no son root) en este caso el usuario no root está en el wheel
grupo.
# 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': =
Dado lo que otorga la capacidad, encaja exactamente con lo que desea. No he comprobado exhaustivamente si find
tiene una característica que le permita leer bytes dentro de los archivos, pero cosas obvias como LD_PRELOAD
los ataques de biblioteca y shim no deberían funcionar debido a la naturaleza de las comprobaciones de setuid en Linux, y los bits de capacidad no se obtienen heredado por procesos secundarios (a diferencia de setuid sin procesar), por lo que es otra ventaja.
Tenga en cuenta que lo que quiere hacer plantea posibles problemas de privacidad con respecto a la creación o acceso temporal de archivos, y el programa podría usarse como base para montar un intento de escalada de condición / privilegio de carrera (contra programas que crean nombres de archivo conocidos pero no hagas los controles de seguridad correctos).
Además, algunas aplicaciones mal escritas pueden depender de metadatos de archivo o estructura de árbol como una forma de transmitir significado u ocultar datos. Esto podría causar la liberación de información restringida o revelar documentos privilegiados desconocidos de otro modo (la seguridad a través de la oscuridad lo sé, pero esto es algo que a los proveedores de código cerrado en particular les gusta hacer, desafortunadamente).
Por lo tanto, tenga cuidado y tenga cuidado al hacerlo, y comprenda que todavía hay riesgos asociados con esto, incluso si las cosas obvias no funcionan.
¡Ah, y me interesaría ver si alguien tiene un ataque de prueba de concepto que utilice este mecanismo como base para la escalada de privilegios en los comentarios!