Согласно с 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).
Это сработало для меня. (строки, начинающиеся с «#», являются корневыми, строки с «$» - не-root), в этом случае пользователь без полномочий root входит в 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
и атаки с использованием библиотечных шимов, не должны работать из-за природы проверок setuid в Linux, а биты возможностей не получают наследуется дочерними процессами (в отличие от raw setuid), так что это еще один бонус.
Имейте в виду, что то, что вы хотите сделать, поднимает возможные проблемы конфиденциальности в отношении создания или доступа к временным файлам, и программа может использоваться в качестве основы для установки попытки повышения условия / привилегии гонки (по отношению к программам, которые создают хорошо известные имена файлов). но не делайте правильных проверок безопасности).
Кроме того, некоторые плохо написанные приложения могут полагаться на файловые метаданные или древовидную структуру в качестве способа передачи значения или скрытия данных. Это может привести к разглашению ограниченной информации или раскрытию привилегированных документов, о которых иначе не известно (безопасность из-за неясности, я знаю, но это, к сожалению, особенно любят делать производители с закрытыми исходными кодами).
Поэтому будьте осторожны и с осторожностью относитесь к этому и понимайте, что с этим по-прежнему существует риск, даже если очевидные вещи не работают.
О, и мне было бы интересно посмотреть, есть ли у кого-нибудь доказательство концептуальной атаки, которое использует этот механизм в качестве основы для повышения привилегий в комментариях!