我有一个简单的Flask / Nginx服务器和3个位于/opt/hosting/files
的文件:
[adam@localhost]$ namei -om /opt/hosting/files
f: /opt/hosting/files
dr-xr-xr-x root root /
drwxr-xr-x root root opt
drwxr-xr-x root root hosting
drwxr-xr-x nginx nginx files
在files
文件夹中,我有3个文件:两个图像和一个更大的zip文件:
[adam@localhost]$ ls -lh /opt/hosting/files/
total 424M
-rwx-----x. 1 nginx nginx 19K 03-06 01:29 file1.jpg
-rwx-----x. 1 nginx nginx 18M 03-06 03:34 file2.png
-rwxr-xr-x. 1 nginx nginx 406M 07-07 13:07 file3.zip
我正在提供这些文件,虽然前两个文件没有问题,但我通过www和使用wget得到了403 Forbidden
的zip文件。我认为目录权限设置正确,因为其他两个文件都没问题。 Zip文件属性甚至更高,所以这不应该是一个问题。
我尝试将chown root:root
和chown 777
用于文件和文件夹,但无论如何都无法访问该文件。在进行更改后,我正在使用sudo systemctl restart uwsgi
重新启动nginx。 SELinux显示Enforcing
。
这里有什么问题?
答案 0 :(得分:2)
知道了。阅读comment by tinesoft here让我检查SELinux文件的上下文(是的,我正在运行CentOS,忘记提及),它是:
[adam@localhost]$ ls -lZ /opt/hosting/files
-rwx-----x. nginx nginx unconfined_u:object_r:httpd_sys_content_t:s0 file1.jpg
-rwx-----x. nginx nginx unconfined_u:object_r:httpd_sys_content_t:s0 file2.png
-rwxr-xr-x. nginx nginx unconfined_u:object_r:user_home_t:s0 file3.zip
然后,在SELinux documentation from RedHat之后,我设法使用
将SELinux上下文的类型从user_home_t
更改为httpd_sys_content_t
sudo chcon -t httpd_sys_content_t file3.zip
就是这样。