我有以下bash脚本:
echo "$(id -u)"
mkdir test
我自己的用户ID是1000.现在,当我运行没有root权限的python3.5并通过subprocess.check_output
调用脚本时,脚本按预期工作并创建一个由我拥有的文件夹。
但是,当我用sudo启动python但是然后使用os.setegid(1000); os.setuid(1000)
时,脚本输出0和文件夹" test"由root拥有。虽然我得到echo "$(id -u)"
可能是期望的行为,但我不明白为什么这个文件夹归root所有。 os.seteuid()
函数不应该阻止吗?
我的确切电话是:
>>> os.setegid(1000)
>>> os.seteuid(1000)
>>> subprocess.check_output(["/.script.sh"])
这会导致文件夹" test"由root拥有。这是期望的行为,如果是这样,有什么方法可以作为普通用户启动脚本,同时仍然能够回到python脚本中的root权限(即,没有设置"真正的" uid? )
答案 0 :(得分:1)
setegid
仅设置current process的有效组ID。与seteuid相同。
check_output
会生成一个新进程,但仍显然仍以root身份运行。
如果您尝试创建文件夹using python而不是外壳来执行此操作,您可能会有更多的运气,但我想这是一个简单的示例,因此可能不合适。是否可以将python脚本作为预期用户运行?如果不是,你可能需要做这样的事情;
subprocess.check_output(["sudo", "-uexpected_user", "./script.sh"])