getcap -r /В Linux привилегии процесса не всегда завязаны только на
root. Существуют capabilities - отдельные разрешения ядра, которые можно выдавать конкретным бинарникам.Например, программе можно дать возможность менять сетевые настройки без полного root-доступа.
▪️Посмотреть capabilities у файла
getcap /usr/bin/ping
Пример вывода:
/usr/bin/ping cap_net_raw=ep
Это означает, что
ping имеет право создавать raw-сокеты.▪️Поиск всех бинарников с capabilities
getcap -r / 2>/dev/null
Команда рекурсивно проверяет файловую систему и показывает файлы с назначенными capabilities.
Пример:
/usr/bin/python3 cap_net_bind_service=ep
/usr/local/bin/app cap_sys_admin=ep
▪️Что означают флаги
Capability может иметь разные состояния:
cap_net_raw=epe (effective) — разрешение активно при запуске;p (permitted) — процесс может его использовать.Чаще всего встречается комбинация
ep.▪️Некоторые capabilities фактически дают очень широкие возможности:
cap_sys_admin
cap_dac_override
cap_setuid
cap_sys_ptrace
Например:
•
cap_dac_override позволяет обходить обычные проверки прав файлов;•
cap_setuid позволяет менять UID процесса;•
cap_sys_ptrace даёт возможность взаимодействовать с другими процессами.▪️Проверка конкретного процесса
У работающего процесса capabilities находятся здесь:
cat /proc/1234/status | grep Cap
Ядро хранит их в виде битовых масок.
▪️Удаление capability
Если разрешение больше не требуется:
setcap -r /path/to/binary
После этого файл вернётся к обычной модели прав.
▪️Почему это важно
При аудите Linux недостаточно искать только SUID-биты:
find / -perm -4000
Современные системы активно используют capabilities, и иногда один бинарник с лишним разрешением может иметь больше привилегий, чем ожидается.
BashTex 📱 #bash #linux