如何解决httpd禁止访问未在/ var / www / html /中创建的文件
我正在和一个Web服务器一起玩,遇到了一个特殊的问题。我有一台全新的Centos7 httpd(Apache)网络服务器。
如果按以下顺序运行:
sudo vi /var/www/html/ first.html
# enter "<p>hello</p>" and save
然后按{IP Address}/first.html
即可正常运行,并在浏览器中显示“ hello”。
但是当我这样做时:
sudo vi /home/centos/second.html
# enter "<p>hello</p>" and save
sudo mv /home/centos/second.html /var/www/html/second.html
然后按{IP Address}/second.html
会返回403 Forbidden You don't have permission to access/second.html on this server.
我执行了ls -al
作为输出:
-rw-r--r--. 1 root root 13 Aug 18 23:33 first.html
-rw-r--r--. 1 root root 13 Aug 18 23:34 second.html
然后我执行了十六进制转储,以确认以下输出的每个位都相同:
[centos@ip-172-31-10-192 html]$ hexdump -C first.html
00000000 3c 70 3e 68 65 6c 6c 6f 3c 2f 70 3e 0a |<p>hello</p>.|
0000000d
[centos@ip-172-31-10-192 html]$ hexdump -C second.html
00000000 3c 70 3e 68 65 6c 6c 6f 3c 2f 70 3e 0a |<p>hello</p>.|
0000000d
如您所见,文件本身没有差异。现在,我假设创建过程以某种方式编辑了一些配置文件,从而可以访问first.html
而不是second.html
,因此我运行了grep -rin "first" /etc/httpd/
和grep -rin "second" /etc/httpd/
并没有找到相关的输出。那么到底发生了什么?为什么通过vi
创建的html文件与直接通过mv
创建的相同文件有不同的处理方式?
解决方法
因此,在我按下“发送”这个问题之前,我找到了解决方案以及问题所在,但希望将其传递给其他人。
问题源于我使用vi
将现有文件移动到Web服务器而不是mv
会创建新文件的事实。
信贷从https://forums.centos.org/viewtopic.php?t=6834转到TrevorH。
当您将某物从一个地方转移到另一个地方时,就会引起此问题。当您移动原始文件时,它会保留原始文件的selinux上下文,因此,如果在/ home或/ tmp中解压缩某些内容,则会获得与其位置匹配的selinux上下文。现在,您将其转换为/ var / www / html,并使用上下文说明它属于/ tmp或/ home,并且策略不允许httpd访问这些文件。
如果您使用cp文件而不是mv文件,则将根据要复制的位置而不是文件的来源分配selinux上下文。运行restorecon会将上下文恢复为默认值,并对其进行修复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。