Вопрос или проблема
У меня проблемы с настройкой скрипта на Python, который должен выполняться от имени root, но без запроса пароля.
Это не первый раз, когда я это делаю, но в этот раз это не работает на Debian 12.
Что я уже пробовал:
- попробовать с исполняемым файлом вместо скрипта: то же самое поведение
- попробовать на другой системе Debian 12: то же самое поведение
- попробовать на Linux Mint, Fedora: работает без проблем
Так что в /etc/sudoers нет опечаток или проблем с порядком строк…
Вот последняя строка моего файла /etc/sudoers:
ivan All=(ALL) NOPASSWD: /usr/bin/veracrypt, /home/ivan/helloSudo.sh
Пример:
ivan@miniLab:~$ sudo ./helloSudo.sh
[sudo] Пароль ivan:
sudo: требуется ввести пароль
ivan@miniLab:~$ sudo veracrypt
[sudo] Пароль ivan:
sudo: требуется ввести пароль
=> так что пароль требуется для helloSudo.sh
и veracrypt
helloSudo.sh:
#!/bin/bash
python3 /home/ivan/hello.py
hello.py
import os
import getpass
msg=f"Hello World from {getpass.getuser()}"
print (msg)
ivan@miniLab:~$ sudo /usr/bin/veracrypt
[sudo] Пароль ivan:
sudo: требуется ввести пароль
=> та же проблема при указании полного пути!
Я только что попробовал на новой чистой установке Debian 12, и это работает. Так что у моих двух существующих установок Debian 12 есть проблема.
Есть идеи о том, как выяснить, что происходит?
ivan@miniLab:~$ sudo -l
[sudo] Пароль ivan:
Соответствующие записи по умолчанию для ivan на miniLab:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
Параметры по умолчанию для runas или командных специфичных параметров для ivan:
Defaults!/usr/lib/*/libexec/kf5/kdesu_stub !use_pty
Пользователь ivan может использовать следующие команды на miniLab:
(ALL : ALL) ALL
=> по-английски
ivan@miniLab:~$ sudo -l
[sudo] пароль ivan:
Соответствующие записи по умолчанию для ivan на miniLab:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
Параметры по умолчанию для runas или командно-специфичных параметров для ivan:
Defaults!/usr/lib/*/libexec/kf5/kdesu_stub !use_pty
Пользователь ivan может использовать следующие команды на miniLab:
(ALL : ALL) ALL
Ответ или решение
Проблема с настройками sudoers и NOPASSWD на Debian 12
У вас возникла проблема с запуском скрипта Python и программного обеспечения (veracrypt) от имени пользователя root без запроса пароля на Debian 12. При анализе данной ситуации можно выделить несколько ключевых моментов и возможные решения.
Анализ текущих настроек
Вы указали, что ваша запись в файле /etc/sudoers
выглядит следующим образом:
ivan All=(ALL) NOPASSWD: /usr/bin/veracrypt, /home/ivan/helloSudo.sh
Тем не менее, вы сталкиваетесь с запросом пароля при выполнении скрипта и программы:
ivan@miniLab:~$ sudo ./helloSudo.sh
[sudo] Mot de passe de ivan :
sudo: il est nécessaire de saisir un mot de passe
Это указывает на то, что, несмотря на наличие настройки NOPASSWD
, пароль по-прежнему требуется.
Возможные причины и решения
-
Проблемы с кэшированием или старыми настройками:
- Иногда файлы конфигурации могут не обновиться должным образом. Попробуйте выполнить команду
sudo visudo
, чтобы убедиться, что ваша конфигурация правильная и нет синтаксических ошибок. После этого внесите изменения и снова сохраните файл.
- Иногда файлы конфигурации могут не обновиться должным образом. Попробуйте выполнить команду
-
Использование pty:
- Как вы заметили в выводе команды
sudo -l
, для командыkf5/kdesu_stub
отключено использование pty (!use_pty
). Попробуйте добавить следующую строку в ваш файлsudoers
выше вашей записи:Defaults:ivan !use_pty
- Это может помочь отключить требование пароля для использования терминала на вашем устройстве.
- Как вы заметили в выводе команды
-
Местоположение скрипта:
- Убедитесь, что скрипт
helloSudo.sh
действительно находится по указанному вами пути/home/ivan/helloSudo.sh
. Ошибки с путями также могут повлиять на работу sudo. - Обратите внимание, что путевые символы (
/
и~
) могут быть не распознаны должным образом в некоторых сессионных конфигурациях. Попробуйте использовать полный путь к Python-скрипту внутри вашего скриптаhelloSudo.sh
.
- Убедитесь, что скрипт
-
Проблемы с конфигурацией sudo:
- На некоторых системах могут быть дополнительные или более строгие политики безопасности. Проверьте любые параметры политики безопасности, которые могут вступать в конфликт с вашим
NOPASSWD
. Это может включать настройки AppArmor или SELinux, если они активированы.
- На некоторых системах могут быть дополнительные или более строгие политики безопасности. Проверьте любые параметры политики безопасности, которые могут вступать в конфликт с вашим
-
Исключения:
- Рассмотрите возможность добавления отдельной строки для
veracrypt
и вашего скрипта. Например:ivan ALL=(ALL) NOPASSWD: /usr/bin/veracrypt ivan ALL=(ALL) NOPASSWD: /home/ivan/helloSudo.sh
- Рассмотрите возможность добавления отдельной строки для
Дополнительные рекомендации
-
Проверка версий: Убедитесь, что версии
sudo
на проблемных системах соответствуют исправной системе. Иногда изменения в новых версиях могут вызывать неожиданные проблемы. -
Проверка системных журналов: Проверьте системные журналы (
/var/log/syslog
и/var/log/auth.log
) для более подробной информации о том, почему sudo не может дать вам доступ без пароля. -
Создание тестового пользователя: Создайте нового пользователя с минимальными правами и настройте для него аналогичные параметры в
sudoers
, чтобы определить, возникает ли проблема только для вашего текущего пользователя.
Заключение
Если указанные выше рекомендации не решают проблему, может потребоваться более глубинный анализ конкретной конфигурации вашей системы и, возможно, обращение к сообществу поддержки Debian или к системным администраторам для дальнейшего обследования. Напоминаю, что работа с файлом sudoers требует осторожности, так как неправильные настройки могут привести к потере доступа к системе.