Использование Pure-FTPd
Pure-FTPd — свободный FTP-сервер для операционных систем семейства UNIX, распространяется по лицензии BSD. Основное внимание уделяется безопасности и простоте настройки.
Функциональные возможности:
- Встроенная поддержка UTF-8.
- Поставляется с программой мониторинга pure-ftpwho, которая в реальном времени показывает кто скачивает/загружает файлы и с какой скоростью.
- Возможен запуск pure-ftpwho как CGI приложения с возможностью генерации выходных данных в виде HTML или Введение в XML.
- Сообщения сервера на данный момент переведены на 21 язык.
- Создание виртуальных пользователей.
- Задание индивидуальных квот, не связанных с системными, для пользователей (максимальное количество файлов, максимальный размер каталога, максимальная скорость скачивания/закачивания).
- После загрузки файла на сервер возможен автоматический запуск внешних скриптов или программ (например, для проверки на вирусы, расчет MD5 хэшей файлов, отправка уведомлений о загрузке).
- Запрет доступа к dot-файлам (имя которых начинается с точки, например, .ssh directories, .bash_history files, .rhosts).
- Создание псевдонимов (алиасы) для директорий (т.е. работать как shortcuts).
Инсталляция Pure-FTPd в Debian, Ubuntu
Рассмотрим кратко установку и настройку Pure-FTPd сервера.
- Инсталляция. После её окончания Pure-FTPd запущен и готов к работе.
$ sudo aptitude install pure-ftpd ... Starting ftp server: Running: /usr/sbin/pure-ftpd -l pam -8 UTF-8 -E -u 1000 -O clf:/var/log/pure-ftpd/transfer.log -B $ ftp localhost Connected to localhost. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 50 allowed. 220-Local time is now 11:24. Server port: 21. 220-This is a private system - No anonymous login 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. Name (localhost:admin):
- Конфигурационные файлы и директории:
/etc/default/pure-ftpd-common /etc/pure-ftpd
- Включим chroot-jail. Можно или запустить PureFTPd с ключом -A или задать параметр.
echo yes > /etc/pure-ftpd/conf/ChrootEveryone
- Поскольку мы будем настраивать авторизацию через PureDB, надо запретить PAM:
echo no > /etc/pure-ftpd/conf/PAMAuthentication
Virtual Users PureDB
Механизм Virtual Users в Pure-FTPD (README.Virtual-Users), представляет из себя следующее - в системе заводится системный пользователь, который ассоциируется с виртуальным пользователем. Можно ассоциировать несколько виртуальных пользователей с реальным системным пользователем. Для виртуальных пользователей назначается свой каталог, можно назначить ему так же квоты и прочее.
- Включим авторизацию из база данных пользователей PureDB (создадим символическую ссылку), по умолчанию была настроена авторизация Unix(no - выключена) и PAM (yes - включена). При аутентификации важен порядок (
security) загрузки, потому добавим цифру 60 в название создаваемой символической ссылки, чтобы проверка пользователя начиналась именно с проверки из PureDB
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/60PureDB ls -l /etc/pure-ftpd/auth/ lrwxrwxrwx 1 root root 26 Sep 17 12:32 60PureDB -> /etc/pure-ftpd/conf/PureDB lrwxrwxrwx 1 root root 26 Sep 17 12:29 65unix -> ../conf/UnixAuthentication lrwxrwxrwx 1 root root 25 Sep 17 12:29 70pam -> ../conf/PAMAuthentication
- Создадим системного пользователя ftpuser без shell и добавим его в группу www-data (в которую входит веб сервер Apache, чтобы права были вида ftpuser:www-data)
useradd -g www-data -d /home/ftpuser -m -s /bin/false ftpuser id ftpuser uid=1001(ftpuser) gid=33(www-data) groups=33(www-data) id www-data uid=33(www-data) gid=33(www-data) groups=33(www-data)
- Создание виртуальных пользователей. Все операции над пользователями FTP сервера осуществляться с помощью утилиты pure-pw. Работа с виртуальными пользователями происходит в два этапа:
- Создание файла со списком пользователей и их параметрами (по умолчанию '/etc/pureftpd.passwd'), на этом этапе вы также можете вносить изменения в список аккаунтов
- Создание на основе файла списка бинарного файла, с которым в конечном итоге и будет работать сервер (по умолчанию '/etc/pureftpd.pdb');
- Создадим нашего первого пользователя tester
pure-pw useradd tester -u ftpuser -g www-data -d /var/www/joo -c "John Smith" -y 4 pure-pw mkdb # что бы изменения были сразу же внесены в файл 'pureftpd.pdb' используйте ключ -m chown -R ftpuser:www-data /var/www/joo
Подключимся и создадим тестовые файл и директорию, чтобы проверить какие будут выставлены права
ls -l /var/www/joo/ drwxr-xr-x 2 ftpuser www-data 4096 Sep 17 14:04 test1 -rw-r--r-- 1 ftpuser www-data 0 Sep 17 14:04 test2
- Все! Настройка завершена.
Утилиты Pure-FTPD
- Добавить пользователя и установить для него пароль:
pure-pw useradd YourUser -u ftpusers -g ftpusers -d /home/YourDirFTP -c "John Smith"
- Для применения изменений нужно обновить файл pureftpd.pdb командой. Чтобы избежать использования 'pure-pw mkdb' после каждого изменения данных, используйте опцию '-m' в командах модификации
pure-pw mkdb
- Просмотр данных пользователя
pure-pw show YourLogin
- Изменить пароль
pure-pw passwd YourLogin
Дополнительные настройки Pure-FTPd
- Umask. Для параноика umask 177 077. The default are 133 (files are readable -but not writable- by other users) and 022 (same thing for directory, with the execute bit on). If new files should only be readable by the user, use 177:077. If you want uploaded files to be executable, use 022:022 (files will be readable by other people) or 077:077 (files will only be readable by their owner).
echo '177 077' > /etc/pure-ftpd/conf/Umask
- MaxLoad. Максимальная параллельная загрузка:
echo 4 > /etc/pure-ftpd/conf/MaxLoad
- MinUID. 530 Sorry, but I can't trust you. Для устранения этой ошибки нужно в /etc/pure-ftpd/conf/MinUID изменить значение 1000 на 33 этим мы разрешим системных пользователей начиная с 33, в моем случае это пользователь www-data. Этого не следует делать.
- DontResolve. Записывать в лог IP, а не имя клиента. Это приведет к ускорению работы Pure-FTPd так как не будет использоваться Что такое DNS.
echo 'yes' > /etc/pure-ftpd/conf/DontResolve
- Bind изменить IP,port Для того чтобы задать определенный IP и/или порт нужно создать файл Bind, в котором через запятую указать IP и порт. Можно задать пустые значение, в этом случае будут использованы значения по умолчанию:
echo '10.26.95.227,21000' > /etc/pure-ftpd/conf/Bind
- Приоритеты аутентификации
# Пожалуйста, отметьте, что LDAPConfigFile, MySQLConfigFile, # PAMAuthentication и UnixAuthentication могут использоваться только # один раз, но они могут использоваться вместе. Например, если вы # используете MySQLConfigFile, затем UnixAuthentication, то идёт запрос # к MySQL. Если в БД такой пользователь не найден, то пробуется # системный пользователь в /etc/passwd и /etc/shadow. Если SQL # аутентификация неудачна по причине неправильного пароля, то происходит # остановка дальнейшего поиска пользователя. Методы аутентификации # будут использоваться в порядке в котором они заданы
- Запретить анонимный доступ - echo yes > /etc/pure-ftpd/conf/NoAnonymous
- Более полный лог - echo yes > /etc/pure-ftpd/conf/VerboseLog
- Показывать системные файлы (вида .имяфайла) - echo yes > /etc/pure-ftpd/conf/DisplayDotFiles
- Время простою до отключения 15 минут - echo 15 > /etc/pure-ftpd/conf/MaxIdleTime