通过调用进程名称来执行 CAP_SYS_PTRACE 的 Selinux 策略

通过调用进程名称来执行 CAP_SYS_PTRACE 的 Selinux 策略

我有一个安装了 GDB 的系统和一个需要调试错误的目标二进制文件。我们不希望用户能够调试除目标二进制文件之外的任何其他进程。

我们有什么办法可以使用 Selinux 创建一个策略来将 CAP_SYS_PTRACE 限制到目标进程?并在尝试调试任何其他进程时失败?

答案1

“经典 ptrace 权限”模式已经允许以您的 uid 运行的进程的 ptrace,但不允许任何特权进程。将其放入 /etc/sysctl.d/program.conf

kernel.yama.ptrace_scope = 0 

如果程序以其他用户身份运行,则允许切换到该用户来运行 gdb。例如使用 sudo 规则。

然后可以使用gdb programgdb -p PID语法调用 gdb。


真正限制它只跟踪一个程序,甚至不跟踪以您的用户身份运行的其他程序,这更加困难。目前,CentOS 7 没有针对 gdb 的任何 SELinux 策略。运行不受限制意味着 SELinux 不适用,它将允许相同的用户或 CAP_SYS_PTRACE。

您可以为您的程序和 GDB 定义策略,并允许它执行您想要的操作。

allow gdb_t program_t:process { ptrace } ;

问题是,这些类型都还不存在。您还必须找出限制 gdb 但仍能正常运行所需的所有域转换。

已经存在一个布尔值,可以全局关闭 ptrace。由于没有异常,所以用处不大,但可以阻止 root 跟踪进程。

setsebool -P deny_ptrace on

相关内容