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

Команда sudo в Linux

Если вы новый пользователь Linux, то, наверное, уже заметили, что здесь почти для всех серьёзных настроек или операций с системой нужны права суперпользователя. Пользователям Windows такой подход тоже должен быть знаком, когда вы устанавливаете программы или меняете системные настройки, операционная система просит подтвердить выполнение программы от имени администратора.

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

Синтаксис sudo

Синтаксис команды очень прост:

$ sudo опции программа параметры

Так вы можете выполнить абсолютно любую команду Linux. Достаточно написать перед ней команду sudo. По умолчанию sudo запускает переданную ей команду от имени суперпользователя. Если вы хотите добавить какие-либо настройки или использовать другого пользователя, нужно указывать опции.

Опции sudo

  • -A или —askpass — по умолчанию sudo спрашивает пароль пользователя в терминале. Если задана эта опция, утилита попробует использовать графическую утилиту для запроса пароля.
  • -b или —background — запускает переданную программу в фоновом режиме;
  • -C или —close-from — опции нужно передать число больше трёх. Она позволяет закрыть для программы все файловые дескрипторы, кроме стандартного ввода и вывода;
  • -E или —preserve-env — позволяет передать переменные окружения текущего пользователя выполняемой программе. Также можно передать этой опции список переменных, которые нужно разрешить;
  • -e или —edit — позволяет редактировать файл вместо запуска команды. Файл копируется во временный каталог, редактируется с помощью редактора, установленного в системе по умолчанию, и если были изменения, записывается обратно с теми самыми правами;
  • -g — запустить команду с указанной группой вместо группы пользователя, от имени которого запускается программа;
  • -h — выполнить команду от имени другого хоста;
  • -H или —set-home — установить домашний каталог;
  • -i или —login — позволяет авторизоваться в консоли от имени другого пользователя. Будет выбран его домашний каталог, а также загружены все переменные окружения;
  • -k — по умолчанию, sudo сохраняет пароль и некоторое время после выполнения команды, вы можете выполнить ещё раз, без ввода пароля. Эта опция отключает такую возможность;
  • -l или —list — позволяет вывести список доступных команд для удалённых пользователей;
  • -n или —non-interactive — не интерактивный режим, если будет необходимо ввести пароль, программа выдаст ошибку;
  • -p или —prompt — использовать своё приглашение для ввода пароля;
  • -r или —role — выполнить программу с контекстом SELinux, у которого есть указанная роль;
  • -S — использовать стандартный поток ошибок для запроса пароля;
  • -s или —shell — позволяет запустить указанный командный интерпретатор;
  • -U или —User — вместе с опцией -l позволяет посмотреть привилегии для пользователя;
  • -T или —timeout — позволяет установить время выполнения команды, если время истечёт раньше, чем завершится команда, то она будет завершена принудительно;
  • -u — позволяет указать, от имени какого пользователя нужно выполнять программу;
  • -V — выводит версию утилиты;
  • — означает, что следующие опции обрабатывать не нужно.
Читайте также:  Linux how to check filesystem

Это основные опции, которые вы можете использовать. А теперь давайте перейдём к примерам использования команды.

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

1. Запуск программы

Самый частый пример использования sudo — выполнение программы от имени суперпользователя. Для этого достаточно написать sudo перед именем программы:

Если вы хотите выполнить программу не от имени root, а от имени другого пользователя, то можно использовать опцию -u, например:

2. Переменные окружения

По умолчанию, команда sudo не передаёт запускаемой утилите переменные окружения текущего пользователя. А когда вы запускаете графическое приложение, то ему нужна переменная DISPLAY для доступа к графическому серверу. В последних версиях Ubuntu всё немного по другому, но все же эта возможность sudo актуальна. Чтобы передать переменные просто используйте опцию -E:

Без опции -E программа получает только 18 стандартных переменных, а с опцией — все доступные.

Также вы можете указать список переменных, которые нужно передать:

3. Авторизация от имени другого пользователя

С помощью sudo вы также можете авторизоваться от имени другого пользователя. Для этого используйте опцию -i:

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

4. Командный интерпретатор

Если у вас в системе установлено несколько командных интерпретаторов, например, не только bash, но и zsh, то вы можете авторизоваться от имени другого пользователя и указать, какую именно оболочку вы хотите использовать. Для этого укажите опция -s:

5. Редактирование файлов

Когда вам необходимо отредактировать системный файл, вы пишите sudo vim или sudo nano. Вместо этого можно использовать опцию -e или команду sudoedit. Она открывает файл для редактирования, редактором, установленным в системе по умолчанию. Например, у меня это vim. Чтобы отредактировать /etc/group с правами суперпользователя достаточно выполнить:

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

6. Запуск в фоне

Чтобы запустить программу в фоне с помощью sudo можно использовать опцию -b. Например, запускаем OpenVPN в фоновом режиме:

sudo -b openvpn -с /путь/к/конфигурационному.файлу

Читайте также:  Опера линукс сбой загрузки страницы

7. Просмотр полномочий

Вам необязательно редактировать конфигурационный файл, чтобы понять, какие настройки для sudo разрешены, а какие нет. Для этого можно выполнить команду с опцией -l. Утилита выведет список разрешённых команд или ALL в случае, если разрешено всё:

Выводы

Теперь вы знаете, что из себя представляет команда sudo Linux. Здесь мы рассмотрели только общие примеры её использования. Если вы хотите прочитать более подробно про её настройку, смотрите статью настройка sudo в Linux.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

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

Есть в системе два пользователя: user1, user2. Есть script.sh. Задача: работая под user1 запустить скрипт от имени user2.

Да, знаю про su -c. Но оно просит пароль. А основная проблема это то, что есть еще main_script.sh откуда и будет вызываться script.sh (можно даже не отдельным скриптом, а внутри того же main_script.sh) и все это должно происходить автоматически, т.е. без дополнительного вмешательства и ввода пароля user2. Скажите, такое вообще возможно? И как это реализовать? что-то вертится в голове про setuid и про возможность использования групп(??). Но ничего толком собрать не могу.

man sudo, если я не ошибаюсь.

Запуск команды от имени пользователя: ‘sudo -u ‘
Чтобы не просил пароль надо будет прописать правило в /etc/sudoers
Так что man sudoers’ вам в помощь =)

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

Итак, ничего не работает. Все равно просит пароль.

# /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # See the man page for details on how to write a sudoers file. # Defaults env_reset # Host alias specification Host_Alias LOCALHOST = lenovo # User alias specification User_Alias FULLTIMERS = zoot # Cmnd alias specification Cmnd_Alias SCRIPT = /home/zoot/devel/trash/script.sh # User privilege specification root ALL=(ALL) ALL # Allow members of group sudo to execute any command # (Note that later entries override this, so you might need to move # it further down) %sudo ALL=(ALL) ALL # #includedir /etc/sudoers.d # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Test options FULLTIMERS LOCALHOST = NOPASSWD: SCRIPT 
zoot@lenovo:~$ cat /home/zoot/devel/trash/script.sh #!/bin/bash echo "running script" sleep 10s echo "done" 

Скрипт, ясное дело, просто для теста.

sudo -u carol /home/zoot/devel/trash/script.sh

А пароль таки просится. Если ввести, то все ок. ps -a -f | grep -i carol выдает таки, что процесс запущен под пользователем carol.

Да, уточню, система Ubuntu 10.10 Ибо с правами и sudo у нее может что особое? =)

Источник

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

Имеется следующая ситуация. Есть пользователь user, у которого нет прав суперпользователя. Есть апач, который является классическим www-data. Конечно есть root-суперпользователь. Задача: www-data должен иметь право запускать скрипт /var/www/example/script3.sh (user:user, 700) без пароля. После некоторых поисков вышел на решение с использованием sudoers, которое отлично сработало на 2 других скриптах, которые апач запускает как root. Но это решение не работает в случае с обычным пользователем. Содержание sudoers:

# Работает отлично: www-data ALL=(root) NOPASSWD:/var/www/example/script1.sh www-data ALL=(root) NOPASSWD:/var/www/example/script2.sh # Не работает www-data ALL=(user) NOPASSWD:/var/www/example/script3.sh 

1 ответ 1

exec('/var/www/example/script3.sh'); 

sudo — не автомагический системный демон, который запускает произвольный скрипт, прописанный в /etc/sudoers от имени указанного пользователя, а простая утилита. Таким образом, необходимо явно указывать, что необходимо выполнять через sudo и от имени какого пользователя это делать:

exec('sudo -u user /var/www/example/script3.sh'); 

Как вариант, по необходимости можно также сделать отдельный proxy-скрипт,
/var/www/example/scrip3-proxy.sh:

#!/bin/sh sudo -u user /var/www/example/script3.sh 
exec('/var/www/example/script3-proxy.sh'); 

Источник

Читайте также:  Синхронизация папок ftp linux

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

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

Иногда, просто необходимо запустить команду от другого пользователя. И существует несколько способов, как это можно сделать. Я расскажу о них в своей статья «Запустить команду от другого пользователя в Unix/Linux».

Запустить команду от другого пользователя в Unix/Linux — способ 1

И так, можно использовать утилиту SUDO. Рассмотрим пример:

$ sudo -H -u Your_another_user -c 'ping linux-notes.org'
  • -H YOUR_HOME: Задает HOME (Переменное окружение для хома конкретного юзера) и по умолчанию — это root.
  • -u YOUR_USER: Задаем пользователя от которого будет выполнена команда.
  • -c YOUR_COMMAND: Служит опцией для ввода команды.

Запустить команду от другого пользователя в Unix/Linux — способ 2

Можно использовать утилиту SU. И сейчас приведу несколько примеров.

Логин в root юзера

Чтобы получить рута, выполните:

Запустить команду как root юзер

# su - root -c "YOUR_COMMAND_HERE"
su - -c "YOUR_COMMAND_HERE arg1"

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

# su -c "/opt/solr/bin/solr create -c test_solr_core -n solrconfig.xml" -s /bin/sh solr Created new core 'test_solr_core'
$ su another_user -c 'ping linux-notes.org'
$ su - YOUR_USER -c "YOUR_COMMAND_HERE"
  • — — Будет имитировать логин указанного пользователя.
  • -c — Служит для указания команды для выполнения (для указанного юзверя).

Запустить команду от другого пользователя в Unix/Linux — способ 3

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

# runuser -l YOUR_USER -c 'YOUR_COMMAND_HERE'

Как пример, я покажу следующую строку:

# runuser -l nginx -c 'service nginx start'

PS: Для использования команды runuser пароль не требуется, и он должен запускаться только пользователем root.

  • -l: Создаст оболочку для входа в систему, используя файл runuser-l PAM вместо стандартного.
  • -g: Указывает на основную группу.
  • -G: Указывает на дополнительную группу.
  • -c: Собственно, служит для указания команды.
  • –session-command=COMMAND: Передает одну команду в оболочку с опцией «-c» и не создает новый сеанс.
  • -m: Не сбрасывайте переменные среды (ENV).

Вот и все, тема «Запустить команду от другого пользователя в Unix/Linux» завершена.

5 thoughts on “ Запустить команду от другого пользователя в Unix/Linux ”

> $ sudo -H -u Your_another_user bash -c ‘ping linux-notes.org’ Смешались sudo и bash: $ sudo -u user echo a
a $ bash -c ‘echo a’
a

Источник

Оцените статью
Adblock
detector