Как правильно избежать необходимости использования sudo пароля в bash-скрипте - PullRequest
0 голосов
/ 10 октября 2019

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!")
...