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

o4hqfura  于 2022-11-16  发布在  Apache
关注(0)|答案(4)|浏览(252)

因此,我最近刚刚下载了Apache服务器及其所有文件(httpd,apr,apr-util,pcre),下面的说明如下:http://httpd.apache.org/docs/2.4/install.html
但是,在设置之后,当我尝试启动Apache服务器(位于usr/local/bin/)时,系统提示我以下消息:

[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文件,这被证明是有点麻烦的。另一个位于我的根目录/etc/目录(etc/httpd/conf/httpd.conf)。我想我现在的修改问题是...我应该保留哪一个?/etc/版本是内置的那个吗,正如下面faff的评论所指出的?
**当前解决方案:**我想我应该接受这样的事实,即在编辑这个文件时我需要使用sudo,因为我需要作为root用户。我可能会在以后更改它,以便我总是以root用户身份运行,但现在,sudo就足够了。

lfapxunr

lfapxunr1#

这看起来像是文件系统权限的问题。请确保/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
jdg4fx2g

jdg4fx2g2#

对于使用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安全权限
当然,以管理员身份运行所有内容

anauzrmj

anauzrmj3#

将SELinux安全策略更改为permissive解决了我的问题。
在修复之前,我的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
h9vpoimq

h9vpoimq4#

对于那些坚持使用SElinux策略的人,我可以通过创建一个自定义策略来实现
基本上,我想将/var/log/httpd移动到/r/下我自己的目录中
所以我运行以下代码

semanage fcontext -a -t httpd_sys_content_t "/r/www(/.*)?"
semanage fcontext -a -t httpd_log_t "/r/logs(/.*)?"

restorecon -Rv /z/logs/
restorecon -Rv /z/www/

service httpd restart
# worked

相关问题