web 上传文件到linux没权限,Javaweb上传文件到Linux 没有读写权限
一、 問題描述
背景描述:
0.saas-business-運營后臺,website-網站頁面。
1.javaweb程序(saas-business)部署在linux系統 tomcat服務器下,使用該程序里面上傳圖片功能,上傳圖片至linux服務器掛載盤(共享盤)中/nfs/uploads/目錄下。tomcat是以root用戶來運行的。
2.website,部署在另一臺linux系統ngxin容器中,該臺linux系統也掛載了(共享盤)/nfs/uploads/目錄。ngixn是以其他組的角色來運行的。
操作:
我通過saas-business里面的上傳圖片功能 ,上傳圖片到/nfs/uploads/下,查看服務器,確實已經上傳成功。
然后在瀏覽器中訪問website程序,卻訪問不到剛剛上傳的圖片。
問題:圖片成功上傳到linux服務器共享盤中,但卻在網頁中訪問不到!
二、 表面原因
在linux 中掛在盤目錄下,查看剛剛上傳的圖片:確實已經上傳成功。
[root@tmp4 backgroundImg]# ll
總用量 408
-rw-r----- 1 root root 414642 7月 11 17:27 login_background.jpg
可以看到 login_background.jpg圖片,對于當前 擁有者 、群組 、其它組 分別是:讀寫、讀、無。顯而易見,website是nginx容器以其他組的一個用戶來運行的,所有沒有任何權限。
找到表面原因,我們可以直接修改圖片的權限。
[root@tmp4 backgroundImg]# chmod 644 login_background.jpg
[root@tmp4 backgroundImg]# ll
總用量 408
-rw-r--r-- 1 root root 414642 7月 11 17:27 login_background.jpg
此時,通過網站訪問 該圖片便沒有問題。
三、 根本原因
因為tomcat版本的差別。我當前使用的是tomcat8.5.+,當我將為tomcat8.0.24版本便沒有此問題。
下面,做的配置,是以tomcat8.5.+版本 為例的。
a)、檢查linux
linux文件訪問默認權限與umask有關,查看系統默認配置(/etc/profile)是否正常,如果是002或022就正常沒有問題。
[umask 002 對應文件權限664,文件夾權限775;
umask 022對應文件權限644,文件夾權限755]
b)、檢查tomcat
打開bin/catalina.sh文件,檢查大概在263行左右。
將0027改改為0022,重啟tomcat,上傳訪問的問題解決。
清單一、原代碼
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
UMASK="0027"
fi
清單二、修改為
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
UMASK="0022"
fi
c)、重啟tomcat
sh shutdown.sh(關閉)
sh startup.sh 或者 ./startup.sh(啟動)
四、總結:
Javaweb上傳文件到Linux 沒有讀寫權限,最后總結有以下3種解決方案。
1.將程序在容器中以root用戶運行。這時候運行權限最高。(如,我可以將website,由其他用戶組的nginx角色,改為所有者root權限,便沒有此問題)。
2.降低我的tomcat版本。(這個也是可行的)
3.修改tomcat中的bin/catalina.sh配置,并重啟tomcat(這個我覺得是最根本的,推薦使用)
彩蛋:查看程序啟動用戶,ps -ef | grep tomcat
總結
以上是生活随笔為你收集整理的web 上传文件到linux没权限,Javaweb上传文件到Linux 没有读写权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下查看进度命令,在Linux系
- 下一篇: aix内核是linux,查看Linux及