Написано достаточно статей, как поднять и настроить LAMP.
Во многих из них есть пара абзацев, в которых кратко описывается установка и базовая настройка ProFTPd.
Как правило, для организации нормальной работы хостинга этого не хватает.
Возникает вопрос — «как настроить ftp-доступ конкретного пользователя к определенному виртуальному хосту?».
Виртуальные ftp-пользователи
Для хостинга нецелесообразно заводить пользователей в системе. Гораздо логичнее завести виртуальных ftp-пользователей.
В первую очередь нужно определиться, где будем хранить их учетные записи.
У ProFTPd есть несколько вариантов, но я рассмотрю лишь два:
- Альтернативный файл пользователей и паролей;
- СУБД MySQL.
Сразу оговорюсь, что у меня установлена система Ubuntu 10.04.
Apache работает от имени www-data, у которого UserId=33, GroupId=33.
Логи ftp-сервера по умолчанию можно посмотреть тут: /var/log/proftpd/
В руководстве я создам пользователя tester, для работы с виртуальным хостом test.ru.
Общая настройка ProFTPd
Открываем конфиг 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 deniedchmod 775 /var/www/test.ru
Теперь виртуальные пользователи могут создавать, редактировать и удалять файлы и папки.
В файле /etc/init.d/proftpd есть баг, при команде restart сервис не рестартует, и как следствие при ротации лого он благопалучно зависает. Что бы он нормально заработал нужно заменить строчку
start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE"
на
start-stop-daemon --stop --signal $SIGNAL --retry 1 --quiet --pidfile "$PIDFILE"
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.
Если вам помогла статья, вы можете >>отблагодарить автора<<