Поиск по сайту:

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

Представьте себе этот сценарий. Вы управляете сервером Linux, к которому имеют доступ несколько пользователей. Все пользователи имеют права sudo. Вы хотите протестировать определенные команды Linux с разными пользователями. Как бы Вы это сделали? Войдите в систему как один пользователь и проверьте команды, а затем выйдите из системы и снова войдите в систему как другой пользователь и протестируйте команды? Да, это один из способов сделать это. Однако существует простой способ выполнять команды от имени другого пользователя через sudo в Linux. Читай дальше что бы узнать.

Для целей данного руководства я создал две учетные записи пользователей, а именно "senthil" и "kumar" на моей тестовой машине AlmaLinux 8. Я собираюсь использовать «sentil» в качестве текущего пользователя и «kumar» в качестве целевого пользователя.

Я хочу, чтобы пользователь «senthil» мог запускать любую команду от имени пользователя «kumar» на любых хостах без фактического входа в систему как «kumar». Понял? Хорошо, позвольте мне показать вам пример.

Запускайте команды от имени другого пользователя через Sudo

В настоящее время я вошел в систему как пользователь «senthil». Позвольте мне показать вам пользователя, вошедшего в систему с помощью команды whoami.

whoami
senthil

Показать текущего пользователя в Linux

Теперь я собираюсь запустить простую команду «echo» с sudo в качестве целевого пользователя «kumar», войдя в систему как «senthil»:

sudo -u kumar bash -c 'echo "My Username is $USER, and my user ID is $UID"'

Вам будет предложено ввести пароль текущего пользователя (в данном случае «sentil»). После аутентификации команда echo будет запущена от имени пользователя «kumar» и отобразит имя пользователя и идентификатор пользователя «kumar».

Пример вывода:

[sudo] password for senthil: 
My Username is kumar, and my user ID is 1001

На самом деле мы только что выполнили команду «echo» от имени пользователя «kumar», войдя в систему под именем «senthil». Вот почему вы видите имя пользователя и идентификатор пользователя kumar, но не Senthil.

Давайте проверим правильность uid пользователя «kumar» с помощью команды id.

id kumar
uid=1001(kumar) gid=1001(kumar) groups=1001(kumar),10(wheel)

Запускайте команды от имени другого пользователя через Sudo

Да, uid kumar верен в обоих выходных данных.

Здесь флаг -u используется для запуска данной команды от имени другого пользователя (т. е. в данном случае kumar), а bash -c используется для упоминания имени команды. . Вам следует упоминать команду в одинарных кавычках.

Если вы не используете опцию bash -c, команда echo вернет имя пользователя и uid текущего пользователя вместо целевого пользователя.

sudo -u kumar echo "My Username is $USER, and my user ID is $UID"
My Username is senthil, and my user ID is 1000

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

Обратите внимание, что в нашем предыдущем примере команды я не вводил пароль sudo для целевого пользователя. Почему? Потому что для команды echo не требуется пароль sudo.

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

sudo -u kumar bash -c 'sudo dnf --refresh update'

Пример вывода:

[sudo] password for senthil: 
[sudo] password for kumar: 
AlmaLinux 8 - BaseOS                                                                                                                                                               344  B/s | 4.3 kB     00:12    
AlmaLinux 8 - AppStream                                                                                                                                                            388  B/s | 4.7 kB     00:12    
AlmaLinux 8 - Extras                                                                                                                                                               316  B/s | 3.9 kB     00:12    
Dependencies resolved.
Nothing to do.
Complete!

Запускайте команды от имени других пользователей в Linux

Вы заметили, что я ввел пароль sudo для обоих пользователей? Да. Потому что мы запускаем «sudo dnf update», для которого требуются повышенные привилегии. Вот почему необходимо ввести пароль sudo для целевого пользователя. Для обычных команд, например. ls, uname и т. д., нам не нужно вводить пароль целевого пользователя.

Этот метод можно применять не только для команд Linux, но и для запуска сценариев. Допустим, вы хотите запустить сценарий резервного копирования, сохраненный в каталоге $HOME другого пользователя. Вы можете просто запустить скрипт от текущего пользователя от имени другого пользователя, используя эту команду:

sudo -u kumar bash -c '~/backup_script_name'

Запуск команд без пароля Sudo

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

Иногда вы можете оказаться в ситуации, когда не хотите вводить пароль sudo для каждой команды. В таких случаях вы можете пропустить запрос пароля для определенных команд, добавив параметр NOPASSWD в файл /etc/sudoers.

Допустим, вы хотите разрешить определенным пользователям запускать любую команду dnf без пароля sudo. Для этого сначала найдите путь к команде dnf с помощью команд который или whereis.

which dnf
/usr/bin/dnf
whereis dnf
dnf: /usr/bin/dnf /etc/dnf /usr/share/man/man8/dnf.8.gz

Как видите, путь к исполняемому файлу команды dnf/usr/bin/dnf.

Теперь отредактируйте файлы /etc/sudoers с помощью команды:

sudo visudo

Внимание! Обратите внимание, что вам не следует вручную редактировать файл sudoers с помощью любого текстового редактора. Всегда используйте команду visudo для безопасного редактирования файла sudoers.

Добавьте следующую строку в конец файла, чтобы позволить пользователю с именем «kumar» запускать команды dnf без пароля sudo.

kumar ALL=NOPASSWD:/usr/bin/dnf

Сохраните файл и выйдите.

С этого момента пользователь «kumar» может запускать команды dnf без пароля sudo.

[senthil@Almalinux8CT ~]$ sudo -u kumar bash -c 'sudo dnf --refresh update'
[sudo] password for senthil: 
AlmaLinux 8 - BaseOS                                                                                                                                                               358  B/s | 4.3 kB     00:12    
AlmaLinux 8 - AppStream                                                                                                                                                            324  B/s | 4.7 kB     00:14    
AlmaLinux 8 - Extras                                                                                                                                                               302  B/s | 3.9 kB     00:13    
Dependencies resolved.
Nothing to do.
Complete!

Видеть? Нам не нужно вводить пароль sudo для «kumar».

Чтобы отменить это поведение, просто удалите ранее добавленную строку из файла sudoers.

Заключение

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

Как я предупреждал, вы должны быть осторожны при тестировании этого метода в производственной системе. Вы можете по незнанию разрешить пользователю запустить вредоносную команду (например, rm) без необходимости ввода пароля sudo. Вы всегда должны быть осторожны при тестировании подобных советов по Linux.

Связанное чтение:

  • Выполнение команд в удаленных системах Linux через SSH
  • Как выполнить определенные команды без пароля Sudo в Linux

Статьи по данной тематике