При выполнении сценария Python, как найти имя пользователя, из которого выполняется sudo? - PullRequest
0 голосов
/ 02 мая 2019

Я пишу код, который будет работать на разных машинах.Внутри кода файл журнала необходимо создать как "/ tmp / 2019-05-02 / log_file" , т. Е. Создать подкаталог для каждого дня, а затем создать файл журнала внутри новой папки.По этой причине, чтобы создать каталог внутри каталога "/ tmp", мне нужно запустить мой код как

sudo python /path/to/code.py

Позже в том же коде мне нужно создать другой каталог для каждого дня внутри "Документы" .владелец этого недавно созданного каталога - root, так как мой код работает как sudo.Настоящая проблема возникает, когда я хочу удалить этот недавно созданный подкаталог из Documents из приложения пользовательского интерфейса: Files.

Так что я сделал, изменил разрешение на каталог.Так что я могу удалить эту папку без каких-либо проблем.

os.chmod("/path/to/directory/inside/Documents", 0747)

Но теперь, когда я ls внутри Документов.Эта вновь созданная папка отображается в виде синего текста с зеленым фоном | указывает на то, что каталог доступен для записи другим пользователям, кроме владельца и группы, и не имеет установленного бита закрепления (o + w, -t).

Есть ли способ, при котором владелец папки, созданной в / tmp / 2019-05-2, является root, а папка, созданная в Documents, принадлежит обычному пользователю (с этого пользователя я выполнил программу как sudo).

На моей машине пользователь dell .Я могу сменить владельца, используя chown на моей машине, так как знаю свое имя пользователя.Но мне нужно сменить владельца, даже если код выполняется на другой машине с разными именами пользователя.

1 Ответ

0 голосов
/ 02 мая 2019

ИМХО самым надежным способом является использование os.getlogin(). Он возвращает имя для входа, связанное с сеансом , и может быть изменено только системным вызовом setlogin, который редко используется в обычных программах ( ref. ).

Руководство по Python гласит:

Для большинства целей более полезно использовать переменные среды LOGNAME или USERNAME, чтобы узнать, кто пользователь ...

Но справочные страницы Unix объясняют причину:

... Это более гибко, поскольку пользователь может произвольно установить LOGNAME.

...