Терминал Linux. 7 статья - доступ к sudo без ввода пароля.

В данной статье я расскажу о том, как можно запускать скрипты, программы от суперпользователя без ввода пароля.

Возможно не всё стало понятно из описания, что я имею в виду. Разберем на двух самых частых примерах и всё станет более понятно.

Цикл статей о терминале:
  1. Терминал Linux. 1 статья - команды навигации в терминале.

  2. Терминал Linux. 2 статья - команда поиска файлов и директорий в терминале

  3. Терминал Linux. 3 статья - команды поиска файлов (продолжение)

  4. Терминал Linux. 4 статья - создание, удаление, форматирование, монтирование разделов жесткого диска

  5. Терминал Linux. 5 статья - cоздание aliases (псевдонимов) в Ubuntu

  6. Терминал Linux. 6 статья - права доступа к каталогам и файлам в Linux, команды chmod и chown.

  7. Терминал Linux. 7 статья - доступ к sudo без ввода пароля.

Более подробно.

Допустим, есть у нас пользователь в системе. И у него нет доступа к командам суперпользователя. То есть его нет в группах admin и sudo.

Либо вот какая ситуация. Кто-то пользуется вашей учетной записью, а пароль вы свой давать не хотите.

И бывают такие ситуацию, что всем ЭТИМ людям требуется выполнять какие -то команды, которые требуют привилегия суперпользователя.

Опять же, допустим. Наш пользователь хочет обновлять компьютер через консоль.
То есть он хочет выполнять в терминале следующие команды:
sudo apt-get update
sudo apt-get dist-upgrade
Почему именно dist-upgrade а не upgrade, читаем в следующей статье:

Для этих манипуляций есть замечательное решение, которое очень гибкое.

В системе linux есть файл "sudoers", который позволяет настраивать много разных вещей.
Но мы остановимся в этой статье только на доступе к sudo без пароля для выполнения различных команд, а также скриптов.

Предупреждение!
Это текстовый файл и править его напрямую НЕЛЬЗЯ!!! Категорически.
Данная информация рассчитана на более опытных пользователей. Новичкам, только вчера установившим Ubuntu, лучше не лезть.

Для правки файла с привилегиями "sudoers" в Ubuntu существует команда:
sudo visudo

Выполнив в терминале данную команду, откроется текстовый файл в редакторе nano:


Напоминаю, что, если строка начинается с #, то это считается комментарием.
Вот следующий шаблон, который используется, для добавления пользователю доступа к sudo без пароля:
имя_пользователя ALL=NOPASSWD: команда
Мы поставили в начале статьи, что надо определенной учетной записи пользователя разрешить доступ к командам без пароля.
Так вот моему пользователю строчки будут выглядеть следующим образом:

edward ALL=NOPASSWD: /usr/bin/apt-get update
edward ALL=NOPASSWD: /usr/bin/apt-get dist-upgrade

Сохраняем (CTR-O) и закрываем (CTR-X) в nano.

Теперь пользователю доступны команды к обновлению системы без пароля:


Вот таким образом всё получилось.

Важные замечания.
1. Путь до программы прописывается полностью, то есть в нашем примере не apt-get, а /usr/bin/apt-get
Откуда мне узнать, где эта программа находится?
Очень просто, вводим в терминале команду
whereis название_программы
Получаем пути, и нас интересуют только каталоги /usr/bin и /usr/sbin.
Вот примеры:


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

3. Не надо бояться сделать ошибку! Чем хороша visudo для редактирования файла sudoers? Тем, что вы можете сделать ошибку, тогда при закрытии нам будет выдано предупреждение:


Здесь думаю лишним будет говорить, что "Quit" не выбираем НИКОГДА!!!

А как же скрипты???

Итак, разобрали возможно выполнения команд с sudo без ввода пароля.

А что же делать, если у нас есть набор команд, которые выполняются по очереди, и нам так лень вводить в каждой строке. Ну тогда их можно указать в sh скрипте и дать выполнить этот скрипт с sudo без ввода пароля.

Делается это аналогичным образом, паттерн такой же:

имя_пользователя ALL=NOPASSWD: полный_путь_до_скрипта

Опять же, следует избегать пробелов в названии каталогов, но если они есть то экранируются они "обратным слэшем" - \

Вот так будет выглядеть:
vpnuser  ALL=NOPASSWD: /etc/scripts/checkvpnc-connect.sh
vpnuser  ALL=NOPASSWD: /etc/scripts/checkvpnc-destiny.sh
И теперь пользователь выполнит в терминале:
sudo /etc/scripts/checkvpnc-destiny.sh
И у него выполнится скрипт и пароль спрошен не будет.

Вот так это делается.
Надеюсь, данная информация окажется вам полезной.

P.S. Кто-то может сказать, типа зачем такие сложности и вообще давайте дадим себе доступ на все команды с sudo без ввода пароля. (Это можно сделать в этом файле).
Но мы не виндоузпользователи, которые сидят под админами (большинство). Есть такая вещь, как безопасность и ей пренебрегать не стоит.

Поделиться:

Если у Вас возникли вопросы.

Приглашаю задавать их на сервисе вопросов и ответов: Ask LinuxRussia.com.
Там Ваши вопросы не потеряются и Вы быстрее получите ответ, в отличие от комментариев.

6 коммент. :

  1. Спасибо!
    В памятку запишу!

    ОтветитьУдалить
  2. Но таким образом мы затрагиваем важную тему: а когда следует доверять пользователю принимать обновления, получаемые из интернет?
    Ведь несколько недель назад проходило 14.04.2 после которого у пользователей возникли трудности...

    ОтветитьУдалить
    Ответы
    1. Там было не обновление, а пользователи в ручную ставили новый графический стек и ядро. Обновление безопасно. А давать доступ к apt-get install или apt-get нельзя категорически.

      Удалить
  3. Делаю так полный доступ. Надо знать просто - что делаешь.

    ОтветитьУдалить
  4. А почему нельзя редактировать файл "sudoers", да еще и категорически ? Всю жизнь вписываю туда нужные разрешения обычным редактором - leafpad.
    И еще, пути к командным файлам удобней просматривать командой 'type -a'. Не выдает лишнего мусора, в котором надо копаться.

    ОтветитьУдалить