Secondo 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).
Questo ha funzionato per me. (le righe che iniziano con '#' sono root, quelle con '$' non sono root) in questo caso l'utente non root è nel wheel
gruppo.
# 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': =
Dato ciò che la capacità garantisce, si adatta esattamente a ciò che vuoi. Non ho verificato esaustivamente se find
ha una funzione che ti consente di leggere byte all'interno dei file, ma cose ovvie come LD_PRELOAD
e gli attacchi shim della libreria non dovrebbero funzionare a causa della natura dei controlli setuid in Linux e i bit di funzionalità non ottengono ereditato dai processi secondari (a differenza del setuid grezzo), quindi questo è un altro vantaggio.
Tieni presente che ciò che vuoi fare solleva possibili problemi di privacy in merito alla creazione o all'accesso temporanei dei file e il programma potrebbe essere utilizzato come base per montare un tentativo di escalation di privilegi / condizioni di gara (rispetto ai programmi che creano nomi di file noti ma non eseguire controlli di sicurezza corretti).
Inoltre, alcune applicazioni scritte male possono fare affidamento sui metadati dei file o sulla struttura ad albero come mezzo per trasmettere significato o nascondere i dati. Ciò potrebbe causare il rilascio di informazioni riservate o rivelare documenti privilegiati di cui non si è altrimenti a conoscenza (la sicurezza attraverso l'oscurità lo so, ma questa è una cosa che i venditori di sorgenti chiuse in particolare piace purtroppo fare).
Pertanto, abbi cura di te e diffidare di farlo e capire che c'è ancora rischio associato a questo anche se le cose ovvie non funzionano.
Oh, e sarei interessato a vedere se qualcuno ha una prova dell'attacco concettuale che utilizza questo meccanismo come base per l'escalation dei privilegi nei commenti!