"sudo"로 시작된 사용자 이름을 얻는 방법

"sudo"로 시작된 사용자 이름을 얻는 방법

내 문제: 사용자가 사용하는 Python 프로그램이 있습니다 sudo. 때로는 사용자의 집을 가져와야 하며 그렇게 하려면 이름만 알아야 합니다.

import pwd

pwd.getpwnam(username)

그래서: 프로그램을 시작한 사용자의 이름을 어떻게 알 수 있나요?

답변1

sudo몇 가지 환경 변수를 설정하는 무언가를 시작할 때 특히 SUDO_UID환경 변수에 액세스하는 일반적인 채널을 통해 실행되는 모든 프로그램은 이에 액세스할 수 있어야 합니다.

셸에서 다음과 같이 속임수를 써서 다른 설정을 볼 수 있습니다.sudo env | grep SUDO

답변2

이것은 현재 systemd(="root"), sudo, pkexec 및 일반 실행을 처리하는 데 사용하는 방법입니다. 확실히 더 예뻐질 수 있어요:

import os
import getpass
import pwd

def get_user():
    """Try to find the user who called sudo/pkexec."""
    try:
        return os.getlogin()
    except OSError:
        # failed in some ubuntu installations and in systemd services
        pass

    try:
        user = os.environ['USER']
    except KeyError:
        # possibly a systemd service. no sudo was used
        return getpass.getuser()

    if user == 'root':
        try:
            return os.environ['SUDO_USER']
        except KeyError:
            # no sudo was used
            pass

        try:
            pkexec_uid = int(os.environ['PKEXEC_UID'])
            return pwd.getpwuid(pkexec_uid).pw_name
        except KeyError:
            # no pkexec was used
            pass

    return user
➜  ~ python3 /home/mango/getuser.py
mango
➜  ~ sudo python3 /home/mango/getuser.py
mango
➜  ~ pkexec python3 /home/mango/getuser.py
mango

관련 정보