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

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Strik
Сообщения: 13

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

Сообщение Strik »

Имеется сервер где все процессы apache&php запускаются от nobody.

Я написал php скрипт, который получает параметры и передаёт запрос на bash скрипт.
Bash скрипт выполняет действия на фаерволле, но работать он будет только если пользователю nobody дать права на доступ к фаерволлу, а поскольку на сервере есть и другие пользователи это делать будет небезопасно...

Есть ли какой-то способ заставить работать bash скрипт от имени конкретного пользователя, так чтобы это было безопасно?

Спасибо.
Спасибо сказали:
Аватара пользователя
RazorJack
Сообщения: 113
ОС: Gentoo 2008

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

Сообщение RazorJack »

sudo ?
Спасибо сказали:
Strik
Сообщения: 13

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

Сообщение Strik »

хм, ну вот если скрипт запускается от nobody, мне нужно будет с помощью sudo указывать на другого пользователя и указывать пароль, я правильно понимаю?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

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

Сообщение diesel »

Strik писал(а):
22.03.2009 23:38
хм, ну вот если скрипт запускается от nobody, мне нужно будет с помощью sudo указывать на другого пользователя и указывать пароль, я правильно понимаю?

ну пароль указывать необязательно(google sudo NOPASSWD)
Спасибо сказали:
Sleeping Daemon
Сообщения: 1450

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

Сообщение Sleeping Daemon »

Strik писал(а):
22.03.2009 21:47
Имеется сервер где все процессы apache&php запускаются от nobody.

Я написал php скрипт, который получает параметры и передаёт запрос на bash скрипт.
Bash скрипт выполняет действия на фаерволле, но работать он будет только если пользователю nobody дать права на доступ к фаерволлу, а поскольку на сервере есть и другие пользователи это делать будет небезопасно...

Есть ли какой-то способ заставить работать bash скрипт от имени конкретного пользователя, так чтобы это было безопасно?

Спасибо.

man chmod
s - бит.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

Sleeping Daemon писал(а):
23.03.2009 12:16
man chmod
s - бит.
Во-первых, setuid на скриптах не работает. Во-вторых, так делать не надо.
Спасибо сказали:
Strik
Сообщения: 13

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

Сообщение Strik »

Да мне уже на OpenNET посоветовали NOPASSWD, но я так сделать не могу т.к. с таким же успехом могу дать права nobody на управление фаерволлом.
Единственный выход который я сейчас вижу - это sudo -u user с паролем. По крайней мере так будет безопаснее. Вопрос в том чем вводить пароль, там же нельзя его сразу в команде указывать. Смотрел в сторону expect но что-то ничего не получается.
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

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

Сообщение sarutobi »

а чем sudo -u с паролем отличается от NOPASSWD ? в первом случае пароль будет в скрипте, во втором - не будет запрашиваться вообще. Через можно разрешить исполнять только определенный скрипт. Что безопаснее - решайте сами.
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

Strik писал(а):
23.03.2009 14:08
посоветовали NOPASSWD, но я так сделать не могу т.к. с таким же успехом могу дать права nobody на управление фаерволлом.
Нет. Пользователю nobody можно дать право запускать этот и только этот скрипт от имени только одного определенного пользователя без пароля. Все права будут ограничены тем, что делает именно этот скрипт. А вот пароль, который может позволить делать все, что угодно (если опять же принудительно не ущемить в правах через /etc/sudoers), да еще в файле, который при малейшем неосторожном движении в настройке веб-сервера, может быть прочитан посторонними... Какая уж тут безопасность.
Спасибо сказали:
Strik
Сообщения: 13

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

Сообщение Strik »

Нет. Пользователю nobody можно дать право запускать этот и только этот скрипт от имени только одного определенного пользователя без пароля.


Можете показать на примере как это сделать?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

Код: Выделить всё

nobody  ALL=(fwadmin) NOPASSWD: /usr/local/bin/fwctl.sh
Пользователю nobody разрешается без пароля запускать от имени пользователя fwadmin скрипт /usr/local/bin/fwctl.sh (в sudoers обязательно указывать полный путь) с любыми параметрами.

Вообще, все это и остальное описано в man sudoers.
Спасибо сказали:
Strik
Сообщения: 13

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

Сообщение Strik »

К примеру делаю так:

Код: Выделить всё

nobody ALL=(unlock) NOPASSWD: /home/unlock/unlock.sh
unlock   ALL = NOPASSWD: /usr/sbin/csf


Скрипт:

Код: Выделить всё

#!/bin/sh
/usr/bin/sudo -u unlock /usr/sbin/csf -dr $1
echo
/usr/bin/sudo -u unlock /usr/sbin/csf -tr $1
exit


$1 в данном случае это IP который передаёт для разблокировки php скрипт.
Вижу вывод:

Код: Выделить всё

Password: Password:


В чём может быть проблема?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

Вы разрешили запуск скрипта /home/unlock/unlock.sh, а запускаете /usr/sbin/csf -- в этом и проблема.
Спасибо сказали:
Strik
Сообщения: 13

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

Сообщение Strik »

Поменял, пробую прямо из php скрипта выполнить:

Код: Выделить всё

sudo -u unlock /usr/sbin/csf


Получаю

Код: Выделить всё

Password:


:(
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

Strik писал(а):
23.03.2009 22:01
Поменял, пробую прямо из php скрипта выполнить
Блин, недосмотрел. Вы там намудрили сверх меры. Зачем sudo в sudo? Чем Вам в один шаг не устраивает?
sudoers:

Код: Выделить всё

nobody ALL=(root) NOPASSWD: /home/unlock/unlock.sh
В php-скрипте запускать sudo /home/unlock/unlock.sh bla-bla-bla.
Спасибо сказали:
Strik
Сообщения: 13

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

Сообщение Strik »

Сделал всё как Вы сказали. Но по-прежнему требует Password:
Попробовал дополнительно разрешить nobody /bin/sh использовать, тогда работает. Но работает у всех пользователей, т.е. такой же скрипт запускается с правами рута и у другого пользователя тоже (что и не удивительно).
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

Strik писал(а):
24.03.2009 01:01
по-прежнему требует Password:
Волшебства не бывает. Проверьте еще раз пути -- совпадают ли, нет ли ошибок, там ли на самом деле скрипт и т.п.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

UPD: Да, кстати, в /home/unlock/unlock.sh уже не надо использовать sudo, просто вызывать /usr/sbin/csf
Спасибо сказали:
Strik
Сообщения: 13

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

Сообщение Strik »

Всё заработало, проблема была в том что стояли права 644 на скрипт, я поставил 755. Единственное что меня смущает так это то что любой пользователь на сервере может запустить этот скрипт для выполнения, т.к. php работает от nobody. Но это уже не так страшно т.к. скрипт занимается только разблокировкой IP.

Спасибо всем за советы в особенности watashiwa_darede...
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

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

Сообщение sarutobi »

chmod 0700 /home/unlock/unlock.sh
chown nobody /home/unlock/unlock.sh
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

Strik писал(а):
24.03.2009 15:45
php работает от nobody
Он у вас setuid что-ли?
Спасибо сказали:
Strik
Сообщения: 13

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

Сообщение Strik »

sarutobi писал(а):
24.03.2009 16:08
chmod 0700 /home/unlock/unlock.sh
chown nobody /home/unlock/unlock.sh


Врядли, так можно будет из php скрипта произвести запись в этот файл. Я поставил root:root и дал права 500. В результате nobody может читать скрипт и выполнять его с правами рута через sudo.

watashiwa_darede... писал(а):
24.03.2009 17:17
Он у вас setuid что-ли?


Сервер под управлением CPanel/WHM.
Режим работы php - DSO (mod_php).

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