Linux系統中JAVA創建文件后權限不足應該如何解決


在作業中,項目使用文件上傳。 這個功能很常見。 當Kai Ge今天更改其官方帳戶時,他遇到了一個問題,即無法訪問下載的文件,也無法通過瀏覽器訪問該文件。 它是怎么發生的? 經過許多問題之后,事實證明這是由於Tomcat的配置所致!

正文:

最近在Linux系統中通過tomcat部署項目后,由於程序有上傳文件功能。而上傳后的卻無法查看文件(通過createNewFile創建)。后來發現文件的權限為-rw-r-----,而文件的擁有者是root,這樣就只有擁有者有root用戶組的擁有讀取權限。

通過研究發現,Linux通過umask變量來控制創建文件的默認權限問題。我們知道在Linux系統規定,創建文件的最高權限為666,而創建文件夾的最高權限為777,系統通過變量umask來控制創建文件的權限問題。如果當umask的值為022時,則創建的文件權限為644,即權限是通過最高權限減去umask的值來控制的。

先來看看,上傳后文檔的權限:

 

我們可以看到,當文件上傳后,文件多所屬者是root.但是訪問不了,凱哥手動設置權限為777的時候,瀏覽器就可以訪問到了。但是通過程序上傳的時候,文件上傳后所屬者也是root,但是權限變成了640.而這個640權限,通過ftp是訪問不到的。凱哥圖片域名指向了圖片服務器的根目錄。這樣來看,應該是權限不夠導致的。於是開始各種嘗試。分析后,想,會不會是tomcat自己搞的鬼呢?於是,搜索后,看到一篇文章,但Linux系統umask的默認值是0022,也就是說創建的文件應該是644的權限,而上傳的文件卻是640的權限。后來通過對查詢Tomcat發現從tomcat8開始,catalina.sh文件中有下面幾行代碼

於是根據文章提示,找到自己tomcat的catalina.sh文件,大概在286行左右,如下圖:

一看,確實發現,tomcat的配置:

# Set UMASK unless it has been overridden

if [ -z “$UMASK” ]; then

#如果是0027的話,文件上傳后,權限640,圖片域名訪問不到。需要修改

#UMASK=“0027”

fi

umask $UMASK

於是,根據文章,果斷修改成“0000”:

保存文件,重啟tomcat,重新上傳文件后,進行訪問,圖片正常訪問成功!

來看看,修改后,上傳文件的權限:

權限變化后,就可以正常訪問了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM