Java webappがUbuntu LinuxのApache Tomcatで実行されています。Tomcat9からTomcat 8にアップグレードすると、アプリケーションは/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
ユーザーとしてメインメソッドで同様のコードを実行した場合
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サンドボックス化が原因です。この問題を解決するには、Tomcatの追加ディレクトリへの読み取り書き込みアクセスを許可するようにsystemdに指示する必要があります。
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
内の独自のディレクトリに書き込むことができます。