Згідно з 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).
Це працювало для мене. (рядки, що починаються з "#", є кореневими, а рядки з "$" - некореневими) wheel
.
# 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': =
З огляду на те, що надає можливість, вона точно відповідає тому, що ви хочете. Я не вичерпно перевіряв, чи find
є така функція, яка дозволяє читати байти всередині файлів, але очевидні речі, такі як LD_PRELOAD
атаки на бібліотечні shim, не повинні працювати через характер встановлених перевірок у Linux, і біти можливостей не отримують успадковується або дочірніми процесами (на відміну від сирої програми), тому це ще один бонус.
Майте на увазі, що те, що ви хочете зробити, викликає можливі занепокоєння щодо конфіденційності щодо створення тимчасових файлів або доступу, і програма може бути використана як основа для встановлення перегонової умови / спроби ескалації привілеїв (проти програм, які створюють відомі назви файлів але не робіть правильних перевірок безпеки).
Також деякі погано написані програми можуть покладатися на метадані файлів або структуру дерева як спосіб передати значення або приховати дані. Це може спричинити випуск інформації з обмеженим доступом або виявити привілейовані документи, про які інакше не відомо (безпека через незрозумілість я знаю, але, на жаль, це те, що, зокрема, люблять робити постачальники із закритим кодом).
Тому будьте обережні і обережно ставіться до цього, і зрозумійте, що з цим все ще є ризик, навіть якщо очевидні речі не працюють.
О, і мені було б цікаво подивитися, чи є у когось доказ концептуальної атаки, який використовує цей механізм як основу для ескалації привілеїв у коментарях!