1. 程式人生 > >有關Tomcat 8.0版本檔案上傳後無許可權訪問的問題

有關Tomcat 8.0版本檔案上傳後無許可權訪問的問題

之前在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官網文件及相關英文論壇裡發現了蹤跡。