4.15. 禁用 ptrace()
ptrace () 系统调用允许一个进程观察和控制另一个进程的执行,并更改其内存和寄存器。此调用主要供开发人员在调试期间使用,例如使用 strace 工具时。当不需要 ptrace () 时,可以禁用它来提高系统安全性。这可以通过启用 deny_ptrace 布尔值(拒绝所有在 unconfined_t 域中运行的进程)来达到这个目的,无法在其他进程中使用 ptrace ()。
deny_ptrace 布尔值默认为禁用。要启用它,以 root 用户身份运行 setsebool -P deny_ptrace on 命令:
setsebool -P deny_ptrace on
~]# setsebool -P deny_ptrace on
要验证是否启用了这个布尔值,请使用以下命令:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
getsebool deny_ptrace
~]$ getsebool deny_ptrace
deny_ptrace --> on
要禁用此布尔值,请以 root 用户身份运行 setsebool -P deny_ptrace off 命令:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
setsebool -P deny_ptrace off
~]# setsebool -P deny_ptrace off
注意
setsebool -P 命令进行永久更改。如果您不想在重新启动后保留更改,则不要使用
-P 选项。
这个布尔值只会影响作为 Red Hat Enterprise Linux 一部分的软件包。因此,第三方软件包仍然可以使用
ptrace () 系统调用。要列出允许使用 ptrace () 的所有域,请输入以下命令。请注意,se setools-console 软件包提供 sesearch 工具,且默认情况下不安装该软件包。
sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ' ' -f 5
~]# sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ' ' -f 5