Это старая версия документа!
Содержание
Дата написания: май 2018 г.
Автор: Graf
FTP Сервер на базе PureFTPd |
---|
Установка и настройка сервера
Перед установкой и настройкой сервера, открываем файл /etc/shells и проверяем в нем наличие строки /bin/false, если ее нет — дописываем. Устанавливаем pure-ftpd через sbopkg предварительно изменив SlackBuild добавив в блок configure:
--with-language=russian \ --with-tls \ --with-rfc2640
Или изменив соответствующие переменные выше блока configure.
Далее, во всех статьях советуют создать отдельную группу и пользователя от имени которого будут работать виртуальные пользователи.
# groupadd ftpgroup # useradd -g ftpgroup -d /dev/null -s /bin/false ftpuser
Но, у меня стоит задача дать доступ лишь веб-программистам которые могли бы заливать файлы по ftp.
И тут возникает одна оказия. После заливки файлов на веб-ресурс , владельцем их становится ftpuser:ftpgroup, а надо apache:apache. Поэтому ничего создавать я не буду, так-как apache у нас, в основном, бесправный вот пусть он и будет для виртуальных пользователей ftp «папой и мамой». :)
Если ftp-сервер создается для других целей, то целесообразно создать отдельную группу и пользователя (команда выше), а в моих примерах поменять их соответственно.
Так как сам ftp не безопасен, надо его хоть как-то защитить. Для этого создадим сертификат:
# mkdir -p /etc/ssl/private/ # openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem ... ----- Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:MO Locality Name (eg, city) []:Moscow Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyOrg Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:mydom-ftp.ru <- DNS имя на которое будем заходить по ftp Email Address []:admin@mydom.ru # chmod 600 /etc/ssl/private/pure-ftpd.pem
Создали.
Теперь настроим сам сервер. Для этого переименуем существующий файл /etc/pure-ftpd/pure-ftpd.conf и создадим новый со следующими параметрами:
ChrootEveryone yes BrokenClientsCompatibility no MaxClientsNumber 5 Daemonize yes MaxClientsPerIP 3 VerboseLog no DisplayDotFiles no AnonymousOnly no NoAnonymous yes SyslogFacility ftp DontResolve yes MaxIdleTime 10 PureDB /etc/pure-ftpd/pureftpd.pdb LimitRecursion 10000 8 AnonymousCanCreateDirs no MaxLoad 4 TLS 2 CertFile /etc/ssl/private/pure-ftpd.pem FileSystemCharset UTF-8 AltLog w3c:/var/log/pureftpd.log PassivePortRange 50000 50100
Пояснения к параметрам и возможные значения указаны в таблице ниже.
Если сервер (допустим -192.168.15.15) за NAT'ом, то необходимо пробросить TCP порты 20, 21 - для активного режима и диапазон TCP портов, например 50000:50100 - для пассивного:
$IPTABLES -t nat -A PREROUTING -d $INET_IP -p tcp -m multiport --port 20,21,50000:50100 -j DNAT --to-destination 192.168.15.15 $IPTABLES -I FORWARD 1 -i $INET_IFACE -o $LAN_IFACE -d 192.168.15.15 -p tcp -m multiport --port 20,21,50000:50100 -j ACCEPT
Если не за NAT'ом, то просто открыть их:
$IPTABLES -A INPUT -p tcp -m multiport --destination-port 20,21,50000:50100 -j ACCEPT
Если выбран неявный (Implicit) метод шифрования, то необходимо ещё открыть (пробросить) TCP порты 989 и 990.
Добавляем виртуального пользователя webadmin1 с домашней директорией /var/www/htdocs/site1, который буде работать от имени реального пользователя и группы apache:apache (ftpuser:ftpgroup)
# pure-pw useradd webadmin1 -u apache -g apache -d /var/www/htdocs/site1
Если параметр CreateHomeDir в конфигурационном файле сервера не закомментирован и установлен в yes, то директория будет создана автоматически при первом входе данного пользователя через FTP-клиент. После выполнения команды будет предложено ввести пароль для виртуального пользователя.
После каждых изменений обновляем /etc/pure-ftpd/pureftpd.pdb (или используем ключ -m):
# pure-pw mkdb
Немного о командах и ключах в конце статьи.
Теперь запустим сервер и проверим работу нашего FTP-сервера:
# /etc/rc.d/rc.pure-ftpd start
Для автоматического запуска, пропишем эту строчку в /etc/rc.d/rc.local
Проверим запустился ли наш сервер.
# ps aux | grep pure root 5876 0.0 0.0 17460 4740 ? Ss 09:29 0:00 /usr/sbin/pure-ftpd /etc/pure-ftpd/pure-ftpd.conf
Запустился. Идём настраивать клиентов и проверять работу нашего FTP-сервера.
Установка и настройка клиентов
В Slackware воспользуемся одной из утилит - curlftpfs, которая позволяет монтировать FTP-ресурс как обычный каталог. Установим её при помощи sboopkg.
# sbopkg -Bi curlftpfs
Пробуем подключиться к mydom-ftp.ru пользователем webadmin1 с паролем ppp111222 и примонтировать его домашний каталог в /mnt/ftp. При этом указываем, что соединение будет по ftps (ключ - ssl) и не нужно проверять сертификат (ключ - no_verify_peer), так как он у нас самоподписанный.
# mkdir -p /mnt/ftp # curlftpfs mydom-ftp.ru /mnt/ftp/ -o ssl,no_verify_peer,user=webadmin1:ppp111222 # ls -al /mnt/ftp ... ... index.html
Проверили, работает. Но способ указания логина и пароля непосредственно в строке запуска, покажет их как минимум в списке запущенных процессов:
# ps aux | grep curlftp root 17164 0.0 0.0 25704 4080 ? Ssl 17:54 0:00 curlftpfs mydom-ftp.ru /mnt/ftp -o ssl,no_verify_peer,user=webadmin1:ppp111222
Поэтому, сделаем следующее (пример для обычного пользователя):
- создадим файл ~/.netrc с содержимым
machine mydom-ftp.ru login webadmin1 password ppp111222
- ограничим его правами
$ chmod 600 ~/.netrc
- создадим каталог монтирования и попробуем соединиться.
$ mkdir -p ~/ftp/site1 $ curlftpfs -o ssl,utf8,no_verify_peer ftp://mydom-ftp.ru/ ~/ftp/site1 $ ls -al ~/ftp/site1 ... ... index.html
Всё получилось и работает.
Чтобы отмонтировать ресурс введём в консоли:
$ fusermount -u ~/ftp/site1
Думаю, нет особой нужды расписывать настройку ftp-клиетнов, таких как FileZilla или WinSCP, для семейства OC Windows. Так как она и так интуитивно понятна.