- unixforum.org
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Re: Запуск bash скрипта от имени пользователя
- Запуск bash скрипта от имени другого пользователя
- 1 ответ 1
- Запустить команду от другого пользователя в Unix/Linux
- Запустить команду от другого пользователя в Unix/Linux
- Запустить команду от другого пользователя в Unix/Linux — способ 1
- Запустить команду от другого пользователя в Unix/Linux — способ 2
- Запустить команду от другого пользователя в Unix/Linux — способ 3
- 5 thoughts on “ Запустить команду от другого пользователя в Unix/Linux ”
- Как выполнить запуск скрипта от суперпользователя без пароля?
- 1. Создаем специальную группу для запуска, которой дадим необходимые права:
- 2. Добавляем пользователя userlogin в эту группу:
- 3. Редактируем файл /etc/sudoers с помощью visudo :
- 4. Проверяем
- PS
- Запуск скрипта от другого пользователя
unixforum.org
Имеется сервер где все процессы apache&php запускаются от nobody.
Я написал php скрипт, который получает параметры и передаёт запрос на bash скрипт.
Bash скрипт выполняет действия на фаерволле, но работать он будет только если пользователю nobody дать права на доступ к фаерволлу, а поскольку на сервере есть и другие пользователи это делать будет небезопасно.
Есть ли какой-то способ заставить работать bash скрипт от имени конкретного пользователя, так чтобы это было безопасно?
Re: Запуск bash скрипта от имени пользователя
Сообщение RazorJack » 22.03.2009 23:09
Re: Запуск bash скрипта от имени пользователя
Сообщение Strik » 22.03.2009 23:38
хм, ну вот если скрипт запускается от nobody, мне нужно будет с помощью sudo указывать на другого пользователя и указывать пароль, я правильно понимаю?
diesel Бывший модератор Сообщения: 5989 ОС: OS X, openSuSE, ROSA, Debian Контактная информация:
Re: Запуск bash скрипта от имени пользователя
Сообщение diesel » 23.03.2009 11:48
хм, ну вот если скрипт запускается от nobody, мне нужно будет с помощью sudo указывать на другого пользователя и указывать пароль, я правильно понимаю?
Re: Запуск bash скрипта от имени пользователя
Имеется сервер где все процессы apache&php запускаются от nobody.
Я написал php скрипт, который получает параметры и передаёт запрос на bash скрипт.
Bash скрипт выполняет действия на фаерволле, но работать он будет только если пользователю nobody дать права на доступ к фаерволлу, а поскольку на сервере есть и другие пользователи это делать будет небезопасно.
Есть ли какой-то способ заставить работать bash скрипт от имени конкретного пользователя, так чтобы это было безопасно?
watashiwa_daredeska Бывший модератор Сообщения: 4038 Статус: Искусственный интеллект (pre-alpha) ОС: Debian GNU/Linux
Re: Запуск bash скрипта от имени пользователя
Re: Запуск bash скрипта от имени пользователя
Сообщение Strik » 23.03.2009 14:08
Да мне уже на OpenNET посоветовали NOPASSWD, но я так сделать не могу т.к. с таким же успехом могу дать права nobody на управление фаерволлом.
Единственный выход который я сейчас вижу — это sudo -u user с паролем. По крайней мере так будет безопаснее. Вопрос в том чем вводить пароль, там же нельзя его сразу в команде указывать. Смотрел в сторону expect но что-то ничего не получается.
sarutobi Сообщения: 676 Статус: Добрость и скромнота ОС: Debian 5, FreeBSD 6.2/8.0 Контактная информация:
Re: Запуск bash скрипта от имени пользователя
Сообщение sarutobi » 23.03.2009 14:17
а чем sudo -u с паролем отличается от NOPASSWD ? в первом случае пароль будет в скрипте, во втором — не будет запрашиваться вообще. Через можно разрешить исполнять только определенный скрипт. Что безопаснее — решайте сами.
watashiwa_daredeska Бывший модератор Сообщения: 4038 Статус: Искусственный интеллект (pre-alpha) ОС: Debian GNU/Linux
Re: Запуск bash скрипта от имени пользователя
посоветовали NOPASSWD, но я так сделать не могу т.к. с таким же успехом могу дать права nobody на управление фаерволлом.
Нет. Пользователю nobody можно дать право запускать этот и только этот скрипт от имени только одного определенного пользователя без пароля. Все права будут ограничены тем, что делает именно этот скрипт. А вот пароль, который может позволить делать все, что угодно (если опять же принудительно не ущемить в правах через /etc/sudoers), да еще в файле, который при малейшем неосторожном движении в настройке веб-сервера, может быть прочитан посторонними. Какая уж тут безопасность.
Re: Запуск bash скрипта от имени пользователя
Сообщение Strik » 23.03.2009 17:32
Нет. Пользователю nobody можно дать право запускать этот и только этот скрипт от имени только одного определенного пользователя без пароля.
Можете показать на примере как это сделать?
watashiwa_daredeska Бывший модератор Сообщения: 4038 Статус: Искусственный интеллект (pre-alpha) ОС: Debian GNU/Linux
Re: Запуск bash скрипта от имени пользователя
nobody ALL=(fwadmin) NOPASSWD: /usr/local/bin/fwctl.sh
Пользователю nobody разрешается без пароля запускать от имени пользователя fwadmin скрипт /usr/local/bin/fwctl.sh (в sudoers обязательно указывать полный путь) с любыми параметрами.
Вообще, все это и остальное описано в man sudoers.
Запуск 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');
Запустить команду от другого пользователя в 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
Как выполнить запуск скрипта от суперпользователя без пароля?
Все можно настроить через файл /etc/sudoers . Вот способ как можно перезапускать все службы ( sudo service . ) от пользователя userlogin .
1. Создаем специальную группу для запуска, которой дадим необходимые права:
sudo groupadd sudo-restrict
2. Добавляем пользователя userlogin в эту группу:
sudo usermod -aG sudo-restrict userlogin
3. Редактируем файл /etc/sudoers с помощью visudo :
Необходимо ставить в конце следующее:
%sudo-restrict ALL=(ALL) NOPASSWD: /usr/sbin/service
/usr/sbin/service — путь к программе необходимо указывать абсолютный. В вашем случае это будет путь к вашему скрипту. Я использую служебную команду service
4. Проверяем
Заходим под пользователем userlogin и выполняем
sudo service mysqld restart
Сервис перезапустится без ввода пароля.
PS
В конце /etc/sudoers можно раскомментировать эту строку: #includedir /etc/sudoers.d , и записывать все настройки в отдельные файлы в каталоге /etc/sudoers.d
Я согласен с ответом Total Pusher, но сам обычно использую более простой и универсальный способ:
- Запускаю sudo visudo
- Добавляю в конец username ALL=(ALL) NOPASSWD: ALL (укажите свой username)
- Сохраняю
Разница в том, что никаких особых групп и пользователей я не создаю и в результате можно запускать любые скрипты и команды без пароля (мне достаточно того, что юзер вводит пароль при запуске сессии).
UPD: Как метко подметил andreymal, этот способ создаёт дыру в безопасности системы и использовать его на постоянной основе не рекомендуется.
Запуск скрипта от другого пользователя
Есть в системе два пользователя: 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 у нее может что особое? =)