-
-
Notifications
You must be signed in to change notification settings - Fork 33.3k
Open
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-subprocessSubprocess issues.Subprocess issues.type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
#!/usr/bin/python3
from os import getresuid, initgroups, setresgid, setresuid
from pwd import getpwnam
from subprocess import check_call
def drop_permissions():
user = 'nobody'
info = getpwnam(user)
uid = info.pw_uid
gid = info.pw_gid
assert uid
assert gid
initgroups(user, gid)
setresgid(gid, gid, gid)
setresuid(uid, uid, 0)
def run_privileged_proc():
def restore():
setresuid(0, 0, 0)
setresgid(0, 0, 0)
initgroups('root', 0)
check_call(['id'], preexec_fn=restore)
def main():
assert getresuid() == (0, 0, 0)
# This on works (dropping permissions in child process)
check_call(['id'], user=65534, group=65534)
drop_permissions()
# This one works:
run_privileged_proc()
# This does not:
check_call(['id'], user=0, group=0)
main()for the last subprocess, strace of child process:
set_robust_list(0x7eff7bfaea20, 24) = 0
close(7) = 0
close(9) = 0
close(11) = 0
dup2(6, 0) = 0
dup2(8, 1) = 1
dup2(10, 2) = 2
rt_sigaction(SIGPIPE, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK, sa_restorer=0x7eff7b83ea30}, {sa
rt_sigaction(SIGXFSZ, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK, sa_restorer=0x7eff7b83ea30}, {sa
setgroups(0, []) = -1 EPERM (Операция не позволена)
write(12, "OSError:", 8) = 8
write(12, "1", 1) = 1
write(12, ":", 1) = 1
write(12, "noexec", 6) = 6
exit_group(255) = ?
+++ exited with 255 +++
Python 3.10.7
Linked PRs
Metadata
Metadata
Assignees
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-subprocessSubprocess issues.Subprocess issues.type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error