鍍金池/ 問答/Java  Linux  網(wǎng)絡安全/ 如何讓springmvc上傳到Nginx的圖片文件自動擁有可讀的權限?

如何讓springmvc上傳到Nginx的圖片文件自動擁有可讀的權限?

1.描述
使用springmvc做了一個文件上傳的功能,將文件上傳到服務器上的/opt/upload/[年月日dir]/ 目錄下,tomcat和nginx部署在同一臺服務器上。

①Tomcat使用tomcat用戶啟動
clipboard.png

②Nginx使用nginx用戶啟動:
clipboard.png

#nginx.conf
#使用nginx用戶
user  nginx;

對upload目錄,分配的用戶和給予的權限如下:

chown -R tomcat:tomcat upload

#tomcat用戶可讀可寫可執(zhí)行,其它用戶如nginx用戶可讀可執(zhí)行不可寫
chmod -R 755 upload

2.問題
文件上傳功能沒有問題,nginx靜態(tài)資源映射也沒有問題。
只是新上傳圖片時,該圖片文件沒有權限,使用nginx訪問會出現(xiàn)403 forbidden。
clipboard.png

我不可能每上傳一張圖片就手動去設置一下它的權限。
請問我要怎么設置,才能讓新上傳的圖片自動擁有可讀的權限?

回答
編輯回答
帥到炸

已經(jīng)解決了,跟umask有關。
原因:
linux默認umask為022,對應權限為755,其它用戶可讀可執(zhí)行??梢詖im /etc/profile,搜索umusk關鍵字查看

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

而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為0022,與操作系統(tǒng)保持一致,然后重啟tomcat即可。

參考博客:
linux umask使用詳解
有關Tomcat 8.0版本文件上傳后無權限訪問的問題

2018年7月12日 09:16