Различия

Показаны различия между двумя версиями страницы.


wiki:articles:pureftpd [06/07/2020 15:43] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +Дата написания: //май 2018 г.//\\
 +Автор: //Graf//\\
 +\\
 +^   **FTP Сервер на базе PureFTPd**   ^
 +\\
  
 +<note tip> В статье рассказывается об установке и настройке автономного (**STANDALONE**), т.е. без использования сетевых демонов (супер-серверов), FTP-сервера с поддержкой шифрования. Если есть необходимость установки с использованием таких демонов как //Inetd, TCPserver, Xinetd//, то можно обратиться к специальному разделу (**SUPER-SERVER INSTALLATION**) в официальном [[https://download.pureftpd.org/pub/pure-ftpd/doc/README | README]]. Процесс такой установки, по сути, происходит в 1-2 действия. </note>
 +
 +===== Установка и настройка сервера =====
 +Перед установкой и настройкой сервера, открываем файл ///etc/shells// и проверяем в нем наличие строки ///bin/false//, если ее нет — дописываем. Устанавливаем //pure-ftpd// через //sbopkg// предварительно изменив //SlackBuild// добавив в блок //configure//:
 +<code>
 +--with-language=russian \
 +--with-tls \
 +--with-rfc2640
 +</code>
 +Или изменив соответствующие переменные выше блока //configure//.\\
 +Далее, во всех статьях советуют создать отдельную группу и пользователя от имени которого будут работать виртуальные пользователи.
 +<code>
 +# groupadd ftpgroup
 +# useradd -g ftpgroup -d /dev/null -s /bin/false ftpuser
 +</code>
 +Но, у меня стоит задача дать доступ лишь веб-программистам которые могли бы заливать файлы по ftp.\\
 +И тут возникает одна оказия. После заливки файлов на веб-ресурс , владельцем их становится //ftpuser:ftpgroup//, а надо //apache:apache//. Поэтому ничего создавать я не буду, так-как //apache// у нас, в основном, бесправный вот пусть он и будет для виртуальных пользователей ftp "папой и мамой". :)\\
 +Если ftp-сервер создается для других целей, то целесообразно создать отдельную группу и пользователя (команда выше), а в моих примерах поменять их соответственно. \\
 +Так как сам ftp не безопасен, надо его хоть как-то защитить. Для этого создадим сертификат и DH ключ:
 +<code>
 +# 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
 +</code>
 +Создали.\\
 +Теперь настроим сам сервер. Для этого переименуем существующий файл ///etc/pure-ftpd/pure-ftpd.conf// и создадим новый со следующими параметрами:
 +<code>
 +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
 +</code>
 +
 +Пояснения к параметрам и возможные значения указаны в [[wiki:articles:pureftpd#tablica_parametrov_pure-ftpdconf|специальном разделе статьи]].
 +
 +Если сервер (допустим -192.168.15.15) за NAT'ом, то необходимо пробросить **TCP** порты **20, 21** - для активного режима и диапазон **TCP** портов, например **50000:50100** - для пассивного:
 +<code>
 +$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
 +</code>
 +Если не за NAT'ом, то просто открыть их:
 +<code>
 +$IPTABLES -A INPUT -p tcp -m multiport --destination-port 20,21,50000:50100 -j ACCEPT
 +</code>
 +Если выбран неявный (//Implicit//) метод шифрования, то необходимо ещё открыть (пробросить) **TCP** порты **989** и **990**.
 +
 +Добавляем виртуального пользователя //webadmin1// с домашней директорией ///var/www/htdocs/site1//, который буде работать от имени реального пользователя и группы //apache:apache// (//ftpuser:ftpgroup//)
 +<code>
 +# pure-pw useradd webadmin1 -u apache -g apache -d /var/www/htdocs/site1
 +</code>
 +Если параметр //CreateHomeDir// в конфигурационном файле сервера не закомментирован и установлен в //yes//, то директория будет создана автоматически при первом входе данного пользователя через FTP-клиент. После выполнения команды будет предложено ввести пароль для виртуального пользователя.\\
 +После каждых изменений обновляем ///etc/pure-ftpd/pureftpd.pdb// (или используем ключ //-m//):
 +<code>
 +# pure-pw mkdb
 +</code>
 +Немного о параметрах и ключах команды //pure-pw// в [[wiki:articles:pureftpd#parametry_i_kljuchi_pure-pw|специальном разделе статьи]].\\
 +Теперь запустим сервер и проверим работу нашего FTP-сервера:
 +<code>
 +# /etc/rc.d/rc.pure-ftpd start
 +</code>
 +Для автоматического запуска, пропишем эту строчку в ///etc/rc.d/rc.local//\\
 +Проверим запустился ли наш сервер.
 +<code>
 +# 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
 +</code>
 +Запустился. Идём настраивать клиентов и проверять работу нашего FTP-сервера.
 +
 +===== Установка и настройка клиентов =====
 +В Slackware воспользуемся одной из утилит - //curlftpfs//, которая позволяет монтировать FTP-ресурс как обычный каталог. Установим её при помощи //sboopkg//.
 +<code>
 +# sbopkg -Bi curlftpfs
 +</code>
 +Пробуем подключиться к //mydom-ftp.ru// пользователем //webadmin1// с паролем //ppp111222// и примонтировать его домашний каталог в ///mnt/ftp//. При этом указываем, что соединение будет по //ftps// (ключ - //ssl//) и не нужно проверять сертификат (ключ - //no_verify_peer//), так как он у нас самоподписанный.
 +<code>
 +# mkdir -p /mnt/ftp
 +# curlftpfs mydom-ftp.ru /mnt/ftp/ -o ssl,no_verify_peer,user=webadmin1:ppp111222
 +# ls -al /mnt/ftp
 +...
 +...
 +index.html
 +</code>
 +Проверили, работает. Но способ указания логина и пароля непосредственно в строке запуска, покажет их как минимум в списке запущенных процессов:
 +<code>
 +# 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
 +</code>
 +Поэтому, сделаем следующее (пример для обычного пользователя):
 +  * создадим файл //~/.netrc// с содержимым
 +<code>
 +machine mydom-ftp.ru
 +login webadmin1
 +password ppp111222
 +</code>
 +  * ограничим его правами
 +<code>
 +$ chmod 600 ~/.netrc
 +</code>
 +  * создадим каталог монтирования и попробуем соединиться.
 +<code>
 +$ mkdir -p ~/ftp/site1
 +$ curlftpfs -o ssl,utf8,no_verify_peer ftp://mydom-ftp.ru/ ~/ftp/site1
 +$ ls -al ~/ftp/site1
 +...
 +...
 +index.html
 +</code>
 +Всё получилось и работает.\\
 +Чтобы отмонтировать ресурс введём в консоли:
 +<code>
 +$ fusermount -u ~/ftp/site1
 +</code>
 +
 +Думаю, нет особой нужды расписывать настройку ftp-клиетнов, таких как FileZilla или WinSCP, для семейства OC Windows. Так как она и так интуитивно понятна.
 +
 +===== Параметры и ключи pure-pw =====
 +Список некоторых параметров и ключей команды //pure-pw//
 +
 +Просмотреть детальную информацию ПОЛЬЗОВАТЕЛЯ
 +<code>
 +# pure-pw show ПОЛЬЗОВАТЕЛЬ
 +</code>
 +Просмотр списка виртуальных пользователей
 +<code>
 +# pure-pw list
 +</code>
 +Следующие команды с ключом //-m//  в конце, вносят изменения сразу в ///etc/pure-ftpd/pureftpd.pdb// без необходимости запуска //pure-pw mkdb//:\\
 +
 +Добавить ПОЛЬЗОВАТЕЛЯ
 +<code>
 +# pure-pw useradd ПОЛЬЗОВАТЕЛЬ
 +</code>
 +Изменить пароль ПОЛЬЗОВАТЕЛЯ
 +<code>
 +# pure-pw passwd ПОЛЬЗОВАТЕЛЬ
 +</code>
 +Удалить ПОЛЬЗОВАТЕЛЯ
 +<code>
 +# pure-pw userdel ПОЛЬЗОВАТЕЛЬ
 +</code>
 +Изменить значения у ПОЛЬЗОВАТЕЛЯ
 +<code>
 +# pure-pw usermod ПОЛЬЗОВАТЕЛЬ
 +</code>
 +
 +Ключ //-z// в //useradd// и //usermod// даёт возможность ограничить доступ в период времени, например разрешить доступ с 09:00 до 18:00: 
 +<code>
 +-z 0900-1800
 +</code>
 +Подробнее о командах в //pure-pw -h//
 +
 +===== Таблица параметров pure-ftpd.conf=====
 +Таблица взята [[http://nixway.org/pureftpd-config-params/ | ЗДЕСЬ]].
 +^   **Параметр**     **Возможные значения**     **Пояснение**   ^
 +|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/]]\\
 +
 +\\
 +[[http://slackware.su/forum/index.php/topic,2879.0.html | Обсуждаем на форуме]]
Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:pureftpd (generated for current page)