Домашняя страница Pure-FTPd.
Pure-FTPd — свободный FTP-сервер для операционных систем семейства UNIX, распространяется по лицензии BSD. Основное внимание уделяется безопасности и простоте настройки.
Функциональные возможности:
yum install pure-ftpd
apt install pure-ftpd
Запустим установленный, но еще не защищенный, FTP-сервер.
systemctl start pure-ftpd;
systemctl enable pure-ftpd;
На этом этапе сервер Pure-FTPd запущен и готов к работе. Проверим работу FPT сервера на localhost:
$ ftp localhost Trying [::1]:21 ... Connected to localhost. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 50 allowed. 220-Local time is now 18:51. Server port: 21. 220-This is a private system - No anonymous login 220 You will be disconnected after 15 minutes of inactivity. Name (localhost:admin):
/etc/default/pure-ftpd-common /etc/pure-ftpd
echo yes > /etc/pure-ftpd/conf/ChrootEveryone
echo no > /etc/pure-ftpd/conf/PAMAuthentication
Механизм Virtual Users в Pure-FTPD (README.Virtual-Users), представляет из себя следующее - в системе заводится системный пользователь, который ассоциируется с виртуальным пользователем. Можно ассоциировать несколько виртуальных пользователей с реальным системным пользователем. Для виртуальных пользователей назначается свой каталог, можно назначить ему так же квоты и прочее.
Включим авторизацию из база данных пользователей PureDB (создадим символическую ссылку), по умолчанию была настроена авторизация Unix(no - выключена) и PAM (yes - включена). При аутентификации важен порядок загрузки, потому добавим цифру 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
В моем случае запущен Nginx. Чтобы выяснить от какого пользователя он запускается, можно посмотреть в его конфигурационном файле или выполнить команду:
ps -ef | grep nginx
Как мы видим он у меня запущен от пользователя www-data (также часто встречается запуск от пользователя nginx). Теперь выясним uid нашего пользователя www-data, введя команду
id www-data uid=33(www-data) gid=33(www-data) groups=33(www-data)
В /etc/pure-ftpd/conf/MinUID изменим значение 1000 на uid пользователя www-data, то есть 33. Если этого не сделать вы получите ошибку, при попытке подключиться к FTP серверу: 530 Sorry, but I can't trust you.
Все операции над пользователями FTP сервера осуществляться с помощью утилиты pure-pw. Работа с виртуальными пользователями происходит в два этапа:
pure-pw useradd tester -u www-data -g www-data -d /var/www -c "Name User" -y 4 pure-pw mkdb # что бы изменения были сразу же внесены в файл 'pureftpd.pdb' используйте ключ -m chown -R www-data:www-data /var/www
Подключимся, например при помощи ftp- клиента FileZilla и создадим тестовые файл и директорию, чтобы проверить какие будут выставлены права
ls -l /var/www drwxr-xr-x 2 www-data www-data 4096 May 11 19:37 testdir/ -rw-r--r-- 1 www-data www-data 0 May 11 19:37 testfile
Все! Настройка FTP сервера завершена.
Современные реалии требуют всё шифровать. Давайте и мы сделаем протокол FTP более защищенным. И обязательно запищим пароль от FTP сервера на листочке и приклеим к монитору (шутка )!
Преамбула, такова, что протокол FTP передает все ПАРОЛИ и данные в открытом виде (в текстовом виде). То есть любой сниффер позволяет прочитать ваш логин и пароль. А мы возьмем и зашифруем и логин и пароль!
apt install openssl
Итак, для начала нам нужно создать SSL сертификат и подключить его к нашему серверу Pure-FTPd. По соглашению, будем хранить сертификаты в /etc/ssl/private. Вы можете выбрать произвольную директорию.
openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem -days 3650
Запущенная команда задаст несколько вопросов, ответьте на них в произвольной форме.
Country Name (2 letter code) [AU]:UA State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:dieg.info Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:dieg.info Email Address []:darkfire@dieg.info
Зададим права на файл сертификата
chmod 600 /etc/ssl/private/pure-ftpd.pem
Выберем один из трех режимов работы для FTP сервера. Если вы хотите разрешить сессии как FTP, так и TLS, выполните команду:
echo 1 > /etc/pure-ftpd/conf/TLS
Если же вы хотите разрешить только сессии TLS (без FTP), выполните:
echo 2 > /etc/pure-ftpd/conf/TLS
Чтобы запретить TLS совсем (разрешить только FTP), либо удалите файл /etc/pure-ftpd/conf/TLS, либо выполните:
echo 0 > /etc/pure-ftpd/conf/TLS
Затем перезапустите службу Pure FTPd, чтобы изменения вступили в силу:
systemctl restart pure-ftpd
Теперь можно соединиться с сервером. Если соединение производится первый раз, вам будет предложено принять новый SSL-сертификат сервера.
pure-pw useradd YourUser -u ftpusers -g ftpusers -d /home/YourDirFTP -c "John Smith"
pure-pw mkdb
pure-pw show YourLogin
pure-pw passwd YourLogin
+------+---------+-------+------+-------------------------------------------+ | PID | Login |For/Spd| What | File/IP | +------+---------+-------+------+-------------------------------------------+ | 2356 | testftp | 00:00 | IDLE | | | '' | '' | '' | '' | -> 77.122.92.88.kha.volia.net | +------+---------+-------+------+-------------------------------------------+
echo '177 077' > /etc/pure-ftpd/conf/Umask
echo 4 > /etc/pure-ftpd/conf/MaxLoad
echo 'yes' > /etc/pure-ftpd/conf/DontResolve
echo '10.26.95.227,21000' > /etc/pure-ftpd/conf/Bind
# Пожалуйста, отметьте, что LDAPConfigFile, MySQLConfigFile, # PAMAuthentication и UnixAuthentication могут использоваться только # один раз, но они могут использоваться вместе. Например, если вы # используете MySQLConfigFile, затем UnixAuthentication, то идёт запрос # к MySQL. Если в БД такой пользователь не найден, то пробуется # системный пользователь в /etc/passwd и /etc/shadow. Если SQL # аутентификация неудачна по причине неправильного пароля, то происходит # остановка дальнейшего поиска пользователя. Методы аутентификации # будут использоваться в порядке в котором они заданы