在 CentOS 上处理 Java 权限问题,通常出现在 文件/目录权限不足、执行权限不够、端口绑定失败、SELinux 限制 等场景。下面按常见情况给你一套排查与解决方法。
bash: ./xxx.jar: Permission denied
chmod +x xxx.jar
# 或
chmod 755 xxx.jar
如果是直接运行:
java -jar xxx.jar
确保 当前用户对 jar 文件有读权限。
java.io.FileNotFoundException (Permission denied)
ls -l /path/to/file
chown -R appuser:appuser /data
chmod -R 755 /data
建议:
root 跑 Javauseradd appuser
su - appuser
java.net.SocketException: Permission denied
非 root 用户不能绑定 < 1024 端口
sudo java -jar app.jar
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/java
getenforce
# Enforcing
tail -f /var/log/audit/audit.log
grep java /var/log/audit/audit.log
setenforce 0
# 允许 http 端口
semanage port -a -t http_port_t -p tcp 8080
# 允许访问目录
semanage fcontext -a -t httpd_sys_content_t "/data(/.*)?"
restorecon -Rv /data
Permission denied
Failed to start xxx.service
[Unit]
Description=Java App
[Service]
User=appuser
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -jar app.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
User 必须有权限访问:
chown -R appuser:appuser /var/log/app
chmod 755 /var/log/app
whoami
ls -l 文件
getenforce
firewall-cmd --list-all
journalctl -u yourapp
CentOS 上 Java 权限问题 = 用户权限 + 文件权限 + SELinux + 端口限制
如果你能具体说明:
我可以给你 更精确的解决方案。