| |
— | wiki:articles:pureftpd [06/07/2020 15:43] (текущий) – создано - внешнее изменение 127.0.0.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 | Обсуждаем на форуме]] |