我编写了一个Linux系统范围的C ++程序/usr/bin/PROG_X
,它使用配置文件/etc/PROG_X.conf
和日志文件/var/PROG_X.log
。
现在我需要在强身份验证后使用apache web server和php从Web调用此程序。调用程序可能涉及更改配置文件,当然也会更改日志文件。
我有兴趣保持启用SELinux。
My Querstion是:应该为二进制文件,配置文件和日志文件设置哪些用户/组以及哪些文件权限才能正常安全地运行?
答案 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
。但是,只有当您确切知道哪些文件以及该组文件是否发生变化时,这才有效。