subprocess.check_output 忽略 euid

subprocess.check_output ignoring euid

我有以下 bash 脚本:

echo "$(id -u)"
mkdir test

我自己的用户 ID 是 1000。现在,当我 运行 python3.5 没有 root 权限并通过 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 权限(即,不设置 "real" uid ?)

setegid只设置current process. Same with seteuid.

的有效组id

check_output 产生了一个新进程,它显然仍然是 运行 作为 root。 如果您尝试创建文件夹 using python 而不是花钱去做,您可能会更幸运,但我认为这是一个简化的示例,因此可能不合适。是否可以 运行 python 脚本作为预期用户?如果不是,你可能需要做这样的事情;

subprocess.check_output(["sudo", "-uexpected_user", "./script.sh"])