【问题标题】:What should be the right file permissions for program executables and logs files?程序可执行文件和日志文件的正确文件权限应该是什么?
【发布时间】:2010-08-14 13:17:07
【问题描述】:
我编写了一个 Linux 系统范围的 C++ 程序 /usr/bin/PROG_X,它使用了配置文件 /etc/PROG_X.conf 和日志文件 /var/PROG_X.log。
现在我需要使用 apache Web 服务器和 php 从 Web 调用这个程序,经过强身份验证后。调用程序可能涉及更改配置文件,当然还会更改日志文件。
我有兴趣保持 SELinux 处于启用状态。
我的问题是:应该为二进制文件、配置文件和日志文件设置什么用户/组和什么文件权限才能正确和安全地操作?
【问题讨论】:
标签:
php
c++
linux
apache
permissions
【解决方案1】:
对于最锁定的方法(假设日志和配置是敏感的):
Apache 以用户“www”运行,“progx”用户和组的存在仅用于运行 /usr/bin/PROG_X。
/etc/PROG_X.conf 归 root:progx 所有,权限为 640
/var/PROG_X.log 归 root:progx 所有,权限为 660
/usr/bin/PROG_X 归 progx:progx 所有,权限为 500
/etc/sudoers 允许 www 仅将 /usr/bin/PROG_X 作为 progx 运行。
因此,只有 root 和 progx 可以看到配置或读/写日志文件,并且只有 root 可以修改配置。只有 progx 可以运行程序,但是 apache 可以通过 sudo 专门将您的程序作为 progx 启动。
[编辑:错过了说程序可能需要更改其配置文件的部分......所以权限将改为 660]
【解决方案2】:
好吧,我不了解 SELinux,但我想到了几个“传统”解决方案:
首先,chown root /usr/bin/PROG_X,然后使用chmod +s /usr/bin/PROG_X 设置 setuid 位。 setuid 位使程序不作为当前用户运行,而是作为文件的所有者(在这种情况下,root)。这意味着您需要真正确保您的程序尽可能安全。所以要小心使用。
setuid 的替代方法可能是在/etc/sudoers 中为程序添加一个适当的条目并通过sudo 调用它。但它具有与程序以 root 身份运行相同的安全隐患,但至少您可以更细粒度地访问(例如,您只能允许“www”用户以 root 身份运行程序)。
另一个解决方案可能是chown root:wwwrun all_of_the_files_that_PROG_X_need_to_modify。但这只有在您确切知道哪些文件并且该组文件没有更改时才有效。