从安全的角度讲,Linux上进程启动,不应该使用root这种特权账号,不应该让启动账号具有特权,有的改造方案提出通过sudo启动进程,不用root账号启动,这就可以了,但实际上这种操作是正确的么?
原则上,通过sudo启动的进程,本质上就是以root身份运行的。sudo的作用可理解成:临时借用root的身份执行一条命令。
因此当用sudo启动一个进程后:
进程的属主(UID)就是root
进程拥有 root 的全部权限,可以访问任何文件、执行任何系统调用
只是触发这个动作的用户是普通用户,但进程本身不是以普通用户身份在跑
例如,
普通用户执行
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账号执行没有本质区别。
为什么很多人会有“这算不算root启动”的疑问?
可能是因为将”发起动作的用户”和”进程的实际有效用户”搞混了:
发起动作的是普通用户(在终端里敲了sudo)
但进程真正运行的身份是root
sudo的核心就是身份切换,不是”带权限的普通用户”。
什么时候才算”不用root启动”?
直接以普通用户身份运行:./my_program
用su – user切换到另一个非root用户再运行
用sudo -u otheruser指定以其他非root用户运行
通过setuid位切换到非root用户(如passwd程序)
如果你的本意是想让进程”拥有部分特权但又不是root”,需要用到Linux capabilities(例如setcap cap_net_raw+p ./program)或者seccomp / AppArmor等机制,而不是单纯用sudo。
因此,用sudo启动的进程,显示是root,就是root启动的,不算”不用 root”。
声明:来自bisal的个人杂货铺,仅代表创作者观点。链接:https://eyangzhen.com/7619.html