在 Linux 中,“进程权限”并不是由进程本身随意设置的,而是由进程所有者的身份(UID/GID)以及文件/系统权限共同决定的。下面从常见角度系统说明。
进程没有“自己设置权限”的能力,它的权限来源于:
setuid、capabilities)ps -eo pid,user,group,comm
或查看某个进程:
ps -p <PID> -o pid,user,uid,gid,comm
cat /proc/<PID>/status | grep -E 'Uid|Gid'
示例输出:
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
含义:
作用:程序运行时,以文件所有者的权限执行。
chmod u+s myprog
示例:
chmod 4755 myprog
myprog⚠️ 风险:SUID 程序是安全高危点,需谨慎使用。
chmod g+s myprog
#include <unistd.h>
setuid(0); // 尝试变成 root(需要权限)
setgid(1000);
⚠️ 限制:
setuid(root)setuid(getuid()); // 降权
setcap cap_net_admin+ep myprog
常见 capability:
cap_net_admin:网络管理cap_sys_time:修改系统时间cap_dac_override:绕过文件权限检查查看:
getcap myprog
✅ 比 SUID 安全,推荐用于服务程序。
umask 022
进程创建文件时:
666 - umask = 默认权限
sudo -u www-data myprog
或 systemd:
[Service]
User=www-data
Group=www-data
| 方式 | 作用 | 推荐 |
|---|---|---|
| SUID | 提权执行 | ⚠️ 谨慎 |
| SGID | 组权限 | ⚠️ |
| capabilities | 细粒度权限 | ✅ |
| sudo | 临时提权 | ✅ |
| setuid() | 编程控制 | ⚠️ |
| systemd User | 服务权限 | ✅ |
你可以告诉我:
我可以给你更精确的配置示例。