subprocess.run执行命令的权限归属及sudo场景权限疑问
subprocess.run 命令的权限继承规则
好问题!咱们直接把这事说清楚:subprocess.run 执行的命令,继承的是启动 Python 进程的用户权限,和 Python 文件本身的权限完全没关系。
核心逻辑拆解
文件权限(比如给 file.py 加 +x)只是控制这个文件能不能被执行,而进程运行时的权限,完全由启动它的上下文决定——谁启动了这个 Python 进程,进程就拥有谁的权限。
结合你的例子具体说明
当你用 sudo python3 file.py 启动脚本时,整个 Python 进程是以 root(超级用户) 身份运行的。这时候脚本里调用的 subprocess.run(['chmod', '+x', 'file.sh']),会直接继承 Python 进程的 root 权限,所以这个 chmod 命令是有权限修改几乎任何文件的权限的(只要文件系统本身没有额外限制,比如挂载时的 noexec 规则)。
反过来,如果不用 sudo,直接用普通用户身份运行 python3 file.py,那里面的 subprocess 命令就只能拥有这个普通用户的权限——比如没法修改 root 所属文件的权限。
额外补充场景
如果想让子命令用不同权限执行(比如父进程是普通用户,子命令要临时提权),可以在 subprocess.run 的命令里加 sudo,比如 subprocess.run(['sudo', 'chmod', '+x', 'file.sh']),这时候会触发 sudo 的权限验证流程。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

