Python에서 사용자와 해당 그룹을 전환하는 방법은 무엇입니까?

Python에서 사용자와 해당 그룹을 전환하는 방법은 무엇입니까?

root_and_user.py또는를 사용하여 실행되는 python이라는 Python 스크립트 에서 관리자 사용자 계정으로 어떻게 전환합니까 ?doassudo

#!/usr/bin/env python3
from os import geteuid, seteuid
from subprocess import run
from sys import argv, exit

def touch(fname):
    with open(fname, 'a') as f:
        pass

#run this doas ./root_and_user.py 

if geteuid() == 0:
    touch("1.owned-by-root")
    touch("2.owned-by-root")
    seteuid(1000) 
    touch("1.owned-by-admin-user")
    touch("2.owned-by-admin-user")

touch()나는 빈 파일을 생성하는 나만의 사용자 정의 함수를 작성했습니다 . 1000네, 아이디입니다 admin_user. sudo또는 doas파일을 사용하여 스크립트를 실행하면 해당 파일 1.owned-by-admin-user이 생성되지만 그룹에 속함에도 불구하고 2.owned-by-admin-user여전히 그룹에 속합니다 . 내 목표는 이를 달성 하고 나뿐만 아니라 팀에도 속하는 것입니다 . 어떻게 해야 하나요?rootadmin_user1.owned-by-admin-user2.owned-by-admin-useradmin_useradmin_user

답변1

os.chown()방법은 Python 스크립트로 생성된 파일의 그룹 소유권을 수정하는 데 사용할 수 있습니다. 이 시도:

#!/usr/bin/env python3
import os
from os import geteuid, seteuid
from subprocess import run
from sys import argv, exit

def touch(fname):
    with open(fname, 'a'):
        os.utime(fname, None)

#run this doas ./root_and_user.py 

if geteuid() == 0:
    touch("1.owned-by-root")
    touch("2.owned-by-root")
    seteuid(1000) 
    os.chown("1.owned-by-root", 1000, 1000) # change owner and group to admin_user
    os.chown("2.owned-by-root", 1000, 1000) # change owner and group to admin_user
    touch("1.owned-by-admin-user")
    touch("2.owned-by-admin-user")
    seteuid(0)
    os.chown("1.owned-by-admin-user", 1000, 1000) # change owner and group to admin_user
    os.chown("2.owned-by-dmin-user", 1000, 1000) # change owner and group to admin_user

관련 정보