Перейти к содержимому

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

  • автор:

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

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

У процессов есть владельцы

Когда программа или сценарий выполняются, Linux создает процесс. У этого процесса есть владелец. Владелец — либо другой процесс, либо имя учетной записи пользователя, если ее запустил человек.

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

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

Каждый раз, когда мы используем sudo , мы запускаем команду от имени другого пользователя. Учетная запись пользователя по умолчанию, используемая sudo , — это пользователь root или «супер». Из-за этого sudo часто ошибочно принимают за sudo user do. Но это просто жаргон. На самом деле это означает заменить пользователя.

С помощью sudo вы можете запускать команды как любой другой пользователь, а не только как root. По иронии судьбы, для этого вам нужны привилегии root. Но запуск программы или скрипта, принадлежащего другому пользователю, — это не то же самое, что запуск этого процесса от имени этого пользователя. Вы по-прежнему будете запускать его как root.

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

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

Мы используем компьютер, на котором настроено несколько пользователей. Один из них — Мэри с именем пользователя maryq, а другой — Дэйв с именем пользователя dave.

У Мэри есть сценарий под названием «other-user.sh» в ее домашнем каталоге. Это текст сценария.

#!/bin/bash echo "Script name:" $0 echo "Working directory:" $(pwd) echo "Script running as user:" $(whoami)

Он выводит имя скрипта, которое хранится в переменной окружения $0 . Затем он использует pwd для печати рабочего каталога. Наконец, он использует команду whoami для вывода имени пользователя, запустившего скрипт. Или кто, по его думанию, запустил скрипт.

Скопируйте текст из сценария в редактор и сохраните его как «other-user.sh» в домашнем каталоге другой учетной записи пользователя.

Нам нужно сделать скрипт исполняемым. Мы будем использовать команду chmod и использовать параметр +x (выполнить) и параметр -u (пользователь), чтобы установить флаг выполнения. только для владельца. Это означает, что только Мэри может запустить сценарий. Мы проверим права доступа к файлу с помощью ls .

chmod u+x other-user.sh

Слева направо права доступа гласят:

  • Владелец может читать, записывать и выполнять файл.
  • Члены группы могут читать и записывать файл.
  • Другие могут только читать файл.

Таким образом, единственными пользователями, способными запустить сценарий, являются Мэри и root. Вот что происходит, когда Мэри запускает сценарий:

./other-user.sh

Нам сообщают, что текущим рабочим каталогом сценария является домашний каталог Мэри, а владельцем сценария является учетная запись пользователя maryq.

Как и ожидалось, Дейв не может запустить скрипт.

/home/maryq/other-user.sh

Если у Дейва есть привилегии пользователя root, он может попытаться запустить скрипт от имени root, используя sudo .

sudo /home/maryq/other-user.sh

Это частичный успех. Скрипт запускается, но владельцем скрипта является root, а не maryq.

Уловка, которую нам нужно использовать, — это опция sudo -u (user). Это позволяет вам указать пользователя, от имени которого вы хотите запустить команду. Если вы не используете параметр -u , sudo по умолчанию использует root. Если мы хотим запустить команду от имени Мэри, нам нужно передать имя их учетной записи пользователя в команду sudo .

sudo -u maryq /home/maryq/other-user.sh

На этот раз скрипт сообщает, что владельцем процесса является maryq.

Добавим строку в скрипт «other-user.sh». Мы выводим некоторый текст и перенаправляем вывод в файл с именем «mary.txt».

#!/bin/bash echo "Script name:" $0 echo "Working directory:" $(pwd) echo "Script running as user:" $(whoami) echo "This is going into a file in /home/maryq/" > /home/maryq/mary.txt

Мы создаем новый файл в домашнем каталоге Мэри. Это совершенно нормально, потому что мы запускаем сценарий от имени Мэри.

./other-user.sh

Если мы проверим домашний каталог Мэри, мы увидим, что файл был создан, и право собственности на файл принадлежит учетной записи пользователя maryq.

ls -hl mary.txt

Это то же самое поведение, которое мы увидели бы, если бы Мэри сама запустила сценарий.

Команда runuser

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

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

Дейв не может перечислить файл «mary.txt», потому что он находится в домашнем каталоге Мэри, и у него нет к нему доступа.

cat /home/maryq/mary.txt

Однако мы можем заглянуть внутрь файла с помощью runuser . Параметр — (логин) запускает новую оболочку со средой, очень близкой к среде оболочки, которая была бы у Мэри, если бы они действительно вошли в систему. Параметр -c (команда) следует команда, которую мы хотим запустить.

sudo runuser - maryq -c 'cat mary.txt'

Обратите внимание, что команде не нужен полный путь к файлу. Мы можем ссылаться на файл так же, как Мэри, относительно ее домашнего каталога.

Как пользователь Dave, мы создадим скрипт под названием «run-maryq.sh» с этим текстом:

#!/bin/bash runuser -l maryq -c 'cat mary.txt'

Сделаем его исполняемым:

chmod +x run-maryq.sh

Давайте посмотрим, что произойдет, когда мы попытаемся запустить его.

./run-maryq.sh

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

sudo ./run-maryq.sh

Это работает так, как нам хотелось бы, и точно так же, как если бы Мэри сама запустила сценарий.

Какой из них использовать?

В командной строке между ними не так много выбора. Но так как вы все равно должны использовать sudo с runuser , вы также можете использовать sudo сам по себе.

Но в сценарии runuser является предпочтительной командой.

Все права защищены. © Linux-Console.net • 2019-2024

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

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

Судо — суперпользователь

Еще один способ переключать пользователей или выполнять команды от имени других — использовать команду sudo. Синтаксис sudo:

Судо позволяет запускать программы с правами безопасности другого пользователя. Как и su , если имя пользователя не указано, предполагается, что вы пытались запускать команды от имени суперпользователя. Вот почему sudo называется суперпользователем.

Он обычно используется для установки, запуска и остановки приложений, требующих привилегий root. Одним из преимуществ использования sudo по сравнению с командой su является то, что вам не нужно знать пароль другого пользователя. Это может устранить некоторые проблемы, возникающие при использовании общих паролей в общих учетных записях. Когда вы выполняете команду sudo, вам будет предложено ввести пароль. Если конфигурация sudo разрешает доступ, эта команда выполняется.

Конфигурация sudo обычно контролируется системным администратором, и для ее изменения требуется root-доступ. Конечно, в вашей личной системе у вас есть доступ к учетной записи root, и вы также фактически являетесь системным администратором.

Использование sudo

Чтобы просмотреть команды, доступные для запуска с помощью sudo, используйте sudo -l . Чтобы запустить команду от имени пользователя root, используйте sudo command . Вы можете указать пользователя с помощью -u , например, sudo -u root command совпадает с sudo command . Однако, если вы хотите запустить команду от имени другого пользователя, вам нужно указать это с помощью -u . Так, например, sudo -u nikki команда .

Команды Значение
sudo -l Список доступных команд.
sudo command Выполнить command от имени пользователя root.
sudo -u root command Выполнить команду от имени пользователя root .
sudo -u user command Выполнить command от имени пользователя.

Вы можете использовать sudo su, чтобы переключиться на учетную запись суперпользователя. Вы можете использовать sudo su — чтобы переключиться на учетную запись суперпользователя в среде root. sudo su — username переключится на учетную запись этого пользователя со средой, которую вы ожидаете увидеть при входе в систему под этим пользователем.

Команды Значение
sudo su Переключиться на учетную запись суперпользователя.
sudo su — Переключиться на учетную запись суперпользователя в среде root.
sudo su — имя пользователя Переключиться на учетную запись пользователя со средой имени пользователя.

Еще один способ переключиться на другую учетную запись с помощью sudo — использовать параметр -s. Если вы запустите sudo -s, это запустит оболочку от имени пользователя root. Вы можете указать пользователя с параметром -u.

Команды Значение
sudo -s Запустить оболочку от имени пользователя root
sudo -u root -s То же, что и выше.
sudo -u user -s Запустить оболочку от имени пользователя.

Примеры

Вы можете запустить следующее, чтобы увидеть, какую команду можно запустить с помощью sudo :

В этом случае пользователь robin может выполнять любую команду.

Пример 2. Запустите команду с помощью sudo

Выполнить команду с помощью sudo

Пример 3. Запуск команды от имени другого пользователя

Чтобы выполнить команду от имени другого пользователя:

Пример 4. Переход на учетную запись root

Чтобы изменить учетную запись root:

Изменение конфигурации sudo

Если вам нужно изменить конфигурацию sudo, используйте команду visudo. Он эффективно запускает редактор vi и редактирует файл /etc/sudoers. Команда visudo должна выполняться с утвержденными привилегиями. Это означает, что вам нужно переключиться на учетную запись root, например: su root visudo или запустить sudo visudo под своей учетной записью.

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

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

Команда su

Еще один способ переключения пользователя — использование команды su. Подробная информация о su содержится в команде su.

Рахул, 21 декабря 2020 г., 3 минуты чтения

Linux — лучшая и наиболее часто используемая операционная система с открытым исходным кодом. Пользователи Linux имеют большое количество вариантов выбора операционной системы. У вас есть возможность выбрать рабочий стол для ваших систем Linux. Но все же профессионалы Linux любят работать с командной строкой.В основном серверные версии Linux поставляются только с командной строкой, что делает их легче и быстрее.

Пользователи Linux используют оболочку для взаимодействия с операционными системами. В которой Bash (Born Shell) является наиболее используемой оболочкой и доступна по умолчанию в большинстве систем. В настоящее время Zsh (Z Shell) также набирает популярность среди пользователей благодаря своим функциям.

В этом руководстве вы узнаете, как запускать команду от имени другого пользователя в системах Linux/Unix.

Запуск команды от имени другого пользователя с помощью Su

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

Основная команда su выглядит следующим образом:

Вышеупомянутая команда, которую вы отправляете другому пользователю, где вы можете запускать команды с этим пользователем. Но наша цель — запустить команду Linux от имени другого пользователя, не переключаясь на него. Для этого проверьте приведенный ниже пример.

В настоящее время я вошел в систему как пользователь root. Вы можете передать свою команду с параметром -c. Теперь в приведенном ниже примере будет выполняться команда «ls» от имени пользователя rahul без переключения на пользователя.

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

В приведенной выше команде сначала печатается текущий рабочий каталог с pwd, затем создается и переключается на новый каталог с именем «hello». Снова печатает текущий рабочий каталог. Все команды разделяются точкой с запятой (;), как и обычно.

Выполнить команду от имени другого пользователя с помощью Sudo

Обычно это используется для запуска команды от имени пользователя root, но вы также можете использовать его с другими пользователями. Здесь вам не нужно использовать какие-либо переключатели командной строки. Введите имя пользователя, для которого вы хотите выполнить команду. После этого укажите команду для запуска от имени определенного пользователя.

Например, вы пишете сценарий оболочки, который требуется запустить от имени пользователя без полномочий root. Но вам нужно перезапустить службу apache2. В этом случае вы можете использовать sudo для запуска команды от имени пользователя root. Нравится:

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

Вы также можете использовать runuser для запуска команд от имени другого пользователя в системах Linux. Это менее известные команды пользователям Linux. Используйте команду runuser для выполнения команд с эффективным идентификатором пользователя и идентификатором группы определенного пользователя.

Пример. Например, запустите команду от имени пользователя «rahul» и создайте каталог в его домашнем каталоге.

Затем список файлов в домашнем каталоге пользователя «rahul».

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

Заключение

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

Иногда вам может потребоваться запустить сценарий оболочки от имени другого пользователя, отличного от активного пользователя оболочки. Это довольно легко и может быть сделано в несколько простых шагов Итак, как вы это делаете? Давайте узнаем.

Предпосылки

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

Не менее важно убедиться, что у вас есть сценарий оболочки с разрешениями на выполнение. У нас есть простой сценарий оболочки welcome.sh, который запрашивает имя пользователя и выводит его на терминал. Вот краткий обзор.

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

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

Но как запустить скрипт от имени другого пользователя, кроме себя? Для этого просто используйте показанный синтаксис, где otheruser — это другой пользователь, для которого вы хотите запустить скрипт.

Предположим, мы хотим запустить скрипт от имени пользователя linuxways. Выполняемая команда будет следующей:

Чтобы подтвердить, что другой пользователь выполнил сценарий, мы запустим команду, как показано.

В данном случае другим нашим пользователем является linuxways, поэтому мы вызовем команду.

Переменные $USER и $UID выводят имя пользователя и UID пользователя, запускающего скрипт. Если вы сомневаетесь или хотите это проверить, вы можете просмотреть файл /etc/passwd и выполнить поиск сведений о пользователе следующим образом.

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

Заключение

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

Об авторе

Карим Буздар

Карим Буздар имеет степень инженера в области телекоммуникаций и несколько сертификатов системного администратора. Как ИТ-инженер и технический автор, он пишет для различных веб-сайтов. Он ведет блог на LinuxWays.

В Linux команда su (переключение пользователя) используется для запуска команды от имени другого пользователя.

В этом руководстве вы узнаете, как использовать команду su, с практическими примерами.

Учебник по использованию команды su в Linux Ubuntu или Centos

  • Система под управлением Linux
  • Доступ к окну/командной строке терминала (Ctrl-Alt-T, Ctrl-Alt-F2)

Как работает команда su

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

Некоторые версии Linux, например Ubuntu, по умолчанию отключают учетную запись пользователя root, что делает систему более безопасной. Но это также ограничивает пользователя от выполнения определенных команд.

Временное использование su в качестве пользователя root позволяет обойти это ограничение и выполнять разные задачи с разными пользователями.

Примечание. Учетная запись root — это учетная запись главного администратора с полным доступом и разрешениями в системе. Из-за серьезности изменений, которые может внести эта учетная запись, и из-за риска ее компрометации в большинстве версий Linux для обычного использования используются ограниченные учетные записи пользователей.

Синтаксис команды su

Чтобы использовать команду su, введите ее в командную строку следующим образом:

Если указано имя пользователя, su по умолчанию является суперпользователем (root). Просто найдите нужного пользователя и добавьте его в синтаксис команды su.

Параметры команды su

Чтобы отобразить список команд, введите следующее:

Отобразить список команды su в Linux». ширина=

Вот некоторые общие параметры, которые можно использовать с командой su:

  • Имя пользователя. Замените имя пользователя на фактическое имя пользователя, под которым вы хотите войти. Это может быть любой пользователь, а не только root.
  • –c или –command [команда] — запускает определенную команду от имени указанного пользователя.
  • – или –l или –login [имя пользователя] – запускает сценарий входа для изменения имени пользователя. Вам потребуется ввести пароль для этого пользователя.
  • –s или –shell [оболочка] — позволяет указать другую оболочку для запуска.
  • –h или –help — показать файл справки для команды su.
  • –p или ––preserve–environment – ​​сохранить среду оболочки (HOME, SHELL, USER, LOGNAME).

Примеры команд su

Переключиться на другого пользователя

Чтобы переключить вошедшего в систему пользователя в этом окне терминала, введите следующее:

Вас попросят ввести пароль. Введите его, и логин изменится на этого пользователя.

Пример как переключиться на другого пользователя в Linux с помощью команды -su

Если вы не укажете имя пользователя, по умолчанию будет использоваться учетная запись root. Теперь вошедший в систему пользователь может выполнять все системные команды. Это также изменит домашний каталог и путь к исполняемым файлам.

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

Примечание. Если у вас возникли проблемы с аутентификацией, вы можете изменить пароль root или sudo, выполнив несколько простых действий.

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

Чтобы выполнить определенную команду от имени другого пользователя, используйте параметр –c:

Система ответит запросом на ввод пароля пользователя.

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

 Запустите команду в окне терминала от имени другого пользователя». ширина=

Использовать другую оболочку

Чтобы использовать другую оболочку или операционную среду, введите следующее:

Эта команда открывает учетную запись пользователя root в оболочке Z.

Использовать другого пользователя в той же среде

Вы можете сохранить среду текущей учетной записи пользователя с помощью параметра –p:

Замените [other_user] фактическим именем пользователя, на которое вы хотите переключиться.

Учетная запись пользователя изменится, но вы сохраните тот же домашний каталог. Это полезно, если вам нужно запустить команду от имени другого пользователя, но вам нужен доступ к данным текущего пользователя.

Чтобы убедиться, что вы остались в той же домашней среде, используйте команду echo $HOME, которая отобразит каталог, в котором вы работаете.

Сравнение команд: su и sudo

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

Чтобы предоставить доступ к sudo, пользователь должен быть добавлен в группу sudo.

Примечание. По умолчанию в некоторых версиях Linux (например, Ubuntu) учетная запись root отключена. Это означает, что пользователю root не назначен пароль. Однако вы можете переключиться на root, выполнив следующую команду и введя пароль текущего пользователя, вошедшего в систему:

Команда su позволяет переключить текущего пользователя на любого другого пользователя. Если вам нужно запустить команду от имени другого пользователя (не root), используйте параметр –l [имя пользователя], чтобы указать учетную запись пользователя. Кроме того, su также можно использовать для переключения на другой интерпретатор оболочки на лету.

su — более старая, но более полнофункциональная команда. Он может дублировать функциональность sudo, используя параметр –c для передачи одной команды в оболочку.

Теперь вы знаете, как использовать команду su для временной смены пользователей и выполнения команд в Linux. Для начала используйте предоставленные примеры.

Читайте также:

  • Как узнать mac-адрес удаленного компьютера через командную строку
  • Windows не удалось применить параметры сценариев
  • Как изменить учетную запись пользователя в Windows 7
  • Настройка ftp-сервера Debian
  • Что такое метафайл Windows

Вики IT-KB

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

Вариант #1 (на примере Ubuntu Linux):

Пробуем запуск исполняемого файла «/usr/bin/ntlm_auth» с параметрами от имени пользователя «proxy»

sudo su -s "/bin/sh" -c "/usr/bin/ntlm_auth --debuglevel=9 --diagnostics --helper-protocol=squid-2.5-ntlmssp" proxy

Обсуждение

unix-linux/linux-cli-tools/linux-how-to-run-process-from-another-user.txt · Последнее изменение: 06.03.2016 14:35 — Алексей Максимов

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

В системе несколько пользователей. Захожу на сервер через ssh от имени root. Вопрос: как запустить скрипт:

~# php /пусть_до_файла/1.php 

от имени пользователя user, залогинившись под пользователем root?
Отслеживать
68.3k 228 228 золотых знаков 80 80 серебряных знаков 223 223 бронзовых знака
задан 15 окт 2018 в 5:58
user305545 user305545
623 8 8 серебряных знаков 22 22 бронзовых знака

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

выполнить программу (с опциями/параметрами или без них) от имени указанного пользователя можно:

    с помощью программы su (присутствует в системе обязательно):

$ su -l -c 'программа [опции|параметры]' пользователь 
$ sudo -u пользователь программа [опции|параметры] 

здесь программа [опции|параметры] — это (для приведённого в вопросе примера) php /пусть_до_файла/1.php

если программа su или sudo выполняется от имени пользователя с идентификатором 0 (обычно он имеет имя root ), то пароль не запрашивается. о разнице между этими программами: В чём разница между su и sudo?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *