sudoers nopasswd не работает на debian 12?

Вопрос или проблема

У меня проблемы с настройкой скрипта на 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, пароль по-прежнему требуется.

Возможные причины и решения

  1. Проблемы с кэшированием или старыми настройками:

    • Иногда файлы конфигурации могут не обновиться должным образом. Попробуйте выполнить команду sudo visudo, чтобы убедиться, что ваша конфигурация правильная и нет синтаксических ошибок. После этого внесите изменения и снова сохраните файл.
  2. Использование pty:

    • Как вы заметили в выводе команды sudo -l, для команды kf5/kdesu_stub отключено использование pty (!use_pty). Попробуйте добавить следующую строку в ваш файл sudoers выше вашей записи:
      Defaults:ivan !use_pty
    • Это может помочь отключить требование пароля для использования терминала на вашем устройстве.
  3. Местоположение скрипта:

    • Убедитесь, что скрипт helloSudo.sh действительно находится по указанному вами пути /home/ivan/helloSudo.sh. Ошибки с путями также могут повлиять на работу sudo.
    • Обратите внимание, что путевые символы (/ и ~) могут быть не распознаны должным образом в некоторых сессионных конфигурациях. Попробуйте использовать полный путь к Python-скрипту внутри вашего скрипта helloSudo.sh.
  4. Проблемы с конфигурацией sudo:

    • На некоторых системах могут быть дополнительные или более строгие политики безопасности. Проверьте любые параметры политики безопасности, которые могут вступать в конфликт с вашим NOPASSWD. Это может включать настройки AppArmor или SELinux, если они активированы.
  5. Исключения:

    • Рассмотрите возможность добавления отдельной строки для 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 требует осторожности, так как неправильные настройки могут привести к потере доступа к системе.

Оцените материал
Добавить комментарий

Капча загружается...