Навигация |
ИнструментыЯмаПолезные ссылкиЗачем мне блог?Рейтинг контентаКодекс админаФотогалереяi-pay![]() |
Последние записи |
Смонтировал видюху, моменты из жизни 2013-15На уазике до ск. Верблюд по Торгашинскому хребтуBreaks волна #9 осенний funkК нам на дачу пришел медведьСтарая бомба! Крутой рифмоплет |
Каменты [еще] |
Теги |
Друзья |
Выполнение комманды с root правами из php
Мая
2013 года
28
2013 года
Теги: freebsd, Раздел: zgbox.ru ![]() ![]() ![]() |
Просмотров: 3056 |
Предыстория.
Понадобилось мне однажды выполнить некую комманду (запустить shell скрипт) из php но с root правами под FreeBSD. В частности нужно было добавить/удалить некоторые правила фаервола IPFW который естественно не дается без root прав.
Правила фаервола менял этот shell скрипт который и нужно было запустить от root'a. Скрипт сам соединялся с базой, смотрел кому можно дать доступ и добавлял правила в IPFW.
А идея была в том, что пользователь авторизуется на сайте, и пройдя авторизацию получает доступ к определенным портам, т.е. IPFW должен дать доступ к некоторым портам сервера при успешной WEB авторизации.
Собстно как выполнить комманду system("") из php с правами root под FreeBSD
Допустим то что нам нужно выполнить - это простой shell скрипт,
который например будет лежать в директории /usr/local/scripts/dance
Из php можно выполнять комманды с помощью оператора system("..ваша комманда..");
Козалось бы, напиши system("/usr/local/scripts/dance"); и все. Но не тут то было, скрипт будет работать от имени пользователя www:wheel под которым обычно работает apache. А нам то нужен root доступ. Не давать же его apache. Но ведь root то нужен.
В этом вопросе нам поможет некий порт по имени sudo что лежит в
/usr/ports/security/sudo
Итак ставим:
#cd /usr/ports/security/sudo
#make install clean
Добавлять в rc.conf ничего ненужно т.к это не даемон. По этому перейдем сразу к настройке конфига sudoers.
Итак, у меня php работает от прав apache, т.е. под учеткой www:wheel по этому в конфиг мы внесем следующую строку, хоть в самое начало.
www ALL=NOPASSWD: /usr/local/scripts/dance
Теперь изменим нашу комманду на выполнение из php. Комманда запуска нашего скрипта теперь будет иметь такой вид: system("/usr/local/bin/sudo /usr/local/sctipts/dance");
Что собстно будет запускать наш конечный скрипт с правами от root, что и требовалось.
Комментарии к записи:
Вадим | 2014-01-11 18:36:02 [ответить] |
я слышал, что можно в pf добавлять правила без рута |