使用 sudo /etc/init.d/httpd start 投诉日志文件权限

使用 sudo /etc/init.d/httpd start 投诉日志文件权限

我使用 root 帐户创建了一个自定义日志目录,并暂时将其 chmode 设置为 777。

ls -la /var/mylogs/log/
total 16
drwxrwxrwx 2 root root 4096 Jun 24 06:27 .
drwxr-xr-x 5 root root 4096 Jun 24 06:25 ..

当我尝试以用户身份启动服务时(假设为“myuser”,在 sudoers 文件中为 myuser ALL=(ALL) ALL),由于权限问题,服务失败:

sudo /etc/init.d/httpd start

Starting httpd: (13)Permission denied: httpd: could not open error log file /var/mylogs/log/httpd_error.log.
Unable to open logs

但是,以下操作是成功的:

sudo bash
/etc/init.d/http start

所以我猜测这两种方法并不等同,尽管对我来说执行 sudo 与登录 root 帐户并发出命令是一样的。

有什么线索吗?

谢谢 !

答案1

apache2 进程应该是日志目录的所有者,而不是 root。您可以通过更改日志目录的所有者(即 www-data 或 apache2 所属的组)来解决此问题

答案2

apache2服务器所在的系统是RedHat 5.6,因此默认激活SELinux。

此处问题的根源是 SELinux 在操作系统权限之上添加了额外的文件权限(即 chmod、chown),请参阅:

man httpd_selinux

手册说必须为文件/目录设置明确的上下文,以便允许 httpd 访问它们。

因此我使用了以下内容:

chcon -R user_u:object_r:httpd_log_t /var/mylogs/logs

您可以检查手册以获取其他权限令牌(内容,脚本..)。

相关内容