点击标题下「蓝色微信名」可快速关注
从安全的角度讲,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的个人杂货铺
腾讯云开发者社区:@bisal的个人杂货铺
头条号:@bisal的个人杂货铺
CSDN:@bisal
ITPub:@bisal
墨天轮:@bisal
51CTO:@bisal
小红书:@bisal
抖音:@bisal
近期更新的文章:
《英超第三十二轮》
《自然语言取代SQL的可能性?》
《NBA季后赛的对阵》
《RAG通俗易懂的理解》
《系统"向后兼容"的重要性》
近期Vlog:
《千岛湖》
《Skyline Luge》
《新疆之行(红山体育馆 - 国际大巴扎 - 红山公园 - 天山天池)》
《新疆之行(天马浴河 - 哈因塞 - 那拉提 - 依提根塞)》
《新疆之行(六星街 - 伊昭公路 - 夏塔)》
热文鉴赏:
《揭开"仿宋"和"仿宋_GB2312"的神秘面纱》
《Linux的"aarch"是多了个"a"?》
《中国队“自己的”世界杯》
《你不知道的C罗-Siu庆祝动作》
《大阪环球影城避坑指南和功略》
《推荐一篇Oracle RAC Cache Fusion的经典论文》
《"红警"游戏开源代码带给我们的震撼》
文章分类和索引:
《公众号2000篇文章分类和索引》