- unixforum.org
- Как запустить скрипт от имени другого пользователя?
- Как запустить скрипт от имени другого пользователя?
- Re: Как запустить скрипт от имени другого пользователя?
- Re: Как запустить скрипт от имени другого пользователя?
- Re: Как запустить скрипт от имени другого пользователя?
- Re: Как запустить скрипт от имени другого пользователя?
- Re: Как запустить скрипт от имени другого пользователя?
- Re: Как запустить скрипт от имени другого пользователя?
- Re: Как запустить скрипт от имени другого пользователя?
- Запуск скрипта от другого пользователя
- Запустить команду от другого пользователя в Unix/Linux
- Запустить команду от другого пользователя в Unix/Linux
- Запустить команду от другого пользователя в Unix/Linux — способ 1
- Запустить команду от другого пользователя в Unix/Linux — способ 2
- Запустить команду от другого пользователя в Unix/Linux — способ 3
- 5 thoughts on “ Запустить команду от другого пользователя в Unix/Linux ”
- Запуск bash скрипта от имени другого пользователя
- 1 ответ 1
unixforum.org
Как запустить скрипт от имени другого пользователя?
Как запустить скрипт от имени другого пользователя?
Сообщение niv88 » 13.12.2009 12:26
Есть скрипт.
/usr/lib/ScriptName/ScriptName.sh
Надо его запустить от имени пользователя ScriptUser, причём без запроса пароля.
Как такое можно сделать?
(а то с /etc/sudoers/ — запутался)
Re: Как запустить скрипт от имени другого пользователя?
Сообщение Frank » 13.12.2009 14:31
drBatty Сообщения: 8735 Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит. ОС: Slackware-current Контактная информация:
Re: Как запустить скрипт от имени другого пользователя?
Сообщение drBatty » 14.12.2009 17:25
blackdevil Бывший модератор Сообщения: 2751 Статус: Добровольный помощник ОС: Ubuntu (lts)
Re: Как запустить скрипт от имени другого пользователя?
Сообщение blackdevil » 15.12.2009 10:39
Re: Как запустить скрипт от имени другого пользователя?
Сообщение Black » 15.12.2009 11:20
ScriptUser localhost=NOPASSWD:/usr/lib/ScriptName/ScriptName.sh
Frank
sudo su — это из серии «cat file | less». Работать-то оно работает, но неудобно, неэстетично и непрактично %).
diesel Бывший модератор Сообщения: 5989 ОС: OS X, openSuSE, ROSA, Debian Контактная информация:
Re: Как запустить скрипт от имени другого пользователя?
Сообщение diesel » 15.12.2009 12:24
Frank
sudo su — это из серии «cat file | less». Работать-то оно работает, но неудобно, неэстетично и непрактично %).
cat file | less бывает очень даже практично, например: cat /very/long/path | less -> ^W^W|awk » | less -> ^W^W|tr . . .
Re: Как запустить скрипт от имени другого пользователя?
Сообщение Frank » 16.12.2009 08:02
Frank
sudo su — это из серии «cat file | less». Работать-то оно работает, но неудобно, неэстетично и непрактично %).
Предложи другой универсальный вариант запуска, даже когда пароль пользователя не задан («*» в /etc/shadow).
Re: Как запустить скрипт от имени другого пользователя?
Сообщение Black » 16.12.2009 14:52
Другой вариант?
sudo -u ScriptUser ScriptName.sh
А универсального не существует, т.к. далеко не везде разрешено запускать всё подряд через sudo. Тем более дистрибутив топикстартер не указал, это может оказаться и не убунта.
Кстати, в предыдущем посте немного ошибся, подумал SomeUser должен запускать скрипт от рута. Должно быть так:
someuser localhost=(ScriptUser) /usr/lib/ScriptName/ScriptName.sh
Запуск скрипта от другого пользователя
Есть в системе два пользователя: 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 у нее может что особое? =)
Запустить команду от другого пользователя в 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
Запуск 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');