在 Debian(以及所有 Linux 发行版)里,“进程权限”通常不是“单独给进程设权限”,而是由进程的「运行用户/组」+ 文件/系统权限 + 安全机制共同决定的。下面按常见场景给你系统讲一下。
sudo -u www-data python app.py
进程就以 www-data 身份运行,权限等同于该用户。
在 /etc/systemd/system/xxx.service 中:
[Service]
User=www-data
Group=www-data
ExecStart=/usr/bin/python /opt/app/app.py
然后:
sudo systemctl daemon-reload
sudo systemctl restart xxx
✅ 推荐方式:服务都用 systemd 指定用户
进程能读/写/执行什么,取决于:
ls -l /var/www/html
# -rw-r--r-- 1 www-data www-data 123 Apr 10 10:00 index.html
常用命令:
chown user:group file
chmod 640 file
chmod 750 dir
setuid(1000);
或 Python:
os.setuid(1000)
sudo chmod u+s /usr/bin/myprog
⚠️ 非常危险,容易出安全漏洞
比 root 更安全:
sudo setcap cap_net_bind_service=+ep /usr/bin/myprog
例如:
sudo查看:
getcap /usr/bin/myprog
Debian 支持:
sudo aa-status
sudo aa-enforce /etc/apparmor.d/usr.bin.myprog
| 需求 | 做法 |
|---|---|
| 普通用户跑服务 | systemd User= |
| 绑定 80 端口 | setcap cap_net_bind_service |
| 限制进程权限 | 非 root + AppArmor |
| 只允许读某目录 | 文件权限 + 用户组 |
| 临时提权 | sudo / polkit |
ps -eo pid,user,cmd | grep app
id www-data
ls -l /path
如果你能说清楚:
cat /etc/debian_version)我可以直接给你具体配置示例。