Организация квотированного доступа по ftp?

Здравствуйте!

Задача: автоматически давать пользователям квотированный (ограниченый объем хранения данных) ftp доступ к неким личным файлам.

Как это выглядит для пользователя:

1) пользователь регистрируется на сайтике;

2) заказывает на нем себе товар (игровой сервер);

3) получает квотированный ftp доступ к конфигурации своего сервера;

4) настраивает конфиги сервера (либо удаляет или загружает новые файлы);

5) запускает сервер и радуется.

Используемые на данный момент инструменты:

1) Debian (proftpd + quota + quotatool)

2) Apache

3) PHP

Решение:

Начал с того, чтобы осуществить процедуру создания нового ftp-пользователя хотя бы руками из консоли от рута и вот что из этого вышло:
useradd -b /home/ -m server
passwd server
#далее копируем дефолтную сборку игрового сервера в /home/ созданного юзера
#квотируем место под файлы сервера
quotatool -u server -bl '500 Mb' /home


После этого пользователь имеет доступ по ftp к файлам своего игрового сервера.

Проблема:

Если всё это дело делать через exec() в PHP, то естесно нихрена не работает, т.к. у www-data, от имени которого работает Apache, нет прав ни на useradd, ни на cp в домашнюю директорию созданного юзера. Давать такие права www-data чо-то как-то стрёмновато, но proftpd и quota без лишнего гемороя работают с учеткой юзера и это очень удобно, поэтому от этих инструментов отказываться не хочется.

Вопросы: как решить поставленную задачу, если идти по пути, изложенном выше в решении? Или же какой возможен альтернативный вариант решения задачи (подходы к решению)?
  • Вопрос задан
  • 3754 просмотра
Решения вопроса 1
kamazee
@kamazee
Если отвечать на заданный вопрос, то можно согласиться с ответом egorinsk.
Разве что в моём случае SUID-бит был заменён на sudo (причины примерно описаны здесь) и сервер может слушать не только TCP, но и файл-сокет.
С sudo решение было таким: есть непривелигированный пользователь (www-data, например), которому выданы права на запуск с sudo одного скрипта, который может этим пользователем только читаться и исполняться. Там большой case .. esac с возможными параметрами. Хотя, вообще говоря, православность таких решений под большим вопросом.

По поводу альтернативного пути.
1. FTP действительно нужен? Мне почему-то кажется, что минимально поправить конфиг или скачать архив с конфигами можно и из веб-морды.
2. Для чего используются локальные пользователи, которые создаются в примере выше? Если только для ftp-доступа, то лучше использовать виртуальных. Зачем создавать системного пользователя только для FTP, если клиентов может быть много? Но подозреваю, что, возможно, от этих же пользователей будут запускаться сами экземпляры игрового сервера.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@egorinsk
suid shell script с тщательной проверкой входящих параметров и ключом. Или запущенный от root сервер, принимающий по TCP запросы на создание пользователей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы