1. 程式人生 > >有關Tomcat 8.5版本文件上傳後無權限訪問的問題

有關Tomcat 8.5版本文件上傳後無權限訪問的問題

排除 接下來 jsb 英文 log 是不是 nts csdn details

http://blog.csdn.net/myo_o1/article/details/64131124

之前在tomcat 7下文件上傳後訪問一直沒問題,現在tomcat版本升到8.5,在測試文件http上傳時,發現所傳文件無法通過nginx訪問了。(Tomcat具體版本為8.5.11)

技術分享圖片

PS:tomcat通過root用戶來啟動。

在確定了nginx自身的沒有配置問題之後,上linux服務器查看所傳文件,發現其上傳目錄下代碼自動創建的目錄權限是750,所上傳文件權限是640。也就是說默認賦予的文件權限中其他用戶的權限始終為0所導致。

默認權限與umask有關,因此懷疑是系統默認導致,但在查看系統默認配置(/etc/profile)後,發現默認配置沒問題。

技術分享圖片

umask 002 對應文件權限664,文件夾權限775;umask 022對應文件權限644,文件夾權限755。可見都有讀取訪問權限的。在默認情況下,tomcat所建目錄及文件應該用到的是umask 022,但為何實際情況並非如此呢?

(按照結果看tomcat 8.5下上傳文件的默認權限為umask 027)

問題到這裏,排除下來可能的原因並不多了,因為之前在其他機器上使用tomcat 7的時候是上傳後訪問沒問題的,所以又拿tomcat 7在這臺服務器上測試了一下,以判斷是不是tomcat 8.5自身的問題。結果發現,在同臺服務器上tomcat 7上傳後訪問沒問題。最終定位為題是在tomcat 8.5上。

接下來,抱著試一試的心態,在tomcat 8.5的catalina.sh中搜索 umask關鍵字(因為我始終有個直覺這和默認權限設置有關,結果證實這次的判斷是準確的),很慶幸,原因立馬就定位到了。

技術分享圖片

UMASK=”0027”出現了!在按照目前的功能需求,將其改為UMASK=”0022”並重啟tomcat 8.5後,文件上傳後訪問恢復正常。

至此,問題解決。期間,不是沒想過通過百度或google解決問題,但是因為tomcat 8.5版本比較新,相關問題的中文文檔就沒有搜到。英文文檔也是在定位了tomcat 8.5問題後搜索關鍵詞tomcat8.5 umask後在tomcat官網文檔及相關英文論壇裏發現了蹤跡。

技術分享圖片

技術分享圖片

有關Tomcat 8.5版本文件上傳後無權限訪問的問題