CentOS 7

Устанавливаем FTP-СЕРВЕР PROFTPD НА CENTOS 7

FTP Название File Transfer Protocol Уровень (по модели OSI) Прикладной Семейство TCP/IP Создан в 1971 г. Порт/ID 21/TCP для команд, 20/TCP для данных, 49152-65534/TCP динамически Назначение протокола Передача файлов Спецификация RFC 959 Основные реализации (клиенты) Смотри Сравнение FTP-клиентов Основные реализации (серверы) Сравнение FTP-серверов Расширяемость Доп. команды FTP (англ. File Transfer Protocol — протокол передачи файлов) — стандартный протокол, предназначенный для передачи файлов по TCP-сетям (например, Интернет). Использует 21-й порт. FTP часто используется для загрузки сетевых страниц и других документов с частного устройства разработки на открытые сервера хостинга.

Установка и базовая настройка

Устанавливаем EPEL репозиторий:

# yum install epel-release

Устанавливаем ProFTPd:

# yum install proftpd

Открываем необходимые порты на брандмауэре:

# firewall-cmd --permanent --add-port=20-21/tcp
# firewall-cmd --permanent --add-port=40900-40999/tcp 
# firewall-cmd --reload

Добавим небольшие правки в начальный конфигурационный файл:

# vi /etc/proftpd.conf

UseIPv6 off
IdentLookups off
PassivePorts 40900 40999

Разрешаем сервис и запускаем его:

# systemctl enable proftpd
# systemctl start proftpd

Можно пробовать подключаться под любой системной учетной записью. Если необходимо добавить отдельного пользователя, вводим команду:

# useradd ftpuser -d /var/www -s /sbin/nologin
# passwd ftpuser

* в данном примере мы создали пользователя ftpuser с домашней директорией /var/www.

ProFTPd через TLS

Редактируем конфигурационный файл (приводим к следующему виду):

vi /etc/proftpd.conf 

#<IfDefine TLS>
  TLSEngine                     on
  TLSRequired                   on
  TLSRSACertificateFile         /etc/pki/tls/certs/proftpd.pem
  TLSRSACertificateKeyFile      /etc/pki/tls/certs/proftpd.pem
  TLSCipherSuite                ALL:!ADH:!DES
  TLSOptions                    NoCertRequest
  TLSVerifyClient               off
  TLSRenegotiate               ctrl 3600 data 512000 required off timeout 300
  TLSLog                        /var/log/proftpd/tls.log
#  <IfModule mod_tls_shmcache.c>
#    TLSSessionCache            shm:/file=/var/run/proftpd/sesscache
#  </IfModule>
#</IfDefine>

Генерируем сертификат:

openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/pki/tls/certs/proftpd.pem -out /etc/pki/tls/certs/proftpd.pem -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.dmosk.local/CN=test"

Перезапускаем сервис:

systemctl restart proftpd

Виртуальные пользователи

В файле

Устанавливаем proftpd-utils:

yum install proftpd-utils

Создаем каталог для хранения конфигурационных файлов froftpd:

mkdir /etc/proftpd.d

Создаем файл с паролями:

ftpasswd --passwd --file=/etc/proftpd.d/ftpd.passwd --name=vuser1 --uid=48 --gid=48 --home=/var/www --shell=/sbin/nologin

* где /etc/proftpd/ftpd.passwd — полный путь до файла, в котором хранятся пользователи; vuser1 — имя пользователя (логин); uid и gid — идентификаторы пользователя и группы системной учетной записи, от которой будет выступать сервер; /var/www — домашний каталог пользователя; /sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Редактируем proftpd.conf:

vi /etc/proftpd.conf

Комментируем следующую строку:

#AuthOrder

Добавляем следующее: 

RequireValidShell off
AuthUserFile /etc/proftpd.d/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

Перезапускаем сервис:

systemctl restart proftpd

В базе данных MySQL (MariaDB)

Устанавливаем компонент proftpd-mysql:

yum install proftpd-mysql

Если не установлена, ставим MariaDB:

yum install mariadb mariadb-server

Разрешаем и запускаем сервис:

systemctl enable mariadb

systemctl start mariadb

Задаем пароль для суперпользователя базы данных:

mysqladmin -u root password

Подключаемся к базе данных:

mysql -uroot -p

Создаем базу данных, таблицу и пользователя:

> CREATE DATABASE proftpd DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

> CREATE TABLE `proftpd`.`users` (
`username` VARCHAR( 32 ) NOT NULL ,
`password` CHAR( 41 ) NOT NULL ,
`uid` INT NOT NULL ,
`gid` INT NOT NULL ,
`homedir` VARCHAR( 255 ) NOT NULL ,
`shell` VARCHAR( 255 ) NOT NULL DEFAULT '/sbin/nologin',
UNIQUE (`username`)           
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

> GRANT SELECT ON proftpd.* TO proftpu@localhost IDENTIFIED BY 'proftpdpass';

* данными командами мы создали базу данных proftpd. В ней таблицу users и пользователя proftpu с паролем proftpdpass, которому дали право подключаться только с локального сервера.

Добавляем пользователя в таблицу и отключаемся от базы:

> INSERT INTO `proftpd`.`users` VALUES ('sqluser1', ENCRYPT('sqlpassword'), '48', '48', '/var/www', '/sbin/nologin');

> \q

* в данном примере мы создаем пользователя sqluser1 с паролем sqlpassword.

Создаем файл с конфигурацией для SQL:

mkdir /etc/proftpd.d

vi /etc/proftpd.d/sql.conf

SQLBackend mysql
SQLEngine on
SQLAuthTypes Crypt
SQLConnectInfo proftpd@localhost proftpu proftpdpass
SQLUserInfo users username password uid gid homedir shell
SQLAuthenticate users*
SQLMinUserUID 33
SQLMinUserGID 33
SQLLogFile /var/log/proftpd/sql.log

Настраиваем proftpd (добавляем строки):

vi /etc/proftpd.conf

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
Include /etc/proftpd.d/sql.conf
AuthOrder mod_sql.c

Перезапускаем сервис:

systemctl restart proftpd