🐧 Запуск команд от имени другого пользователя через Sudo в системах Linux |

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

Мануал

Представьте себе такой сценарий. Вы управляете сервером Linux, к которому имеют доступ несколько пользователей.

Все пользователи имеют права sudo.

Вы хотите протестировать определенные команды Linux с разными пользователями.

Как бы вы это сделали?

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

Да, это один из способов сделать это.

Однако существует простой способ запуска команд от имени другого пользователя через sudo в Linux.

Читайте дальше, чтобы узнать об этом.

Для целей этого руководства я создал две учетные записи пользователей “itsecforu” и “itisgood” на своей тестовой машине AlmaLinux 8.

Я собираюсь использовать “itsecforu” в качестве текущего пользователя и “itisgood” в качестве целевого пользователя.

Я хочу, чтобы пользователь “itsecforu” мог выполнять любую команду от имени пользователя “itisgood” на любом хосте, не входя в систему под именем “itisgood”

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

В настоящее время я вошел в систему как пользователь “itsecforu”.

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

$ whoami
itsecforu

Теперь я собираюсь выполнить простую команду “echo” с помощью sudo в качестве целевого пользователя “itisgood”, войдя в систему под именем “itsecforu”:

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

Вам будет предложено ввести пароль текущего пользователя (в данном случае “itsecforu”). После аутентификации команда echo будет запущена от имени пользователя “itisgood” и отобразит имя пользователя и идентификатор пользователя “itisgood”.

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

[sudo] password for itsecforu: 
My Username is itisgood , and my user ID is 1001

На самом деле мы только что выполнили команду “echo” от имени пользователя “itisgood”, в то время как мы вошли в систему под именем “itsecforu”.

Вот почему вы видите имя пользователя и идентификатор пользователя “itisgood”, но не “itsecforu”.

Давайте проверим, правильно ли указан uid пользователя “itisgood” с помощью команды id.

$ id itisgood
uid=1001(itisgood) gid=1001(itisgood) groups=1001(itisgood),10(wheel)

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

Вы должны указать команду в одинарной кавычке.

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

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

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

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

Почему?

Потому что команда echo не требует пароля sudo.

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

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

$ sudo -u itisgood bash -c 'sudo dnf --refresh update'

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

[sudo] password for itsecforu: 
[sudo] password for itisgood : 
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!

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

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

Почему?

Потому что команда echo не требует пароля sudo.

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

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

$ sudo -u itisgood bash -c '~/backup_script_name'

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

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

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

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

Для этого сначала найдите путь к команде dnf с помощью команд which или 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.

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

itisgood ALL=NOPASSWD:/usr/bin/dnf

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

Теперь пользователь “itisgood” может выполнять команды dnf без пароля sudo.

$ sudo -u itisgood bash -c 'sudo dnf --refresh update'
[sudo] password for itsecforu: 
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 для “itisgood”

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

Заключение

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

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

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

Вы всегда должны быть осторожны при тестировании подобных советов по Linux.

 

 

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