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

Содержание
  1. unixforum.org
  2. Re: Запуск bash скрипта от имени пользователя
  3. Re: Запуск bash скрипта от имени пользователя
  4. Re: Запуск bash скрипта от имени пользователя
  5. Re: Запуск bash скрипта от имени пользователя
  6. Re: Запуск bash скрипта от имени пользователя
  7. Re: Запуск bash скрипта от имени пользователя
  8. Re: Запуск bash скрипта от имени пользователя
  9. Re: Запуск bash скрипта от имени пользователя
  10. Re: Запуск bash скрипта от имени пользователя
  11. Re: Запуск bash скрипта от имени пользователя
  12. Запуск bash скрипта от имени другого пользователя
  13. 1 ответ 1
  14. Запустить команду от другого пользователя в Unix/Linux
  15. Запустить команду от другого пользователя в Unix/Linux
  16. Запустить команду от другого пользователя в Unix/Linux — способ 1
  17. Запустить команду от другого пользователя в Unix/Linux — способ 2
  18. Запустить команду от другого пользователя в Unix/Linux — способ 3
  19. 5 thoughts on “ Запустить команду от другого пользователя в Unix/Linux ”
  20. Как выполнить запуск скрипта от суперпользователя без пароля?
  21. 1. Создаем специальную группу для запуска, которой дадим необходимые права:
  22. 2. Добавляем пользователя userlogin в эту группу:
  23. 3. Редактируем файл /etc/sudoers с помощью visudo :
  24. 4. Проверяем
  25. 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 дать права на доступ к фаерволлу, а поскольку на сервере есть и другие пользователи это делать будет небезопасно.

Читайте также:  Восстановление системы astra linux через консоль

Есть ли какой-то способ заставить работать 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 обязательно указывать полный путь) с любыми параметрами.

Читайте также:  Desktop computer with linux

Вообще, все это и остальное описано в 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).
Читайте также:  Linux check lib version

Вот и все, тема «Запустить команду от другого пользователя в 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, но сам обычно использую более простой и универсальный способ:

  1. Запускаю sudo visudo
  2. Добавляю в конец username ALL=(ALL) NOPASSWD: ALL (укажите свой username)
  3. Сохраняю

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

UPD: Как метко подметил andreymal, этот способ создаёт дыру в безопасности системы и использовать его на постоянной основе не рекомендуется.

Источник

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