Политика Selinux для CAP_SYS_PTRACE путем вызова имени процесса
У меня есть система, в которой у нас установлен GDB, и целевой двоичный файл, который необходимо отлаживать на наличие ошибок. Мы не хотим, чтобы пользователь мог отлаживать любой другой процесс, кроме целевого двоичного файла.
Есть ли способ использовать Selinux для создания политики, ограничивающей CAP_SYS_PTRACE целевым процессом? и не удается при попытке отладки любого другого процесса?
1 ответ
Режим "Классические разрешения ptrace" уже позволяет ptrace процессов, запущенных под вашим uid, но не для чего-либо привилегированного. Поместите это в /etc/sysctl.d/program.conf
kernel.yama.ptrace_scope = 0
Если программа запускается от имени другого пользователя, разрешите переключиться на этого пользователя для запуска GDB. Например, с правилом sudo.
Тогда GDB может быть вызван либо с gdb program
или же gdb -p PID
синтаксис.
На самом деле ограничить его только тем, что он отслеживает только одну программу, даже не ту, что выполняются от имени пользователя, сложнее. В настоящее время CentOS 7 не имеет целевой политики SELinux для GDB. Запуск без ограничений означает, что SELinux не применяется, и он разрешит того же пользователя или CAP_SYS_PTRACE.
Вы можете определить политику как для вашей программы, так и для GDB, и позволить ей делать то, что вы хотите.
allow gdb_t program_t:process { ptrace } ;
Проблема в том, что ни один из этих типов еще не существует. Вы также должны выяснить все доменные переходы, необходимые для ограничения GDB, но все еще функционировать.
Уже существует логическое значение, которое отключит ptrace во всем мире. Не очень полезно, так как исключений нет, но вы можете предотвратить отслеживание процессов root.
setsebool -P deny_ptrace on