程序可执行文件和日志文件的正确文件权限应该是什么?

时间:2010-08-14 13:17:07

标签: php c++ linux apache permissions

我编写了一个Linux系统范围的C ++程序/usr/bin/PROG_X,它使用配置文件/etc/PROG_X.conf和日志文件/var/PROG_X.log

现在我需要在强身份验证后使用apache web server和php从Web调用此程序。调用程序可能涉及更改配置文件,当然也会更改日志文件。

我有兴趣保持启用SELinux。

My Querstion是:应该为二进制文件,配置文件和日志文件设置哪些用户/组以及哪些文件权限才能正常安全地运行?

2 个答案:

答案 0 :(得分:2)

对于最锁定的方法(假设日志和配置是敏感的):

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仅作为progx运行/ usr / bin / PROG_X
因此,只有root和progx可以看到配置或读/写日志文件,只有root可以修改配置。只有progx可以运行该程序,但是apache可以通过sudo专门启动你的程序作为progx。

[编辑:错过了说程序可能需要更改其配置文件的部分......所以权限将是660而不是]

答案 1 :(得分:1)

好吧,我不了解SELinux,但有几个“传统”解决方案浮现在脑海中:

首先,chown root /usr/bin/PROG_X然后将setuid位设置为chmod +s /usr/bin/PROG_X。 setuid位导致程序不以当前用户身份运行,而是作为文件的所有者(在这种情况下为root)运行。这意味着您需要确保您的程序尽可能安全。所以要小心使用。

setuid的替代方法可能是在/etc/sudoers中为该程序添加适当的条目,并通过sudo进行调用。但它具有与程序将以root身份运行相同的安全隐患,但至少您可以通过访问更细粒度(例如,您只能允许“www”用户以root身份运行程序)。

另一种解决方案可能是chown root:wwwrun all_of_the_files_that_PROG_X_need_to_modify。但是,只有当您确切知道哪些文件以及该组文件是否发生变化时,这才有效。