温馨提示×

ubuntu java权限问题怎么解

小樊
40
2026-09-25 10:22:50
栏目: 编程语言

在 Ubuntu 上,“Java 权限问题”通常不是 Java 语言本身的权限,而是运行环境、文件/目录权限、或安全策略导致的。下面按常见场景给你一套排查与解决办法。


一、最常见:执行 Java 程序提示 Permission denied

现象

bash: ./xxx.jar: Permission denied

或

java: command not found

解决

  1. 给执行权限
chmod +x xxx.jar

或

chmod 755 xxx.jar
  1. 正确运行方式
java -jar xxx.jar
  1. 确认 java 已安装
which java
java -version

没装就装:

sudo apt update
sudo apt install openjdk-17-jdk

二、读取/写入文件或目录没权限(最常见)

现象

java.io.FileNotFoundException (Permission denied)

解决

  1. 查看文件权限
ls -l /path/file
  1. 修改权限(示例)
sudo chmod 644 file
sudo chown youruser:youruser file
  1. 如果是目录
sudo chmod 755 /path/dir

⚠️ 不要随便 777

chmod 777 # 不推荐,有安全风险

三、System.getProperty(“user.home”) 或写用户目录失败

原因

  • 用 root 运行 Java
  • 实际用户不是你以为的用户

解决

whoami
echo $HOME

建议:不要用 root 跑业务 Java 程序


四、端口绑定失败(如 80 / 443)

现象

java.net.BindException: Permission denied

原因

Linux 下 1024 以下端口需要 root

解决方式(推荐顺序)

  1. 用 8080 / 8443
  2. 用反向代理(Nginx)
  3. 授权绑定端口(不推荐直接用 root)
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/java

五、Java 安全管理器(SecurityManager)限制

现象

AccessControlException

解决

  • Java 17+ 已废弃 SecurityManager
  • 如果是老系统:
java -Djava.security.manager -Djava.security.policy=my.policy App

或干脆去掉 SecurityManager(现代应用)


六、systemd 服务权限问题(重点)

现象

Java 程序在终端能跑,systemd 下不行

解决

编辑 service:

[Service]
User=appuser
Group=appuser
WorkingDirectory=/opt/app

然后:

sudo chown -R appuser:appuser /opt/app

七、SELinux / AppArmor(Ubuntu 主要是 AppArmor)

排查

sudo aa-status

临时测试

sudo systemctl stop apparmor

八、快速自检清单 ✅

whoami
java -version
ls -l 文件
ps -ef | grep java

如果你能告诉我:

  • 具体报错信息
  • 是 jar / tomcat / spring boot / 普通 Java
  • 是否在 root / docker / systemd 下运行

我可以直接给你精准命令。

0 踩