os.setuid()拒绝权限

问题描述 投票:0回答:1

我需要以“ nobody”用户身份在主流程中运行一个子流程,如下所示:

def set_id() -> None:
    logging.warning(f"sub !sub! process user id is {os.getuid(), os.getgid(), os.getgroups()}!!!!!!!!!!!!")
    # out: root:sub !sub! process user id is (0, 0, [])!!!!!!!!!!!!
    # os.setgid(65534)  # work fine
    os.setuid(65534)  # can't work

pro = await asyncio.subprocess.create_subprocess_exec(
    # *tmp_cmd,
    "ls",
    stdout=asyncio.subprocess.PIPE,
    stdin=asyncio.subprocess.PIPE,
    stderr=asyncio.subprocess.PIPE,
    cwd=self._cwd,
    preexec_fn=set_id,
    start_new_session=True,
    close_fds=True,
)

当我打电话给os.setuid(65534)时,引发错误 PermissionError: [Errno 13] Permission denied。但是os.setgid(65534) 工作正常。这就是为什么?我怎样才能解决这个问题?提前致谢。

python subprocess python-os setuid
1个回答
0
投票

[os.setuid()方法通常仅对超级用户(root或具有类似权限的其他用户)可用,因为只有超级用户才能更改用户ID。

© www.soinside.com 2019 - 2024. All rights reserved.