从安全的角度讲,Linux上进程启动,不应该使用root这种特权账号,不应该让启动账号具有特权,有的改造方案提出通过sudo启动进程,不用root账号启动,这就可以了,但实际上这种操作是正确的么?
原则上,通过sudo启动的进程,本质上就是以root身份运行的。sudo的作用可理解成:临时借用root的身份执行一条命令。
因此当用sudo启动一个进程后:
例如,
# 普通用户执行
sleep 100 &
ps aux | grep sleep
# 显示:user1 12345 ... sleep 100
# 用 sudo 执行
sudo sleep 100 &
ps aux | grep sleep
# 显示:root 12346 ... sleep 100从系统角度看,第二个sleep的"启动用户"就是root,和直接用root账号执行没有本质区别。
sudo)sudo的核心就是身份切换,不是"带权限的普通用户"。
./my_programsu - user切换到另一个非root用户再运行sudo -u otheruser指定以其他非root用户运行setuid位切换到非root用户(如passwd程序)如果你的本意是想让进程"拥有部分特权但又不是root",需要用到Linux capabilities(例如setcap cap_net_raw+p ./program)或者seccomp / AppArmor等机制,而不是单纯用sudo。