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

SpringMVC文件上传无可读权限问题解决
使用SpringMVC做文件上传功能,上传到Nginx目录下文件夹,访问报403错误,经检查是文件无可读权限。原来Linux默认umask为022,Tomcat8默认umask为027。可在catalina.sh文件查看,登录服务器进入Tomcat的bin目录,重启Tomcat重新上传图片即可解决。

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

image

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

为什么没有可读权限

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

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022

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

# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0027"
fi
umask $UMASK

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

#   UMASK           (Optional) Override Tomcat's default UMASK of 0027

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

vim catalina.sh
输入i,进入编辑模式,将umask改为0022
:wq(保存退出)

可以看到
 

3b0b9d5dc0f2d2115073293aeee4331.png


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

Nginx 上传文件权限赋予 appuser 可通过以下几种方式实现: ### 创建非 root 用户并切换 在 Dockerfile 中创建非 root 用户并切换,同时确保 Nginx 以该用户运行,示例如下: ```Dockerfile FROM nginx:alpine # 创建一个非 root 用户和组 RUN addgroup -S appgroup && adduser -S appuser -G appgroup # 切换到非 root 用户 USER appuser # 配置 Nginx 以非 root 用户运行 RUN sed -i 's/user nginx;/user appuser appgroup;/' /etc/nginx/nginx.conf ``` 这样在构建镜像并运行容器时,Nginx 会以 appuser 用户运行,在一定程度上保证了权限的合理分配。如果涉及上传文件,需要确保上传目录对 appuser 有写入权限。可以在 Dockerfile 中添加如下内容来设置上传目录权限: ```Dockerfile RUN mkdir -p /var/www/uploads && chown -R appuser:appgroup /var/www/uploads ``` 以上代码创建了一个上传目录 `/var/www/uploads`,并将其所有权赋予 appuser 用户和 appgroup 组。 ### 通过 docker run 指定用户 通过 `docker run -u` 指定用户 ID 或用户名,示例命令如下: ```bash docker run -d -p 80:80 --name my-nginx --user 1001 nginx:latest ``` 其中 `--user 1001` 指定了容器内进程以 UID 为 1001 的用户运行。若 appuser 的 UID 为 1001,则容器内进程将以 appuser 运行。同时,要确保宿主机上对应的上传目录对该用户有写入权限。 ### 使用 acl 进行更精细的权限控制 可以使用 `acl`(访问控制列表)对上传目录进行更精细的权限控制。首先查看文件、目录访问控制权限,示例命令如下: ```bash getfacl file-data/ ``` 若要给 appuser 赋予上传目录的写入权限,可使用以下命令: ```bash setfacl -m u:appuser:rwX /var/www/uploads ``` 上述命令为 appuser 用户添加了对 `/var/www/uploads` 目录的读写和执行权限。 ### 配置用户权限权限配置文件中配置 appuser 对 Nginx 上传相关操作的权限,示例配置如下: ```plaintext appuser ALL=(ALL) /usr/sbin/nginx, /var/www/uploads/* ``` 以上配置允许 appuser 用户执行 Nginx 相关操作以及对上传目录下的文件进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值