我可以杀死一个进程。但是,如何在不将其从 Linux 中删除的情况下防止再次调用该进程呢?例如,如果我运行 netstat 之类的东西来查找与该进程关联的端口,然后杀死它,我将在几秒钟内看到它再次以不同的 PID 运行。
答案1
更改其执行权限位。以 root 身份使用以下命令:
chmod a-x path_to_process_binary
这基本上拒绝了所有者、组和其他人(as a
= all)的执行权限。
这个简单的技巧将阻止该进程运行,但我相信您的系统中可能会发生更严重的事情。
如果您确实需要自己运行,请检查这个答案。
答案2
也许有点太多了,但最安全的方法可能是使用 AppArmor 或 SELINUX 来阻止二进制文件的执行。修改文件权限将一直有效,直到更新提供该二进制文件的包为止(然后,更新时它将再次设置为可执行文件)。
另一方面,如果您试图保护整个分区,以便不能在其中直接执行任何内容(例如,保护/var
或/tmp
以便没有人可以解压并执行该目录中的二进制文件),您可以使用“ noexec”选项标志:
root@server: ~ # grep noexec /etc/fstab
/dev/sda6 /tmp ext4 defaults,noexec,nosuid,nodev 1 1
这边走:
root@server: /tmp # cp /usr/bin/vim .
root@server: /tmp # ./vim
-bash: ./vim: Permission denied
请注意,shell 脚本仍然可以作为 执行/bin/sh /tmp/myscript.sh
,但不能直接使用./myscript.sh
.
“noexec”标志对于网络服务器很有用,因为您可以避免一些基于从易受攻击的 PHP 或 CGI 站点下载、编译和执行二进制文件的攻击。