在作業中,項目使用文件上傳。 這個功能很常見。 當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,重新上傳文件后,進行訪問,圖片正常訪問成功!
來看看,修改后,上傳文件的權限:
權限變化后,就可以正常訪問了。