Содержание
Дата написания: май 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 не безопасен, надо его хоть как-то защитить. Для этого создадим сертификат и DH ключ:
# 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 # openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 4096 Generating DH parameters, 4096 bit long safe prime, generator 2 This is going to take a long time ..................................................................... ..................................................................... ....+................................................................ ..................................................................... ..................................................................... +.................................................................... .... # # chmod 600 /etc/ssl/private/pure-ftpd.pem # chmod 600 /etc/ssl/private/pure-ftpd-dhparams.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
Немного о параметрах и ключах команды pure-pw в специальном разделе статьи.
Теперь запустим сервер и проверим работу нашего 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. Так как она и так интуитивно понятна.
Параметры и ключи pure-pw
Список некоторых параметров и ключей команды pure-pw
Просмотреть детальную информацию ПОЛЬЗОВАТЕЛЯ
# pure-pw show ПОЛЬЗОВАТЕЛЬ
Просмотр списка виртуальных пользователей
# pure-pw list
Следующие команды с ключом -m в конце, вносят изменения сразу в /etc/pure-ftpd/pureftpd.pdb без необходимости запуска pure-pw mkdb:
Добавить ПОЛЬЗОВАТЕЛЯ
# pure-pw useradd ПОЛЬЗОВАТЕЛЬ
Изменить пароль ПОЛЬЗОВАТЕЛЯ
# pure-pw passwd ПОЛЬЗОВАТЕЛЬ
Удалить ПОЛЬЗОВАТЕЛЯ
# pure-pw userdel ПОЛЬЗОВАТЕЛЬ
Изменить значения у ПОЛЬЗОВАТЕЛЯ
# pure-pw usermod ПОЛЬЗОВАТЕЛЬ
Ключ -z в useradd и usermod даёт возможность ограничить доступ в период времени, например разрешить доступ с 09:00 до 18:00:
-z 0900-1800
Подробнее о командах в pure-pw -h
Таблица параметров pure-ftpd.conf
Таблица взята ЗДЕСЬ.
Параметр | Возможные значения | Пояснение |
---|---|---|
ChrootEveryone | yes/no | Ограничить пользователя его домашним каталогом. |
TrustedGID | 10 | Доверенная группа с этим номером имеет доступ ко всей файловой системе. |
BrokenClientsCompatibility | yes/no | Включить/Выключить совместимость с нестандартными клиентами. |
MaxClientsNumber | 10 | Максимальное число одновременно подключенных клиентов. |
Daemonize | yes/no | Запускать в виде службы (демона). |
MaxClientsPerIP | 3 | Максимальное число подключений с одного IP-адреса. |
VerboseLog | yes/no | Если вы хотите записывать все команды клиентов, то в этом пункте должно быть yes. Если необходимо записывать также ответы сервера, то просто продублируйте этот пункт. |
AllowDotFiles | yes/no | Разрешить читать скрытые файлы. |
DisplayDotFiles | yes/no | Показывать скрытые файлы, даже когда клиент явно указано не показывать их. |
AnonymousOnly | yes/no | Разрешить только анонимный доступ. |
NoAnonymous | yes/no | Разрешить доступ только зарегистрированным пользователям. |
SyslogFacility | ftp | Средства syslog (auth, authpriv, daemon, ftp, security, user, local*). Значение по умолчанию — ftp, none — отключает логирование. |
FortunesFile | /usr/share/fortune/zippy | Показывать сообщения (необходимо создать файл и прочитать man). Например приветствие сервера, правила работы или шутки. |
DontResolve | yes/no | Записывать в лог IP, а не имя клиента. Это приведет к ускорению работы Pure-FTPd так как не будет использоваться DNS. |
MaxIdleTime | 3600 | Максимальное время простоя, после которого клиент будет отключен. |
LDAPConfigFile | /etc/pure-ftpd/db/ldap.conf | Файл конфигурации LDAP. |
MySQLConfigFile | /etc/pure-ftpd/db/mysql.conf | Файл конфигурации MySQL. |
PGSQLConfigFile | /etc/pureftpd-pgsql.conf | Файл конфигурации PostgreSQL. |
PureDB | /etc/pure-ftpd/pureftpd.pdb | База данных пользователей PureDB. |
ExtAuth | /var/run/ftpd.sock | Путь к сокету pure-authd. |
PAMAuthentication | yes/no | Разрешить/запретить PAM аутентификацию. |
UnixAuthentication | yes/no | Разрешить/запретить Unix аутентификацию (/etc/passwd). |
LimitRecursion | 2000 8 | Ограничения рекурсии команды ls. Первый аргумент - максимально число файлов, которые будет показаны. Второе - максимальное число подкаталогов. |
AnonymousCanCreateDirs | no | Анонимные пользователи могут создавать каталоги. |
MaxLoad | 4 | Если система загружена более, чем в указанном параметре, то анонимным пользователям запрещается скачивать файлы. |
PassivePortRange | 40110 40210 | Диапазон портов для пассивного ответа соединения. Для брандмауэра. |
ForcePassiveIP | 192.168.0.1 | Принудительный IP адрес в PASV/EPSV/SPSV ответах. Для NAT. Символические имена хостов также приняты для шлюзов с динамическим IP адресом. |
AnonymousRatio | 1 10 | Соотношение загрузки/скачивания для анонимных пользователей. |
UserRatio | 1 10 | Соотношение загрузки/скачивания для всех пользователей. Эта директива не перекрывает предыдущую. |
AntiWarez | yes/no | Не разрешает анонимным пользователям скачивать (download) файлы, владельцем которых является ftp (как правило, файлы, загруженные с другими анонимными пользователями). Скачивание должно быть подтверждено системным администратором (передача прав на файл другому пользователю), прежде чем этот файл будет доступен для скачивания.. |
Bind | 10.26.95.227,21000 | IP адрес/порт для прослушивания (по умолчанию = all IP и порт 21). |
AnonymousBandwidth | 8 | Максимальная пропускная способность для анонимных пользователей в Кб/с. |
UserBandwidth | 8 | Максимальная пропускная способность для всех пользователей (в том числе анонимные) в Кб/с. Используйте AnonymousBandwidth или UserBandwidth, использовать оба, не имеет смысла. |
Umask | 177 077 | Маска для создаваемых файлов и каталогов. Значение Umask получаем вычитанием нужной маски из максимального значения (777). Если маска для файлов:каталогов будет - 644:755, то значение Umask будет 133:022. Ставьте 177:077 - если вы чувствуете себя параноиком. |
MinUID | 1000 | Минимальный UID с которым пользователь будет авторизован. Рекомендуется от 1000. |
AllowUserFXP | yes/no | Разрешить FXP протокол аутентифицированным пользователям. |
AllowAnonymousFXP | yes/no | Разрешить FXP протокол анонимным пользователям. |
ProhibitDotFilesWrite | yes/no | Пользователи не могут удалять и/или изменять скрытые файлы даже если они их владельцы. Если TrustedGID включена, пользователи группы указанной в файле TrustedGID будут иметь доступ к скрытым файлам. |
ProhibitDotFilesRead | yes/no | Запретить читать скрытые файлы. |
AutoRename | yes/no | Переименовывает файл загружаемый файл (.1, .2 и т.п.), если файл с таким именем уже есть. |
AnonymousCantUpload | yes/no | Запретить/разрешить анонимным пользователям загружать новые файлы. |
TrustedIP | 10.1.1.1 | Только подключения к этому конкретному IP адресу могут быть не анонимными. Вы можете использовать эту директиву чтобы открыть несколько публичных IP адреса для анонимного FTP, и оставить приватный, защищенный файрволом IP для удалённого администрирования. Вы также можете разрешить не маршрутизируемые локальные IP (например, 10.x.x.x) для аутентификации и оставить публичный для анонимных пользователей FTP-сервер на другом IP. |
LogPID | yes | Добавлять PID в каждую строку лога. |
AltLog | clf:/var/log/pure-ftpd/transfer.log | Записывает передачи файлов в заданный файл определенного формата (clf - Apache-подобный формат, stats - оптимизирован для стат.отчетов, w3c - в формате W3C) |
NoChmod | yes/no | Запрещает команду chmod. Т.е. пользователи не могут менять права на свои файлы. |
KeepAllFiles | yes | Разрешить пользователям закачивать, но файлы удалять нельзя. |
CreateHomeDir | yes/no | Автоматически создавать домашний каталог пользователям (если он отсутствует). |
Quota | 1000:10 | Включить виртуальную квоту. Первое число - максимальное число файлов. Второе число - максимальный размер, в мегабайтах. Итак 1000:10 ограничивает каждого пользователя 1000 файлов и 10 Мб. |
PIDFile | /var/run/pure-ftpd.pid | Если ваш PureFTPd скомпилирован с поддержкой standalone режима, вы можете изменить местоположение pid-файла. По умолчанию используется/var/run/pure-ftpd.pid. |
CallUploadScript | yes | Если pure-ftpd скомпилирован с поддержкой pure-uploadscript, то этот пункт позволяет писать информацию о новых загруженных файлах в /var/run/pure-tpd.upload.pipe так, что pure-uploadscript может прочесть их и обработать загруженный файл. |
MaxDiskUsage | 99 | Указывает в процентах, до какой степени может быть заполнен диск. Если параметр превышен, загрузка файл на сервер запрещается. |
NoRename | yes/no | Запрет переименования файлов. |
CustomerProof | yes/no | Включить customer proof. Как обход против распространенных ошибок клиентов к примеру chmod 0 public_html. Чтобы исключить некоторые проблемы. |
PerUserLimits | 3:20 | Число параллельных процессов. Будет работать только если FTP-сервер был собран с опцией –with-peruserlimits. Формат: <максимум сессий на пользователей>:<максимум сеансов анонимных пользователей>. Например, 3:20 означает, что авторизованный пользователь может иметь 3 активных сессии. А для всех анонимных пользователей - максимум 20 сессий. |
NoTruncate | yes | Если файл загружается на сервер, и есть предыдущая его версия с тем же именем, то старый файл не будет ни удалён, ни усечён. Загрузка будет произведена во временный файл и по окончании загрузки будет произведено атомарное переключение к новой версии файла. Например, при загрузке большого PHP сценария, апач будет работать со старой версией до полной загрузки и немедленно переключится на новый как только, он будет полностью передан. Эта опция несовместима с виртуальными квотами. |
TLS | 0 | Этот параметр (TLS) может принимать три значения: 0 - отключить SSL/TLS шифрование (по-умолчанию). 1 - принимать обычные и шифрованные подключения. 2 - отклонять подключения которые не используют SSL/TLS, включая анонимные соединения. Не раскомментируйте это вслепую. Проверьте, что: 1) Ваш сервер был собран с поддержкой SSL/TLS (–with-tls), 2) На месте есть действительный сертификат, 3) Только совместимые клиенты будут заходить. |
IPV4Only | yes/no | Использовать только IPv4. По умолчанию используется как IPv4, так и IPv6. |
IPV6Only | yes/no | Использовать только IPv6. По умолчанию используется как IPv4, так и IPv6. |
FileSystemCharset | big5 | Определите кодировку для файловой системы сервера. Работает только если pure-ftpd скомпилирован с параметром –with-rfc2640. |
ClientCharset | big5 | Определите кодировку по умолчанию для клиентов, которые не используют UTF-8. Опционально. Работает только если pure-ftpd скомпилирован с параметром –with-rfc2640. |
Ссылался на….
https://download.pureftpd.org/pub/pure-ftpd/doc/README
http://tolik-punkoff.com/2016/12/10/domashnij-ftp-server-na-slackware-i-pureftpd/