温馨提示×

如何设置linux进程权限

小樊
46
2026-09-09 13:28:52
栏目: 智能运维

在 Linux 中,“进程权限”通常涉及进程的属主/属组、特权级别(如 root)、能力(capabilities)、以及文件/系统资源的访问权限。下面按常见场景系统说明如何“设置”和控制进程权限。


一、以指定用户/组运行进程(最常见)

1. 使用 su / sudo

sudo -u www-data ./app.sh

或以 root 启动后再降权:

sudo ./app.sh

2. 使用 systemd 服务

[Service]
User=appuser
Group=appgroup

然后:

systemctl daemon-reload
systemctl restart yourapp

3. 程序中降权(C / Python 示例)

C:

setuid(1000);
setgid(1000);

Python:

os.setuid(1000)
os.setgid(1000)

二、设置可执行文件的“强制权限”

1. SUID / SGID(以文件属主身份运行)

chmod u+s /usr/bin/myprog
chmod g+s /usr/bin/myprog

效果:

  • SUID:进程以文件所有者权限运行
  • SGID:进程以文件所属组权限运行

⚠️ 危险,谨慎使用,避免 root SUID 程序。


三、使用 Linux Capabilities(推荐替代 root)

查看能力

getcap /usr/bin/ping

设置能力

setcap cap_net_bind_service=+ep /usr/bin/myapp

常见能力:

  • cap_net_bind_service:绑定 1024 以下端口
  • cap_sys_admin:高级系统管理
  • cap_dac_override:绕过文件权限检查

移除能力

setcap -r /usr/bin/myapp

四、限制进程权限(沙箱 / 最小权限)

1. 使用 nice / ulimit

ulimit -u 100      # 最大进程数
ulimit -n 1024     # 文件描述符
nice -n 10 ./app

2. 使用 systemd 限制

[Service]
NoNewPrivileges=true
ProtectSystem=strict
PrivateTmp=true

3. 使用容器

docker run --user 1000 --cap-drop ALL myimage

4. SELinux / AppArmor

  • SELinux:策略控制进程能访问什么
  • AppArmor:配置文件限制路径/能力

五、查看进程当前权限

ps -eo pid,user,group,cmd
cat /proc/<pid>/status | grep Cap

六、总结建议

✅ 最佳实践:

  • 不以 root 运行
  • capabilities 代替 SUID
  • systemd / 容器 管理权限
  • 遵循最小权限原则

如果你有具体场景(如:绑定 80 端口、访问设备、容器权限、提权问题),可以告诉我,我可以给更精确的方法。

0