Apache服务器:编辑httpd.conf文件(权限被拒绝)

时间:2013-06-15 20:21:01

标签: apache logging permissions config

所以我最近刚刚按照此处指示的说明下载了Apache服务器及其所有文件(httpd,apr,apr-util,pcre):http://httpd.apache.org/docs/2.4/install.html

但是,在设置之后,当我尝试启动位于我的usr / local / bin /中的Apache服务器时,系统会提示我:

[allen@allen-lnx ~]$ /usr/local/bin/apachectl start
(13)Permission denied: AH00091: httpd: could not open error log file /usr/local/logs/error_log.
AH00015: Unable to open logs

经过一些研究,我发现我需要编辑我的httpd.conf文件,我之前这样做是为了允许正确的ServerName和Listen选项。但是,我不确定如何编辑我的conf文件以允许访问“logs”目录。

值得注意的是,当我使用“sudo”命令时,命令会运行,但我宁愿不要总是使用它,因为它似乎是一种解决方法。

任何帮助都会受到赞赏。谢谢!

编辑:我实际上已经注意到我可能有两个httpd.conf文件,这证明有点麻烦。另一个位于我的root / etc /目录(etc / httpd / conf / httpd.conf)中。我想我现在修改过的问题是......我应该保留哪一个? / etc / version是内置的那个,如下面的faff的评论所示?

当前解决方案:我想我会接受在编辑此文件时需要使用sudo的事实,因为我需要是root用户。我可能会在以后更改它,以便我总是以root用户身份运行,但就目前而言,sudo就足够了。

3 个答案:

答案 0 :(得分:5)

这看起来像是文件系统权限的问题。确保/usr/local/logs/目录存在且可由您运行Apache的用户编写。

如果您不希望普通用户可以写入logs目录,则可以创建日志文件:

sudo touch /usr/local/logs/error_log

然后将文件的所有者更改为正确的用户:

sudo chown allen /usr/local/logs/error_log

假设您想以用户allen运行Apache。

如果要更改Apache日志文件的位置,请在httpd.conf文件中查找ErrorLog指令(如果不存在,则必须添加它):

ErrorLog path/to/logfile

答案 1 :(得分:3)

对于使用SELinux的每个人,如果您删除了该文件夹或遇到类似问题,您可能需要做几件事。

将文件夹重新链接到ln -s /var/log/httpd /etc/httpd/logs 默认情况下,日志保存在var文件夹下,但在/ etc / httpd / logs文件夹中引用

使用chcon system_u:object_r:httpd_config_t:s0 /etc/httpd/logs

应用SELinux安全权限

当然以管理员身份运行所有内容

答案 2 :(得分:0)

将SELinux安全策略更改为许可修复了我的问题。

在修复之前,我的SELinux使用强制模式:

$ sestatus -v
sestatus -v
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      30

我在SELinux配置文件和系统中更改了安全策略。

#/etc/selinux/config
SELINUX=permissive

# In terminal set SELinux to run in permissive mode.
$ setenforce 0

修复后我的SELinux使用强制模式:

$ sestatus -v
SELinux status:                 enabled
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      30