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

как в linux запустить процесс от имени другого пользователя?

Причины смены пользователя

Как вы уже знаете, система безопасности Linux базируется на определении прав доступа для трех сущностей: владелец файла, группа и остальные пользователи. Исполнять можно только те программы, к которым имеется доступ. Более того процесс, созданный пользователем, также наследует его права. Это означает, что программа не сможет выполнять действия недоступные пользователю. К таким операциям можно отнести: создание и редактирование файлов, запуск других процессов, доступ к аппаратным устройствам и т.д.

Такой подход не всегда бывает удобным. Зачастую необходимо выполнить ряд административных задач с расширенными правами. Это требует от пользователя выхода из системы и повторения процедуры входа под учетной записью администратора. В Linux существует негласное правило, по которому не полагается работать под администратором на постоянной основе. Данная учетная запись должна использоваться при крайней необходимости. Она имеет неограниченные права, что может повлечь неисправимые последствия в случае ошибочных действий.

Заметка
Существуют дистрибутивы, в которых учетная запись администратора отсутствует, а получение административных прав происходит на короткие промежутки времени с помощью специальных команд. Например, такой подход используется в дистрибутиве Ubuntu.

Запуск от имени пользователя

Различные дистрибутивы Linux имеют собственные инструменты для запуска программ от имени других пользователей. Мы рассмотрим только универсальные и присутствующие по умолчанию во всех сборках.

Команда su позволяет имитировать вход в систему под заданным пользователем. Для этого в первом параметре необходимо передать его имя. В общем виде вызов команды можно записать как «su [имя_пользователя]». После выполнения терминал войдет в специальный режим. Это будет заметно по изменившейся строке ввода. В ней будет отражено имя нового пользователя. В таком режиме можно работать также как и в обычном терминале. Все программы и команды оболочки будут запускаться от указанного при вызове su пользователя. Для выхода из этого режима необходимо нажать сочетание клавиш Ctrl + D или использовать команду exit.

Если команда su выполняется не администратором, потребуется ввести пароль указанного пользователя. Обратите внимание, что переменные окружения останутся прежними. Если вы хотите чтобы терминал при выполнении su создавал окружение специфичное для другого пользователя, необходимо указать опцию -l.

#заходим под другим пользователем и создаем файл
su -l test-user
Пароль: *****
whoami
test-user
touch ~/simple-file.txt
exit

#убеждаемся что он является владельцем файла
ls -l /home/test-user
-rw-rw-r-- 1 test-user test-user 0 дек 9 19:49 simple-file.txt
...

#выполняем команду более коротким способом
su -l -c "touch ~/simple-file.txt" test-user
Пароль: *****

Заметка
Также Linux позволяет запускать команды от имени другого пользователя без входа в специальный режим терминала. Для этого используйте опцию -c. Например, «su -l -c "touch ~/test-file" some-user».

Запуск от имени администратора

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

Для применения sudo просто подставьте его в начало любой команды. Потребуется ввести пароль текущего пользователя, а не администратора. Это может показаться необычным. Суть в том, что sudo привязано к конфигурационному файлу /etc/sudoers, содержащему правила выделения административных прав различным пользователям.

#выполняем операции, дозволенные только администратору
sudo useradd -p password another-user
Пароль: *****

#при повторном использовании пароль не требуется
sudo deluser another-user

Конфигурацию может редактировать только суперпользователь. Таким образом, мы заранее сообщаем системе о допустимости тех или иных действий, и требуем лишь подтверждения пароля обычного пользователя. С подробными правилами составления этого файла вы можете ознакомиться на страницах справки «man sudoers». Дадим краткий разбор конфигурации, представленной ниже.

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
%admin ALL=(ALL) ALL

Описание настроек:

  • Defaults env_reset — после смены пользователя возвращает переменные окружения к исходным значениям.
  • Defaults mail_badpass — при неудачном входе в систему администратору отправляется предупреждение.
  • Defaults secure_path — задает значение переменной окружения PATH для выполнения sudo.
  • %admin ALL=(ALL) ALL — наличие знака процента обозначает, что правило действует для группы с именем admin, иначе применилось бы к пользователю с аналогичным именем. Первый ALL обозначает любое имя хоста, в противном случае необходимо указать конкретное имя. Последний ALL сообщает о возможности выполнения любой команды. Вы можете ограничить набор команд, указав их имена через запятую.

Последние публикации