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