Некоторые действия в системе Linux, например, установка приложений, изменение системных конфигураций, перезапуск сервисов требуют повышенных привилегий. Чтобы выполнить команду с повышенными привилегиями, необходимо использовать префикс sudo, который позволяет выполнять команды от имени администратора или пользователя root. Для этого вам нужно просто поставить sudo перед командой, которую вы хотите выполнить. При этом обычно потребуется ввести свой пароль, чтобы подтвердить свои намерения
Попробуем выполнить команду sudo пользователем alice
alice@vbox:~$ sudo date [sudo] password for alice: alice is not in the sudoers file. This incident will be reported.
Система не дала пользователю выполнить команду с повышенными привилегиями, потому что пользователь не входит группу sudo.
alice@vbox:~$ id uid=1001(alice) gid=1001(alice) groups=1001(alice)
Пользователь входит только в “свою” группу. Добавим пользователя alice в группу sudo
root@vbox:~# usermod -a -G sudo alice root@vbox:~# id alice uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)
И снова выполним команду
alice@vbox:~$ sudo date [sudo] password for alice: Сб 06 мая 2023 12:23:26 UTC
После ввода пароля получилось выполнить команду с повышенными привилегиями.
Почему для повышения привилегий необходимо состоять в группе sudo. Дело в том, кому позволено повышать привилегии описывается в файле /etc/sudoers, среди которых будут интересующие нас строки
# Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL @includedir /etc/sudoers.d
Знак процента перед названием указывает, что правило относится к группе. Такое же правило можно указать для конкретного пользователя.
!!! ВАЖНО. Категорически запрещено вносить изменения в файл /etc/sudoers обычными текстовыми редакторами, так как любая синтаксическая ошибка в файле приведет к недоступности выполнять операции с повышенными привилегиями. В случае необходимости отредактировать файл, нужно использовать приложение visudo, которая откроет текстовые редактор и при сохранении проверит синтаксис файла. Для безопасного добавления новые правила следует размещать в файлах в директории /etc/sudoers.d, на что указывает директива @includedir.
root@vbox:~# echo "bob ALL=(ALL) ALL" >> /etc/sudoers.d/bob
bob@vbox:~$ sudo date [sudo] password for bob: Вс 14 мая 2023 09:57:12 UTC
Но все еще для выполнения sudo требуется ввод пароля. Для того, чтобы выполнить команду sudo без ввода пароля, необходимо добавить параметр NOPASSWD в правило. Добавил правило для пользователя charlie
root@vbox:~# echo "charlie ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/charlie
charlie@vbox:~$ sudo date Вс 14 мая 2023 10:02:35 UTC