В этом руководстве вы узнаете, как запускать только определенные команды с помощью sudo на Linux.
В нашем предыдущем руководстве рассказывалось, как добавить пользователя в группу sudo, чтобы они могли выполнять команды с повышенными привилегиями.
👥 Добавление, удаление и предоставление прав sudo пользователям Arch Linux
Таким образом, можно разрешить пользователю запускать только определенные команды с помощью sudo в вашей системе.
Это можно сделать, изменив файл /etc/sudoers или добавив пользовательский файл конфигурации sudoers в каталог /etc/sudoers.d.
Например, чтобы позволить пользователю с именем john перезапустить Network Manager от пользователя root на всех хостах, отредактируйте файл sudoers и добавьте строку, показанную ниже.
visudo
Чтобы редактировать файл sudoers, вы должны быть пользователем root или иметь права sudo.
sudo visudo
Затем добавьте строку, показанную ниже:
john ALL=(root) /bin/systemctl restart NetworkManager
Для выполнения определенных команд с sudo от имени любого целевого пользователя, например, чтобы разрешить пользователю john перезапускать только службу Apache с помощью sudo:
john ALL=(ALL) /bin/systemctl restart apache2
Обратите внимание, что при добавлении привилегий sudo для пользователя безопаснее поместить пользовательскую конфигурацию sudo в каталог /etc/sudoers.d:
echo "john ALL=(root) /bin/systemctl restart apache2" > /etc/sudoers.d/john
Чтобы разрешить конкретному пользователю запускать несколько определенных команд с помощью sudo:
john ALL=(ALL) /path/to/command1, /path/to/command2, /path/to/command3
Замените /path/to/command на полный путь к запускаемым командам и аргументы (если есть).
Вы можете найти полный путь к команде, используя команду which.
Например, чтобы найти полный путь к команде, command1:
which command1
Затем вы можете запустить эти команды, добавив к ним префикс sudo:
sudo systemctl restart NetworkManager
sudo systemctl restart command1
Для всех этих команд вам будет предложено ввести пароль для пользователя, от имени которого вы запускаете эти команды.
Хотите запускать некоторые команды sudo без запроса пароля?
Как запускать команды sudo без пароля
sudo имеет параметр под названием NOPASSWD, который можно использовать для указания команд, которые можно запускать как sudo без запроса пароля.
Например, чтобы позволить пользователю с именем john перезапустить Network Manager в системе Ubuntu от имени любого пользователя без запроса пароля:
john ALL=(ALL) NOPASSWD: /bin/systemctl restart NetworkManager
Чтобы перезапустить NetworkManager от имени любого целевого пользователя и группы, добавьте:
john ALL=(ALL:ALL) NOPASSWD: /bin/systemctl restart NetworkManager
Вы можете просто поместить эту строку в пользовательский файл sudoers следующим образом:
echo "john ALL=(ALL) NOPASSWD: /bin/systemctl restart NetworkManager" >> /etc/sudoers.d/john
Чтобы перезапустить Network Manager с помощью sudo;
sudo systemctl restart NetworkManager
Чтобы запускать все команды sudo без запроса пароля от имени любого пользователя, группы на всех хостах, введите:
username ALL=(ALL:ALL) NOPASSWD:ALL