首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >sudo启动的进程,到底算不算root启动的进程?

sudo启动的进程,到底算不算root启动的进程?

作者头像
bisal
发布2026-04-22 10:54:17
发布2026-04-22 10:54:17
440
举报

从安全的角度讲,Linux上进程启动,不应该使用root这种特权账号,不应该让启动账号具有特权,有的改造方案提出通过sudo启动进程,不用root账号启动,这就可以了,但实际上这种操作是正确的么?

原则上,通过sudo启动的进程,本质上就是以root身份运行的。sudo的作用可理解成:临时借用root的身份执行一条命令。

因此当用sudo启动一个进程后:

  • 进程的属主(UID)就是root
  • 进程拥有 root 的全部权限,可以访问任何文件、执行任何系统调用
  • 只是触发这个动作的用户是普通用户,但进程本身不是以普通用户身份在跑

例如,

代码语言:javascript
复制
# 普通用户执行
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"。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bisal的个人杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么很多人会有“这算不算root启动”的疑问?
  • 可能是因为将"发起动作的用户"和"进程的实际有效用户"搞混了:
  • 什么时候才算"不用root启动"?
  • 因此,用sudo启动的进程,显示是root,就是root启动的,不算"不用 root"。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档