在 Debian(以及其它 Linux 发行版)中,“修改进程权限”通常不是直接“改一个正在运行的进程的权限”,而是通过启动方式、用户身份、Capability、文件权限等手段来控制进程能以什么权限运行。下面按常见场景说明。
su / sudo 切换用户sudo -u www-data /usr/bin/some_program
这样进程就以 www-data 用户权限运行。
编辑 service 文件:
[Service]
User=www-data
Group=www-data
ExecStart=/usr/bin/some_program
然后:
systemctl daemon-reload
systemctl restart your_service
可以让程序以文件所有者身份运行:
chown root:root /usr/bin/myprog
chmod u+s /usr/bin/myprog
⚠️ 注意:
比 setuid 更细粒度:
# 给程序绑定 1024 以下端口的权限
setcap 'cap_net_bind_service=+ep' /usr/bin/myprog
查看:
getcap /usr/bin/myprog
常用 capability:
cap_net_bind_service:绑定特权端口cap_net_raw:raw socketcap_sys_admin:很多系统操作(危险)ps -eo pid,user,cmd | grep myprog
程序内部调用:
setuid(1000);
setgid(1000);
不是改进程,而是改资源权限:
chown user:group file
chmod 600 file
进程能否访问,取决于:
systemd-run --uid=1000firejail--user 1000:1000)| 需求 | 推荐方式 |
|---|---|
| 以某用户运行 | sudo -u / systemd User |
| 绑定特权端口 | setcap |
| 完全 root | sudo / setuid |
| 限制权限 | 普通用户 + capability |
| 运行中改权限 | 几乎不可行 |
如果你能说明:
我可以给你更精确的操作命令。