Виртуальные ftp-пользователи
Для хостинга нецелесообразно заводить пользователей в системе. Гораздо логичнее завести виртуальных ftp-пользователей. В первую очередь нужно определиться, где будем хранить их учетные записи. У ProFTPd есть несколько вариантов, рассмотрим два:
Установлена система Ubuntu 10.04. Apache работает от имени www-data, у которого UserId=33, GroupId=33. Логи ftp-сервера по умолчанию можно посмотреть тут: /var/log/proftpd/ В руководстве я создам пользователя tester, для работы с виртуальным хостом test.ru.
Открываем конфиг ProFTPd, по-умолчанию он располагается /etc/proftpd/proftpd.conf. Из соображений безопасности добавляем в него следующие строки:
DefaultRoot ~ ServerIdent on "FTP Server ready."
Так рекомендовано сделать в официальном руководстве пользователя. Остальное по умолчанию можно оставить, так как есть.
Хранение виртуальных пользователей в текстовом файле
Нам нужно, чтобы ftp пользователь имел возможность редактировать и удалять файлы, созданные скриптами. Создаем нового виртуального ftp-пользователя с логином tester, идентификатором 33, группой 33 и домашним каталогом /var/www/test.ru.
ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=tester --uid=33 --gid=33 --home=/var/www/test.ru --shell=/bin/false
После выполнения команды система попросит ввести дважды пароль пользователя. В итоге, у нас появится файл /etc/proftpd/ftp.passwd с записью о пользователе. Кстати, изменить пароль пользователя можно следующей командой:
ftpasswd –passwd –name=tester –change-password
Теперь редактируем /etc/proftpd/proftpd.conf, для подключения виртуального пользователя:
RequireValidShell off AuthUserFile /etc/proftpd/ftpd.passwd
Перезапускаем ftp: /etc/init.d/proftpd restart
Хранение виртуальных пользователей в СУБД MySQL
Для хранения виртуальных пользователей в СУБД MySQL необходим пакет proftpd-mod-mysql. Через PHPMyAdmin или любым другим удобным способом создаем новую базу, к примеру proftpd. Так же создаем нового пользователя proftpd_user с паролем proftpd_password с правами на чтение этой базы. В базе создаем одну таблицу:
CREATE TABLE `proftpd`.`users` ( `username` VARCHAR( 32 ) NOT NULL , `password` VARCHAR( 32 ) NOT NULL , `uid` INT NOT NULL , `gid` INT NOT NULL , `homedir` VARCHAR( 255 ) NOT NULL , `shell` VARCHAR( 255 ) NOT NULL , UNIQUE (`username`) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
И добавляем запись о пользователе:
INSERT INTO `proftpd`.`users` (`username`, `password`, `gid`, `homedir`, `shell`) VALUES ( 'tester', 'pass', '33', '33', '/var/www/test.ru', '/bin/false' );
На этом настройка MySQL окончена. Теперь, что касается конфигурации FTP-сервера. Редактируем файл /etc/proftpd/modules.conf – уберем комментарий со строк
LoadModule mod_sql.c LoadModule mod_sql_mysql.c
Редактируем файл /etc/proftpd/proftpd.conf. Дописываем строку
Include /etc/proftpd/sql.conf
А так же уберем комментарий или допишем строку:
AuthOrder mod_sql.c
Файл /etc/proftpd/sql.conf приводим к следующему виду:
<IfModule mod_sql.c> # Cообщаем, что намерены работать с СУБД MySQL SQLBackend mysql SQLEngine on # Пароли в базе храняться в открытом формате SQLAuthTypes Plaintext # Подключаемся к БД proftpd пользователем proftpd_user с паролем proftpd_password SQLConnectInfo proftpd@localhost proftpd_user proftpd_password # Выбираем данные из таблицы users SQLUserInfo users username password uid gid homedir shell # Аутентифицируем пользователей из этой таблицы SQLAuthenticate users* # По умолчанию минимальный UserID пользователя и GroupID =999 SQLMinUserUID 33 SQLMinUserGID 33 # На время отладки пишем логи SQLLogFile /var/log/proftpd/sql.log
Перезапускаем ftp: /etc/init.d/proftpd restart
Настройка доступа ftp-пользователей к директориям
Изменяем владельца директории /var/www/test.ru
сhown www-data:www-data /var/www/test.ru
Выставляем права доступа к директории, иначе увидим permission denied
chmod 775 /var/www/test.ru
Теперь виртуальные пользователи могут создавать, редактировать и удалять файлы и папки.
Полное описание директив ProFTPd можно найти тут: http://www.proftpd.org/docs/directives/configuration_full.html А так же есть хорошая документация на русском: http://www.bog.pp.ru/work/ProFTPD.html