上传到Nginx的图片文件如何拥有可读的权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上传到Nginx的图片文件如何拥有可读的权限相关的知识,希望对你有一定的参考价值。

参考技术A 使用springmvc做了一个文件上传的功能,上传到nginx目录下的一个文件夹,但是通过目录访问的时候却报403的错误

去服务器查看了一下文件的权限,发现没有可读权限,于是定位了问题,上传的文件全都没有可读权限。

网上查阅资料发现,linux默认umask为022,对应权限为755,其它用户可读可执行。可以 vim /etc/profile ,搜索umusk关键字查看

而tomcat8默认umask为027,对应权限为750,也就是说其它用户连可读的权限都没有。
可打开catalina.sh文件,搜索umask查看。

在catalina.sh文件的开篇可以看到

于是问题有了答案
登录到服务器,进入到tomcat的bin目录下

可以看到

接下来重启tomcat,重新上传图片即可香油可读权限。

权限被拒绝:/var/www/abc/.htaccess pcfg_openfile:无法检查 htaccess 文件,确保它是可读的?

【中文标题】权限被拒绝:/var/www/abc/.htaccess pcfg_openfile:无法检查 htaccess 文件,确保它是可读的?【英文标题】:Permission denied: /var/www/abc/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable? 【发布时间】:2014-01-04 19:08:56 【问题描述】:

大家好,我在我的网站上使用 PHP,在我的系统上使用 ubuntu linux。即使正确配置了所有内容,我在 apache 的 error.log 文件中也遇到了上述错误。我对此做了很多研究,但无法解决这个问题。任何人都可以在这方面帮助我吗?以下是我在abc directory 中的 .htaccess 文件。有人可以在这方面帮助我吗?

# -FrontPage-

IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
AuthName abc.org
AuthUserFile /home/abc/public_html/_vti_pvt/service.pwd
AuthGroupFile /home/abc/public_html/_vti_pvt/service.grp
Options -Indexes

RewriteEngine On
RewriteRule ^alumni$ alumni.php
RewriteRule ^student$ student.php
RewriteRule ^view_alumni_article/view/([0-9]+)$ view_alumni_article.php?op=view&article_id=$1

【问题讨论】:

你启用了 SELinux 吗? 【参考方案1】:

确保 apache 可以读取 htaccess 文件:

chmod 644 /var/www/abc/.htaccess 

并确保它所在的目录是可读的可执行文件:

chmod 755 /var/www/abc/

【讨论】:

我有同样的问题,改变上面的权限使它工作。但是,我对根目录为755 不满意。当我做到751 时,它似乎可以工作。这是要塞东西吗? 我相信这个工作有例外。如果您有 suphp 和/或 suexec,如果您的文件可按组写入,您可能会收到额外的错误。如果我错了,请纠正我。 +1 表示简短但最有效的解决方案。我完全被这个错误搞砸了,但你的解决方案很不错! 它没有解决我的问题。【参考方案2】:

当我更改一次使用的主目录时,我遇到了同样的问题。就我而言,这是因为selinux。我使用以下方法解决了这个问题:

selinuxenabled 0
setenforce 0

【讨论】:

我遇到了同样的问题,我没有禁用 selinux,而是发现 sudo restorecon -R &lt;path to site&gt; 足以解决问题。 Anessh 的解决方案对我有用......因为上面的所有其他解决方案都依赖于selinux 不活跃——权限问题只是权限问题。但是如果 selinux 阻止了一切(与restorecon 相同),那么这些解决方案将毫无意义。我的 CentOS 6 LAN web 服务器上的问题通过禁用selinux 解决了——直到电源故障发生并显示 selinux 设置在不编辑 conf 文件的情况下没有保存。在重启时保存 selinux 设置 vi /etc/sysconfig/selinux 找到并将 SELINUX=enabled 行更改为 SELINUX=disabled 重启你的 MACHINE 解决了我的问题。 如果文件权限没问题,这就是redhat like distribution的正确解决方案【参考方案3】:

如果它进入 selinux 领域,你就会遇到一个更复杂的问题。移除 selinux 保护并不是一个好主意,而是接受它并使用旨在管理它的工具。

如果您使用/var/www/abc 提供内容,则可以使用附加到普通ls -l 命令的Z 来验证selinux 权限。即ls -laZ 将给出 selinux 上下文。

要添加一个由 selinux 提供服务的目录,您可以像这样使用semanage 命令。这会将/var/www/abc 上的标签更改为httpd_sys_content_t

semanage fcontext -a -t httpd_sys_content_t /var/www/abc

这将更新/var/www/abc的标签

restorecon /var/www/abc 

此答案取自 unixmen 并经过修改以适合此问题。我一直在寻找这个答案一段时间,终于找到了,所以觉得我需要在某个地方分享。希望它可以帮助某人。

【讨论】:

试试 yum install policycoreutils-python 你总是可以找到要安装的包,使用类似这样的提供。 $yum whatprovides /usr/sbin/semanage 在 CentOS 7 上没有任何运气。检查权限,执行,按照描述运行 semanage/restorecon。仍然收到错误 你重启了吗?可能是挂着的东西。 如果第一个不起作用,这是第二个正确答案。【参考方案4】:

我也陷入了这个困境,相信我禁用 SELinux 不是一个好主意。

请在下面使用,你很好,

sudo restorecon -R /var/www/mysite

享受..

【讨论】:

以上是关于上传到Nginx的图片文件如何拥有可读的权限的主要内容,如果未能解决你的问题,请参考以下文章

java项目如何实现上传图片到项目外部,访问时使用相对于域名的相对路径 系统架构大致是jboss+nginx

OkHttpOkHttp 上传图片 ( 获取 SD 卡动态权限 | 跳转到相册界面选择图片 | 使用 OkHttp 上传图片文件 )

记录nginx 配置静态资源图片访问

关于Tomcat和Nginx图片上传以及访问的路径问题

php上传文件到linux服务器,可以上传成功,但是图片本身为啥没有可执行权限呢,怎么设置啊

Nginx反向代理实现图片上传到Ubuntu服务器