在 CentOS 上遇到 Java 程序写日志提示“权限不足(Permission denied)”,通常是日志目录/文件权限、SELinux、或运行用户不对导致的。下面按最常见原因逐一排查和解决。
ps -ef | grep java
常见情况:
root 启动 → 日志目录却是给 tomcat / appuser 的假设日志目录是 /var/log/myapp
ls -ld /var/log/myapp
ls -l /var/log/myapp
给运行 Java 的用户授权:
chown -R appuser:appuser /var/log/myapp
chmod 755 /var/log/myapp
如果是临时测试:
chmod 777 /var/log/myapp # 不推荐生产环境
检查:
logback.xmllog4j2.xmlapplication.yml例如:
logging:
file:
name: /var/log/myapp/app.log
确保:
即使权限是对的,SELinux 也可能拦截。
getenforce
如果是 Enforcing,继续看。
sudo audit2why -a
# 或
sudo tail -f /var/log/audit/audit.log
setenforce 0
给日志目录设置正确 SELinux 上下文:
semanage fcontext -a -t var_log_t "/var/log/myapp(/.*)?"
restorecon -Rv /var/log/myapp
或允许写日志:
setsebool -P httpd_can_network_connect on
如果是 systemctl start myapp
查看服务用户:
cat /usr/lib/systemd/system/myapp.service
确保:
User=appuser
然后:
systemctl daemon-reload
systemctl restart myapp
df -h)可以把以下信息发我,我可以直接告诉你怎么改:
ls -ld 日志目录 的输出我可以直接给你精准命令。