Issue
Я пытаюсь использовать динамическое MOTD (сообщение дня, / etc / motd) и для редактирования файла мне нужно запустить sudo. Далее, у меня / etc / profile вызывается скрипт на python, который пишет в / etc / motd.
В / etc / profile я вызываю sudo python generateMOTD.py
В generateMOTD.py я открываю, пишу, закрываю.
Когда открывается новая вкладка или Терминал, отображается MOTD (старая,до изменения), а затем мне предложат ввести пароль. Я не хочу, чтобы здесь был пароль.
Моя попытка исправить его
Чтобы попытаться исправить это, я отредактировал / etc / sudoers, включив в него оба:
<user> ALL=(ALL:ALL) NOPASSWD:/etc/generateMOTD.py
<user> ALL=(ALL:ALL) NOPASSWD:/etc/profile
где <user>
- мое имя пользователя.
Теперь это работает, если я вызываю / etc / profile или /etc/generateMOTD.py из командной строки;он не запрашивает пароль.
Когда я запускаю его как положено (в начале сеанса), он запрашивает пароль. Я добавил операторы echo / print в большинство шагов до / после (то есть до и после вызова generateMOTD.py в профиле и до и после моего кода в generateMOTD.py)Таким образом, на консоли зарегистрировано 4 оператора, которые идут profileBefore > pythonCodeBefore > pythonCodeAfter > profileAfter
. При запуске в начале сеанса (новая вкладка / терминал) меня просят ввести пароль сразу после первого сообщения (profileBefore), но перед остальными сообщениями. Так что это связано с моим оператором sudo python generateMOTD.py
, но я просто не могу его понять.
Все файлы, с которыми я имею дело:
/ etc / sudoers:
...
<user> ALL=(ALL:ALL) NOPASSWD:/etc/generateMOTD.py
<user> ALL=(ALL:ALL) NOPASSWD:/etc/profile
/ etc / profile
...
echo "BEFORE PROFILE PYTHON CALL:"
sudo python /etc/generateMOTD.py
echo "AFTER PROFILE PYTHON CALL:"
/ etc / generateMOTD.py
print ("IN THE MIDDLE OF THE PYTHON CALL, BEFORE!")
f= open("/etc/motd","w+")
f.write("!MOTD!\n")
f.close()
print ("IN THE MIDDLE OF THE PYTHON CALL, AFTER WRITE!")