在 CentOS 上配置 Golang 的权限,通常包括 文件/目录权限、用户权限、sudo 权限、以及运行 Golang 程序时的权限。下面按常见场景给你一个清晰配置指南。
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
设置环境变量(所有用户可用):
sudo vim /etc/profile
添加:
export PATH=$PATH:/usr/local/go/bin
生效:
source /etc/profile
✅ /usr/local/go 目录一般为 root 所有,普通用户只读,安全且正确
/opt/goapp/
├── bin/
├── src/
└── logs/
sudo useradd -r -s /sbin/nologin gouser
sudo mkdir -p /opt/goapp
sudo chown -R gouser:gouser /opt/goapp
sudo chmod 750 /opt/goapp
750:owner 可读写执行,group 可读执行,others 无权限777(不安全)go build -o bin/app main.go
sudo chown gouser:gouser bin/app
sudo chmod 755 bin/app
sudo vim /etc/systemd/system/goapp.service
示例:
[Unit]
Description=Go App
After=network.target
[Service]
User=gouser
Group=gouser
WorkingDirectory=/opt/goapp
ExecStart=/opt/goapp/bin/app
Restart=always
[Install]
WantedBy=multi-user.target
启用:
sudo systemctl daemon-reload
sudo systemctl start goapp
sudo systemctl enable goapp
✅ 不用 sudo 直接跑程序,权限安全
Golang 直接监听 80/443 需要 root 权限:
Nginx -> Go (127.0.0.1:8080)
sudo setcap 'cap_net_bind_service=+ep' /opt/goapp/bin/app
查看:
getcap /opt/goapp/bin/app
如果程序无法访问文件或端口:
sudo setenforce 0
sudo semanage port -a -t http_port_t -p tcp 8080
sudo restorecon -Rv /opt/goapp
| 问题 | 原因 | 解决 |
|---|---|---|
| permission denied | 用户无权 | chown / chmod |
| cannot bind port 80 | 非 root | setcap / nginx |
| 程序无法写日志 | 目录权限 | chown logs |
| SELinux 拒绝 | 安全策略 | setsebool / semanage |
✅ 使用 专用用户运行 Go 程序
✅ 不用 root 跑业务程序
✅ 目录权限 750 / 755
✅ 用 systemd 管理
✅ 端口用 nginx 转发
如果你有 具体场景(比如:Go Web、cron、Docker、Kubernetes、CentOS 7/8),我可以给你 精准权限方案。