Permissions
Tomcat 9 下的應用程序日誌記錄中斷:/var/log/myapp 的權限被拒絕
我有一個在 Ubuntu Linux 上的 Apache Tomcat 下執行的 Java webapp。當我從 Tomcat 8 從 Tomcat 9 升級時,應用程序不再能夠將日誌文件寫入
/var/log/myapp
. 我不知道為什麼它沒有權限登錄到這個位置。我的第一個想法是使用者改變了。Tomcat 8 在
tomcat8:tomcat8
使用者下執行。Tomcat 9 在tomcat:tomcat
使用者下執行。我用這些權限更新了目錄。tomcat
使用者和組都有tomcat
寫權限。我還檢查了該目錄的寫入和執行權限。該目錄具有寫入和執行權限,所有父目錄都具有執行權限。
/var/log/myapp/ drwxrwxr-x tomcat tomcat /var/log drwxrwxr-x root syslog /var drwxr-xr-x root root / drwxr-xr-x root root
如果我在我的 Web 應用程序下執行以下程式碼
File logdir = new File("/var/log/myapp"); setAttribute("debug", "<br>user: " + System.getProperty("user.name") + "<br>execute: " + logdir.canExecute() + "<br>read: " + logdir.canRead() + "<br>write: " + logdir.canWrite() );
它列印出沒有寫權限
user: tomcat execute: true read: true write: false
tomcat
如果我以使用者身份在 main 方法中執行類似的程式碼File logdir = new File("/var/log/myapp"); System.out.println("\n user: " + System.getProperty("user.name") + "\n execute: " + logdir.canExecute() + "\n read: " + logdir.canRead() + "\n write: " + logdir.canWrite() );
它列印出它有寫權限
user: tomcat execute: true read: true write: true
我已經用盡了所有我知道該怎麼做的調試。是什麼阻止我的 Web 應用程序寫入 tomcat 9 下的這個目錄?我需要做什麼來修復它。
這是由作為 Debian/Ubuntu 一部分的 tomcat 9 周圍的新 systemd 沙盒引起的。要解決這個問題,您需要告訴 systemd 允許對 Tomcat 的其他目錄進行讀寫訪問。
sudo mkdir -p /etc/systemd/system/tomcat9.service.d echo -e "[Service]\nReadWritePaths=/var/log/" | sudo tee /etc/systemd/system/tomcat9.service.d/logging-allow.conf sudo systemctl daemon-reload sudo systemctl restart tomcat9
進行這些更改後,Web 應用程序可以再次寫入自己的
/var/log
.資料來源:Debian Tomcat 9 發行說明