Запуск bash скрипта от имени пользователя
Модераторы: /dev/random, Модераторы разделов
-
Strik
- Сообщения: 13
Запуск bash скрипта от имени пользователя
Имеется сервер где все процессы apache&php запускаются от nobody.
Я написал php скрипт, который получает параметры и передаёт запрос на bash скрипт.
Bash скрипт выполняет действия на фаерволле, но работать он будет только если пользователю nobody дать права на доступ к фаерволлу, а поскольку на сервере есть и другие пользователи это делать будет небезопасно...
Есть ли какой-то способ заставить работать bash скрипт от имени конкретного пользователя, так чтобы это было безопасно?
Спасибо.
Я написал php скрипт, который получает параметры и передаёт запрос на bash скрипт.
Bash скрипт выполняет действия на фаерволле, но работать он будет только если пользователю nobody дать права на доступ к фаерволлу, а поскольку на сервере есть и другие пользователи это делать будет небезопасно...
Есть ли какой-то способ заставить работать bash скрипт от имени конкретного пользователя, так чтобы это было безопасно?
Спасибо.
-
RazorJack
- Сообщения: 113
- ОС: Gentoo 2008
-
Strik
- Сообщения: 13
Re: Запуск bash скрипта от имени пользователя
хм, ну вот если скрипт запускается от nobody, мне нужно будет с помощью sudo указывать на другого пользователя и указывать пароль, я правильно понимаю?
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
-
Sleeping Daemon
- Сообщения: 1450
Re: Запуск bash скрипта от имени пользователя
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 скрипта от имени пользователя
Во-первых, setuid на скриптах не работает. Во-вторых, так делать не надо.
Мои розовые очки
-
Strik
- Сообщения: 13
Re: Запуск bash скрипта от имени пользователя
Да мне уже на OpenNET посоветовали NOPASSWD, но я так сделать не могу т.к. с таким же успехом могу дать права nobody на управление фаерволлом.
Единственный выход который я сейчас вижу - это sudo -u user с паролем. По крайней мере так будет безопаснее. Вопрос в том чем вводить пароль, там же нельзя его сразу в команде указывать. Смотрел в сторону expect но что-то ничего не получается.
Единственный выход который я сейчас вижу - это sudo -u user с паролем. По крайней мере так будет безопаснее. Вопрос в том чем вводить пароль, там же нельзя его сразу в команде указывать. Смотрел в сторону expect но что-то ничего не получается.
-
sarutobi
- Сообщения: 676
- Статус: Добрость и скромнота
- ОС: Debian 5, FreeBSD 6.2/8.0
Re: Запуск bash скрипта от имени пользователя
а чем 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 скрипта от имени пользователя
Нет. Пользователю nobody можно дать право запускать этот и только этот скрипт от имени только одного определенного пользователя без пароля. Все права будут ограничены тем, что делает именно этот скрипт. А вот пароль, который может позволить делать все, что угодно (если опять же принудительно не ущемить в правах через /etc/sudoers), да еще в файле, который при малейшем неосторожном движении в настройке веб-сервера, может быть прочитан посторонними... Какая уж тут безопасность.
Мои розовые очки
-
Strik
- Сообщения: 13
Re: Запуск bash скрипта от имени пользователя
Нет. Пользователю nobody можно дать право запускать этот и только этот скрипт от имени только одного определенного пользователя без пароля.
Можете показать на примере как это сделать?
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Запуск bash скрипта от имени пользователя
Код: Выделить всё
nobody ALL=(fwadmin) NOPASSWD: /usr/local/bin/fwctl.shВообще, все это и остальное описано в man sudoers.
Мои розовые очки
Спасибо сказали:
-
Strik
- Сообщения: 13
Re: Запуск bash скрипта от имени пользователя
К примеру делаю так:
Скрипт:
$1 в данном случае это IP который передаёт для разблокировки php скрипт.
Вижу вывод:
В чём может быть проблема?
Код: Выделить всё
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 скрипта от имени пользователя
Вы разрешили запуск скрипта /home/unlock/unlock.sh, а запускаете /usr/sbin/csf -- в этом и проблема.
Мои розовые очки
-
Strik
- Сообщения: 13
Re: Запуск bash скрипта от имени пользователя
Поменял, пробую прямо из php скрипта выполнить:
Получаю

Код: Выделить всё
sudo -u unlock /usr/sbin/csfПолучаю
Код: Выделить всё
Password:-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Запуск bash скрипта от имени пользователя
Блин, недосмотрел. Вы там намудрили сверх меры. Зачем sudo в sudo? Чем Вам в один шаг не устраивает?
sudoers:
Код: Выделить всё
nobody ALL=(root) NOPASSWD: /home/unlock/unlock.shМои розовые очки
Спасибо сказали:
-
Strik
- Сообщения: 13
Re: Запуск bash скрипта от имени пользователя
Сделал всё как Вы сказали. Но по-прежнему требует Password:
Попробовал дополнительно разрешить nobody /bin/sh использовать, тогда работает. Но работает у всех пользователей, т.е. такой же скрипт запускается с правами рута и у другого пользователя тоже (что и не удивительно).
Попробовал дополнительно разрешить nobody /bin/sh использовать, тогда работает. Но работает у всех пользователей, т.е. такой же скрипт запускается с правами рута и у другого пользователя тоже (что и не удивительно).
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Запуск bash скрипта от имени пользователя
Волшебства не бывает. Проверьте еще раз пути -- совпадают ли, нет ли ошибок, там ли на самом деле скрипт и т.п.
Мои розовые очки
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Запуск bash скрипта от имени пользователя
UPD: Да, кстати, в /home/unlock/unlock.sh уже не надо использовать sudo, просто вызывать /usr/sbin/csf
Мои розовые очки
-
Strik
- Сообщения: 13
Re: Запуск bash скрипта от имени пользователя
Всё заработало, проблема была в том что стояли права 644 на скрипт, я поставил 755. Единственное что меня смущает так это то что любой пользователь на сервере может запустить этот скрипт для выполнения, т.к. php работает от nobody. Но это уже не так страшно т.к. скрипт занимается только разблокировкой IP.
Спасибо всем за советы в особенности watashiwa_darede...
Спасибо всем за советы в особенности watashiwa_darede...
-
sarutobi
- Сообщения: 676
- Статус: Добрость и скромнота
- ОС: Debian 5, FreeBSD 6.2/8.0
Re: Запуск bash скрипта от имени пользователя
chmod 0700 /home/unlock/unlock.sh
chown nobody /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
-
Strik
- Сообщения: 13
Re: Запуск bash скрипта от имени пользователя
Врядли, так можно будет из php скрипта произвести запись в этот файл. Я поставил root:root и дал права 500. В результате nobody может читать скрипт и выполнять его с правами рута через sudo.
Сервер под управлением CPanel/WHM.
Режим работы php - DSO (mod_php).
Можно включить suphp тогда все процессы будут запускаться от конкретных пользователей а не от общего, у меня так на других серверах, но это несколько замедляет работу, оправданно только когда пользователей на сервере много (в плане безопасности и удобства).