sudo visudo и команда все равно запрашивает пароль

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

У меня не получается использовать sudo visudo. Я прочитал эту статью Как запустить конкретную программу от имени root без запроса пароля? и эту статью sudo: запрашивается пароль, даже когда NOPASSWD установлен (помечена как дубликат).

Я пытаюсь создать команду-ярлык для вызова IDrive. Я создал скрипт /usr/local/bin/idrive, который просто запускает более длинную команду sudo /opt/IDriveForLinux/bin/idrive. Я сделал его исполняемым sudo chmod +x /usr/local/bin/idrive, а затем запустил sudo visudo и добавил эту строку в самом конце файла:

<username> ALL=(ALL) NOPASSWD: /usr/local/bin/idrive

Но когда я ввожу idrive, все равно запрашивается пароль sudo. Что я упускаю?

С sudo нужно вводить путь из файла sudoers. sudo /usr/local/bin/idrive.
Если ввести просто idrive, то sudo изнутри вашего скрипта запрашивает пароль, потому что он нигде не настроен.
Я бы рекомендовал следующую настройку:
<username> ALL=(ALL) NOPASSWD: /opt/IDriveForLinux/bin/idrive
и поместите это в ваш скрипт: /usr/local/bin/idrive

#!/bin/bash
sudo /opt/IDriveForLinux/bin/idrive

sudo -l должен показать вам команду /opt/IDriveForLinux/bin/idrive.

Также вы можете добавить псевдоним в ваш файл ~/.bashrc:
alias idrive="sudo /opt/IDriveForLinux/bin/idrive"

Ответ или решение

Ваша проблема с использованием sudo visudo, скорее всего, связана с недопониманием того, как работает команда sudo и конфигурационный файл sudoers. Давайте разберём теорию, пример и применение, чтобы избежать ошибок и правильно настроить ваш скрипт, чтобы больше не вводить пароль при его исполнении.

Теория

Команда sudo позволяет пользователю выполнять программы с привилегиями суперпользователя или другого пользователя. Для безопасности каждая попытка выполнить команду через sudo может требовать пароль, если в конфигурации sudoers не указано иное. Файл конфигурации sudoers управляет политикой прав доступа и может редактироваться через visudo — это специальная команда, которая проверяет правильность синтаксиса и предотвращает возможные ошибки, прежде чем сохранять изменения.

Тэг NOPASSWD в файле sudoers используется для указания, что пароля не требуется при вызове определенной команды. Однако, чтобы такое правило работало, команда должна указываться с абсолютным путем, и она должна быть вызвана именно в том виде, в котором она прописана в sudoers.

Пример

Допустим, у вас есть скрипт /usr/local/bin/idrive, который вы планируете использовать для запуска /opt/IDriveForLinux/bin/idrive. Вы прописали следующее правило в sudoers:

<имя_пользователя> ALL=(ALL) NOPASSWD: /usr/local/bin/idrive

Ожидается, что вызов команды через sudo позволит избежать запроса пароля. Однако данный пример принесет проблемы, если внутри скрипта /usr/local/bin/idrive используется другая команда sudo, которая не была учтена в sudoers.

Вы также можете столкнуться с ситуацией, когда при попытке выполнить /usr/local/bin/idrive напрямую, запрашивается пароль, потому что фактически команда sudo применяется к пути /opt/IDriveForLinux/bin/idrive, а не к /usr/local/bin/idrive.

Применение

Следующие шаги помогут устранить проблему:

  1. Проверка и исправление записи в sudoers:
    Измените запись в sudoers, чтобы явно разрешить выполнение конечной команды:

    <имя_пользователя> ALL=(ALL) NOPASSWD: /opt/IDriveForLinux/bin/idrive

    Это даст возможность выполнять конечную команду без пароля.

  2. Редактирование скрипта:
    Убедитесь, что скрипт /usr/local/bin/idrive вызывает нужную команду:

    #!/bin/bash
    sudo /opt/IDriveForLinux/bin/idrive

    Данный скрипт, при правильной конфигурации sudoers, будет работать без запроса пароля, так как путь, используемый в sudo, совпадает с тем, что указан в файле sudoers.

  3. Использование alias:
    Если хотите добавить простоту в процесс, добавьте алиас в ваш ~/.bashrc файл:

    alias idrive="sudo /opt/IDriveForLinux/bin/idrive"

    После добавления этой строки выполните команду source ~/.bashrc, чтобы применить изменения. Это позволит вам использовать просто idrive в командной строке.

  4. Тестирование изменений:
    Для проверки можете использовать команду sudo -l, чтобы увидеть, как применяются текущие правила sudoers для вашего пользователя. Убедитесь, что /opt/IDriveForLinux/bin/idrive указан в списке команд, доступных без ввода пароля.

Теперь, после выполнения этих изменений, вы должны быть в состоянии запускать скрипт или команду без постоянного запроса ввода пароля. Убедитесь, что путь в правилах sudoers и в вашем скрипте совпадают. Не забудьте всегда использовать visudo для редактирования файла sudoers, так как это гарантирует контроль целостности и предотвращает потенциальные ошибки конфигурации.

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

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