rss
Навигация
ИнструментыЯмаПолезные ссылкиЗачем мне блог?Рейтинг контентаКодекс админаФотогалереяi-payrss
Последние записи
Смонтировал видюху, моменты из жизни 2013-15На уазике до ск. Верблюд по Торгашинскому хребтуBreaks волна #9 осенний funkК нам на дачу пришел медведьСтарая бомба! Крутой рифмоплет
Каменты [еще]
2017-05-17 11:25:31 [articles] Владимир:
2016-12-20 17:49:41 [articles] Виталик:
2016-12-01 23:34:25 [news] Meteor:
2016-11-11 03:35:47 [articles] Tata10:
2016-07-27 14:28:19 [articles] Сергей:
2016-05-17 09:56:26 [articles] юра:
2016-04-29 18:03:48 [articles] agatsky.dn:
Теги
Друзья
Блог малова Лучшие стихи зая =) Мед в Красноярске Daniil V. Savenkoff Blog | То, что мне когда-то пригодилось... Велкам в друзья!

Выполнение комманды с root правами из php

Мая
2013 года
28
Теги: freebsd,
Раздел: zgbox.ru -> Статьи -> FreeBSD -> Выполнение комманды с root правами из php
Просмотров: 3187

Предыстория.


Понадобилось мне однажды выполнить некую комманду (запустить 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
После установки, порт создаст свой конфиг /usr/local/etc/sudoers
Добавлять в rc.conf ничего ненужно т.к это не даемон. По этому перейдем сразу к настройке конфига sudoers.

Итак, у меня php работает от прав apache, т.е. под учеткой www:wheel по этому в конфиг мы внесем следующую строку, хоть в самое начало.

www ALL=NOPASSWD: /usr/local/scripts/dance

В переводе на человеческий, данная строка означает: Если юзер, под учеткой www пытается через программу sudo выполнить скрипт /usr/local/scripts/dance то выполнять его не спрашивая пароля.

Теперь изменим нашу комманду на выполнение из php. Комманда запуска нашего скрипта теперь будет иметь такой вид: system("/usr/local/bin/sudo /usr/local/sctipts/dance");

Что собстно будет запускать наш конечный скрипт с правами от root, что и требовалось.
Комментарии к записи:
Вадим 2014-01-11 18:36:02 [ответить]
я слышал, что можно в pf добавлять правила без рута

Добавление комментария

Ваше имя: (Антиспам) Какой сейчас год?
Ваш комментариий: