LINUX.ORG.RU

Веб и Root

 , ,


0

1

Уважаемые товарищи, прошу если вам не трудно разъяснить принцип работы одной ситуации.

Допусти существует некий веб-интерфейс написанный на всеми известном языке PHP. Так вот часто такие интерфейсы выполняют какие-то определенные действия (которые требуют root доступа).

Естественно запускать Nginx, php от root нельзя, но как тогда связать к примеру кнопочку на добавление в какой-то конфиг файл новой строчки, если изменить его может только root.

Не пинайте сильно, я не особо разбираюсь в Linux. Помогите понять правильную и безопасную логику как это все заставить работать!

Ну можно обертку сделать, а вообще давай примеры что там за файлы.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

К примеру Squid написал небольшой Web интерфейс, где просто тупо ввести логин и пароль, вводит данные жмёт ок, в файл /etc/squid3/allow/user_allow - добавится его ПК и он получит доступ и как нажмёт кнопку в веб-интерфейсе выйти, то он его удалит из файла и доступ пропадает. но root не дает такое действие делать.

Я думал можно написать свой bash скрипт и он будет выполнять все операции web-интерфейса, но он также должен запускаться от root.

Расскажите подробней, что вы имеете ввиду под оберткой!

RyanTedder ()
Ответ на: комментарий от RyanTedder

Webmin, ISP вот они как тоже взаимодействуют. Ну я надеюсь вы понимаете меня!

RyanTedder ()
Ответ на: комментарий от RyanTedder

Пусть данные из формы (после валидации, естественно) пишутся в какой-нибудь файл/БД, а по крону, из под рута, путь запускается скрипт, который эти данные читает и на их основе чего-нибудь там делает. Не надо пытаться публично доступные сервисы делать то, чего им не положено.

gwinn ★★★★ ()
Ответ на: комментарий от gwinn

Думал, но к примеру, есть операции которые требует моментального исполнения, я думаю cron не сможет так (

RyanTedder ()
Ответ на: комментарий от RyanTedder

Напиши демона, который будет палить изменения в файле/БД, и реагировать на них. Но это уже более гемморойно.

gwinn ★★★★ ()

Так вот часто такие интерфейсы выполняют какие-то определенные действия (которые требуют root доступа).

НЕТ О_О

Чтобы ты не делал, это все равно будет дырень. Хотя, если взломщик сможет выполнить произвольный код мало не покажется в любом случае. Зависит от требований к безопасности. Если это юзер конфигурирует свою же систему, то пусть хоть от рута запускается. Если же это публичная система и требования к безопасности высоки, то так попросту нельзя делать.

special-k ★★★ ()
Ответ на: комментарий от special-k

Все естественно приватно, доступно только в офисном здание будет!

RyanTedder ()

Запустить отдельный php-fpm от нужного пользователя (лучше от пользователя сквида) и обращаться к нему.

Или использовать RabbitMQ (или аналоги). Тут конкретно не могу посоветовать, но в теории он подходит, хотя возможно из пушки по воробьям.

Black_Roland ★★★★ ()
Последнее исправление: Black_Roland (всего исправлений: 1)
Ответ на: комментарий от RyanTedder

1) Не знаю, насколько это к свиду относится. Но в куче случаев можно сделать ссылку на другой файл:

include /etc/squid/refresh_patterns.conf

Даем php права на этот файл, и пусть себе редактирует на здоровье. Максимум вреда от взлома — внесут в этот файл произвольный конфиг. Фиг знает, насколько это опасно может быть.

2) Завести скрипт /home/bin/do_stuff.sh, где происходят все рутовые дела.

Этот скрипт выполнять при помощи sudo:

sudo /home/bin/do_stuff.sh.

А в sudoers такую штуку добавить (может, что напутано, пусть другие поправят):

phpuser ALL=(ALL) NOPASSWD: /home/bin/do_stuff.sh

Вуаля — рутовый доступ только на этот исполняемый файл. Скорее всего, проще и безопаснее не получится.

anonymous ()
Ответ на: комментарий от RyanTedder

ОК, понял. Например, можно использовать sudo и скрипт, который будет писать данные. То есть пользователь вводит логин - пароль, эти данные передаются твоему скрипту. Он проверяет корректность данные и, если все ОК, пишет эти данные в user_allow. Скрипт запускается через sudo, без пароля, но его никто кроме рута не может изменять. Таким образом будет, на мой взгляд, наиболее безопасно.

alozovskoy ★★★★★ ()
Ответ на: комментарий от Suntechnic

Ах... анонимус как всегда был быстрее и дал более развернутый ответ. Вообщемвсе верно - так и надо делать. Курим маны по sudoers - там очень много чего замутить можно без всяких дыр.

Suntechnic ★★★★★ ()
Ответ на: комментарий от RyanTedder

Обычно разные веб-панели таки пускаются от рута. Я по крайней мере видел одну такую, plesk по-моему.

goingUp ★★★★★ ()

И для каких же именно целей вэбне нужен рут?...

invy ★★★★★ ()

Тебе тут посоветовали запускать скрипт через sudo. Это, по моему, самый правильный из простых способов. Но есть нюанс: по умолчанию sudo хочет быть запущенным из консоли, надо в его конфиге (через visudo) закомментировать строку «Defaults requiretty».

legolegs ★★★★★ ()

Всем спасибо, завтра попробую предложенные варианты!

RyanTedder ()

1) можно же дать файлу/директории права на запись пользователю, от которого php скрипт выполняет веб-сервер.

2) как и писали здесь - sudores. у апача это www-data пользователь, у nginx - хз.

З.Ы. А вообще не дело это, когда php что-то от рута делает.

oskar0609 ()

Собственно поступил следующим образом, через sudores, разрешил выполнять свой bash скрипт, перед отправкой данных в bash скрипт отфильтровал данные, теперь лишнего туда не попадёт. По мне так самый простой и безопасный вариант.

Всем спасибо, кто предложил свои варианты.

RyanTedder ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.