是否可以从以非特权用户身份运行的 bash 将文件标记为免疫,这样就不能以任何方式从以该用户身份运行的任何进程中对其进行更改?如果其他用户或 root 可以更改它,那就没问题了。
我的用户案例是在开始另一个进程之前准备一个配置文件。我想阻止该进程通过错误或故意利用对文件进行任何修改。
使用chmod a-w path
或类似的操作并不好,因为它可以被轻易地撤消。我无法更改文件的所有权,因为该进程不是 root。我也无法使用,chattr +i path
因为该进程没有 CAP_LINUX_IMMUTABLE。
唯一的选择是使用 setuid/sudo 程序或在其可执行文件上设置 CAP_LINUX_IMMUTABLE 的程序来进行此类更改吗?
答案1
Apparmor 和 selinux 可用于对进程权限进行细粒度控制。这包括赋予进程读取而不是写入文件的能力。
消防监狱是一个更易于用户使用的包装器。
当您生成新进程时,该--read-only
选项可用于删除对文件的写访问权限 - 这似乎正是您想要的。
答案2
我想,在没有 acls 或任何其他用户通过 sudo 或 setuid 可用的情况下,最安全的方法就是通过chmod 444
'ing 该文件。
使文件 chmod 回到o+w
更多难的对于任何子进程,您可以尝试设置一个调用的包装器脚本bash -r --rcfile restricted.rc
,其中restricted.rc设置PATH以避免chmod。这不会阻止调用 bash 或其他进程的脚本使用自己的路径调用脚本并修改文件,但不太可能有人愿意显式地这样做。
但是u+w
,如果您不能chattr
或chflags
.