У меня был скрипт в моей системе 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, они могут случайно или намеренно удалить важные материалы. Вы были предупреждены!
Я хочу выполнить вот эту команду
sudp apt install links2 , но мне выдает [sudo] password for color:
Я вводил sudo visudo color ALL=NOPASSWD:/bin/mkdir,/bin/chmod,/usr/bin/apt
Но мне все равно пишет введите пароль, а я не знаю какой
Что делать?
Так свой пароль, юзер в группе судо и может выполнять бинарник apt