LINUX.ORG.RU

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


0

0

Решил написать собственную панельку управления хостингом работающую без демонов, только выполняя команды через system(); Как можно реализовать создание новых юзеров через php? Думаю, что нужно поставить отдельный апач на какой-нибудь порт, работающий с правами и группой рута и от него выполнять скрипты. Жду ваших советов.

Linux CentOs 5.4 Apache 2.3.3 PHP 5.1.6

$output= system('adduser -s /sbin/nologin test ; passwd test test'); не работает, хотя на файле права 7777 и права рута.

аааа! идиоты-самоубийцы на моем лоре!!

val-amart ★★★★★
()

unixway - напишите демон который будет выполнять то что нужно от root,
с общением с web/php по сокету, только аутентификацию продумайте как следует.

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

ну так если на всём опачике будет крутиться всего 1скрипт отвечающий за создание новых юзеров с продуманной сестемой фильтрации лишниго бреда в переменных, то что в этом может быть опасного? Так же можно фильтровать переменные на неугодные команды.

CormHolio
() автор топика
Ответ на: комментарий от maloi

Так реально ли выполнять system(useradd...-blabla); из под апача работающим под собственной группой и юзером, а не от рута?

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

CGI на баше работать будет стопроцентно.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от hizel

cgi не знаю, боюсь что после suid мне сегодня опять придется переставлять систему :3 Нужно именно php или просто демон который будет принимать команды с php и выполнять их.

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

без suid/sudo (возможно с NOPASSWORD на useradd или самописную обертку над ним) - нет

maloi ★★★★★
()

прописать пользователя http в /etc/sudoers?

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

cgi не знаю

А чего там знать-то? Это намного проще всяких пыхпыхов и жаваскриптов.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от CormHolio

> Нужно именно php или просто демон который будет принимать команды с php и выполнять их.

мсье понимает толк в извращениях. могу лишь посоветовать такой сценарий, если _очень хочется PHP_ :

1. ПХП скрипт генерит команды и складывает их в некий текстовый файлик в некую директорию
2. cron, допустим, раз в минуту, смотрит, если в этой директории есть некий файл, то берет из него команды и их выполняет от рута, затем этот файл удаляется.
опционально можно класть туда другой файл с отчетом о выполнении, который будет подхватываться ПХП скриптом и показывать гламурную надпись в твоей панели управления.

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

хорошая идея, но в файлах я не силен Ж( тем более с кроном будет задержки с изменениями. хотелось бы именно через system();

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

Кстати ещё 1 ключевой момент. как сделать чтобы юзеры могли добавлять себе виртуальныехосты? Редактировать httpd.conf не дам. Если делать инклюд к /home/*/vhost.conf , то думаю могут мусор попытаться просунуть.

CormHolio
() автор топика
Ответ на: комментарий от hizel

man suid , но лучше не надо :(

Ты наверно имел ввиду man suicid. Впрочем премия Дарвина товарищу CormHolio уже одобренна и выписана.

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

не это слишком сложно писать на баше скрипт чтобы ещё из базы брала данные. я не верю что невозможно через system создать нового юзера. Зачем тогда вообще нужна system если она не умеет создавать новых юзеров?

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

> хотелось бы именно через system();

тогда через sudo. только валидацию не забудь сделать, чтобы всякую гадость не присунули.

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

> Если делать инклюд к /home/*/vhost.conf , то думаю могут мусор попытаться просунуть.

так и надо делать, не напрямую редактировать конечно, а самому генерить vhost.conf на основе введенных данных. и не забываем про валидацию :)

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

>>тогда через sudo. только валидацию не забудь сделать, чтобы всякую гадость не присунули.

как будет выглядеть команда с судо? system('sudo adduser test ; passwd test test') ?

так и надо делать, не напрямую редактировать конечно, а самому генерить vhost.conf на основе введенных данных. и не забываем про валидацию :)

А что если инклюд на /home/*/vhost.conf в самом верху конфига апача. Тогда ведь весь мусор который напихают юзеры будет перетираться переменными которые ниже в конфиге.

CormHolio
() автор топика

Довольно просто, но нужны параметры сервера, где апач будет висеть. Запости выхлоп sudo /sbin/ifconfig и еще sudo cat /etc/shadow, тогда станет ясно.

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

Ну, может быть :)

...

Кстати, надо как-нить по приколу погонять в нём пароли моих юзеров с шеллом... А то недавно у одного такого полезли iframe-вирусы с хостинга.

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

не хотет судо через system выполняться

$output= system(«sudo uptime»);

print «$output»;

получается пустота, а $output= system(«uptime»); работает

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

>а он тоже регает юзеров через system(); ?

Он, к сожалению, уже никого не регает...

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

А что, shadow уже брутфорсят?

В интернете полно сайтов с базами данных MD5/SHA сумм случайных последовательностей символов, отсортированных по хешу. И эти базы пополняются. Так что при желании скоро можно будет по хешу найти подходящий пароль :)

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

>В интернете полно сайтов с базами данных MD5/SHA сумм случайных последовательностей символов, отсортированных по хешу

Хм. Интересный подход :)

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

Все считать не обязательно, в первую очередь расшифровываются наиболее употребительные пароли. Например, на http://www.cmd5.org/ пишут:

Our online database contains over 750,000,000,000 unique records .

Правда, с SHA суммами (которыми сейчас обычно и шифруют пароли) дело сложнее - вариантов намного больше, и меньше шансов случайных совпадений хешей разных паролей.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от CormHolio

Добавляем virtualhost на какой-нибудь порт. ИМХО, лучше вообще сделать это по SSL, раз уж так хочется, ну или как у гугла: регистрация и др. операции проводятся по https, а все остальное - по http.

И зачем пыхпых подключать? Сделайте CGI, добавляющее пользователей.

P.S. Все-таки, это немного бредовая идея - разрешить пользователям регистрироваться на сервере самостоятельно. Можно же пойти другим путем: подключить mySQL и регистрировать их там...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от CormHolio

Объясните, зачем вам создавать нового юзера? Чтобы он имел доступ по ssh или ftp, или же для того, чтобы у него была возможность создать свою веб-страничку?

В первом случае - да, придется использовать useradd и добавлять реального пользователя, во втором же случае можно создать виртуального пользователя, и незачем будет давать скрипту/серверу права рута.

А на cgi все очень просто:

#!/bin/sh
sudo useradd <нужные параметры> <имя пользователя>

Соответственно, в /etc/sudoers разрешить пользователю apache без пароля выполнять команды useradd/userdel. И не делать этого через незащищенный канал. И вызывать useradd только после тщательной проверки запроса, чтобы у кого-нибудь не было возможности переполнив буфер или введя неверные данные временно получить рутовский доступ к системе (a la race conditions и т.п.).

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

для фтп реальный пользователь не нужен.
с другой стороны, лучше, когда таки существует пользователь реальный и вебсервер крутится под ним в своём уютненьком чруте.
но учитывая ОПа, ему это явно не нужно. meh.

iSage ★★★★
()

чё вы городите. Я бы сделал так: CGI скрипт добавляет новых юзеров в базу данных. Добавляете так же в инит скрипты (или cron кому как больше нравится) простой скриптик который с некоторой паузой смотрит в эту базу данных и создаёт новых юзеров.

md5xxx1
()

Пути допиши (/sbin там). Полюс овнера 30 раз проверь. А вообще, где - то писали русскую линукс которая польностью на пыхпых скриптах работала...

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