我使用 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
您可以检查手册以获取其他权限令牌(内容,脚本..)。