Как запускать определенные команды без пароля Sudo в Linux |

Как запускать определенные команды без пароля Sudo в Linux

Мануал

У меня был скрипт в моей системе Ubuntu, развернутый на AWS.

Основная цель этого скрипта – проверить, работает ли определенная служба с регулярным интервалом (если быть точным, каждую минуту) и автоматически запустить эту службу, если она остановлена по какой-либо причине.

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

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

Но я не хочу этого делать.

На самом деле я хочу запустить службу c sudo без пароля.

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

Сегодня в этом кратком руководстве я научу вас, как выполнять определенные команды без пароля sudo в Unix-подобных операционных системах.

Посмотрите на следующий пример.

$ sudo mkdir /itsecforu
[sudo] password for sk:

Как вы можете видеть выше, мне нужно предоставить пароль sudo при создании каталога с именем itsecforu в корневой (/) папке.

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

Однако в моем скрипте я не хочу предоставлять пароль sudo.

Вот что я сделал для запуска команды sudo без пароля на моем компьютере с Linux.

Выполнять определенные команды без пароля Sudo в Linux

По любым причинам, если вы хотите разрешить пользователю запускать определенную команду без указания пароля sudo, вам нужно добавить эту команду в файл sudoers.

Я хочу, чтобы пользователь с именем sk выполнил команду mkdir без указания пароля sudo.

Давайте посмотрим, как это сделать.

Редактируем файл sudoers:

$ sudo visudo

Добавьте следующую строку в конец файла.

sk ALL=NOPASSWD:/bin/mkdir

Здесь sk – это имя пользователя.

В соответствии с приведенной выше строкой пользователь sk может запустить команду «mkdir» с любого терминала без пароля sudo.

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

sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod

Сохраните и закройте файл.

Выйдите из системы (или перезагрузите компьютер).

Теперь войдите в систему как обычный пользователь “sk” и попробуйте запустить эти команды с помощью sudo и посмотрите, что произойдет.

$ sudo mkdir /dir1

Видите?

Несмотря на то, что я запускал команду «mkdir» с привилегиями sudo, пароль не запрашивался.

Отныне пользователю sk не нужно вводить пароль sudo при выполнении команды «mkdir».

При запуске всех других команд, кроме тех, которые добавлены в файлы sudoers, вам будет предложено ввести пароль sudo.

Давайте запустим еще одну команду с sudo.

$ sudo apt update

А теперь? Эта команда предлагает мне ввести пароль sudo.

Если вы не хотите, чтобы эта команда запрашивала пароль sudo, отредактируйте файл sudoers:

$ sudo visudo

Добавьте команду «apt» в  visudo, как показано ниже:

sk ALL=NOPASSWD: /bin/mkdir,/usr/bin/apt

Вы заметили, что путь двоичного исполняемого файла apt отличается от mkdir?

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

Чтобы найти путь к исполняемому файлу любой команды, например, «apt», используйте команду «whereis», как показано ниже.

$ whereis apt
apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz

Как видите, исполняемый файл для команды apt – /usr/bin/apt, поэтому я добавил его в файл sudoers.

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

Сохраните и закройте файл sudoers, как только вы закончите. Выйдите из системы и снова войдите в систему.

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

$ sudo apt update

Команда apt не спрашивала у меня пароль, хотя я запускал его с помощью sudo.

Вот еще один пример.

Если вы хотите запустить определенную службу, например apache2, добавьте ее, как показано ниже

sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin systemctl restart apache2

Теперь пользователь может запустить команду «sudo systemctl restart apache2» без пароля sudo.

Могу ли я выполнить повторную аутентификацию для конкретной команды в приведенном выше случае?

Конечно да!

Просто удалите добавленную команду. Выйдите и войдите обратно.

Кроме того, вы можете добавить директиву PASSWD: перед командой. Посмотрите на следующий пример.

Добавьте / измените следующую строку, как показано ниже.

sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt

В этом случае пользователь sk может выполнять команды «mkdir» и «chmod» без ввода пароля sudo.

Однако он должен предоставить пароль sudo при выполнении команды «apt».

Примечание: это только для образовательных целей. Вы должны быть очень осторожны при применении этого метода. Этот метод может быть как продуктивным, так и разрушительным. Скажем, например, если вы разрешите пользователям выполнять команду «rm» без пароля sudo, они могут случайно или намеренно удалить важные материалы. Вы были предупреждены!

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Тимур

    Я хочу выполнить вот эту команду
    sudp apt install links2 , но мне выдает [sudo] password for color:
    Я вводил sudo visudo color ALL=NOPASSWD:/bin/mkdir,/bin/chmod,/usr/bin/apt
    Но мне все равно пишет введите пароль, а я не знаю какой
    Что делать?

    Ответить
    1. cryptoparty автор

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

      Ответить