Ftp linux server centos

Как настроить FTP-сервер с VSFTPD на CentOS 7

FTP (протокол передачи файлов) — это стандартный сетевой протокол клиент-сервер, который позволяет пользователям передавать файлы в удаленную сеть и из нее.

Для Linux доступно несколько FTP-серверов с открытым исходным кодом. Наиболее популярными и широко используемыми являются PureFTPd , ProFTPD и vsftpd .

В этом руководстве мы будем устанавливать vsftpd (Very Secure Ftp Daemon) на CentOS 7. Это стабильный, безопасный и быстрый FTP-сервер. Мы также покажем вам, как настроить vsftpd, чтобы ограничить пользователей их домашним каталогом и зашифровать всю передачу с помощью SSL / TLS.

Для более безопасной и быстрой передачи данных используйте SCP или SFTP .

Подготовка

Прежде чем продолжить это руководство, убедитесь, что вы вошли в систему как пользователь с привилегиями sudo .

Установка vsftpd на CentOS 7

Пакет vsftpd доступен в репозиториях CentOS по умолчанию. Чтобы установить его, выполните следующую команду:

После установки пакета запустите демон vsftpd и включите его автоматический запуск во время загрузки:

Вы можете проверить, что служба vsftpd запущена, распечатав ее статус:

Результат будет выглядеть примерно так, как показано ниже, показывая, что служба vsftpd активна и работает:

Настройка vsftpd

Настройка службы vsftpd включает редактирование файла конфигурации /etc/vsftpd/vsftpd.conf . Большинство настроек хорошо документированы в файле конфигурации. Чтобы узнать обо всех доступных вариантах, посетите официальную страницу vsftpd .

В следующих разделах мы рассмотрим некоторые важные настройки, необходимые для настройки безопасной установки vsftpd.

Начните с открытия файла конфигурации vsftpd:

1. Доступ по FTP

Мы разрешим доступ к FTP-серверу только локальным пользователям, найдем директивы anonymous_enable и local_enable и проверим соответствие вашей конфигурации приведенным ниже строкам:

2. Включение загрузки

write_enable параметр write_enable чтобы разрешить изменения файловой системы, такие как загрузка и удаление файлов.

3. Chroot Jail

Предотвратите доступ пользователей FTP к любым файлам за пределами их домашних каталогов, раскомментировав директиву chroot .

По умолчанию, когда включен chroot, vsftpd откажется загружать файлы, если каталог, в котором заблокированы пользователи, доступен для записи. Это сделано для предотвращения уязвимости системы безопасности.

Используйте один из приведенных ниже методов, чтобы разрешить загрузку при включенном chroot.

Метод 1. — Рекомендуемый метод разрешить загрузку — оставить chroot включенным и настроить каталоги FTP. В этом руководстве мы создадим каталог ftp внутри дома пользователя, который будет служить uploads каталогом и каталогом загрузки с возможностью записи для загрузки файлов.

Метод 2. Другой вариант — добавить следующую директиву в файл конфигурации vsftpd. Используйте эту опцию, если вам необходимо предоставить пользователю доступ с правом записи к его домашнему каталогу.

4. Пассивные FTP-соединения

vsftpd может использовать любой порт для пассивных FTP-соединений. Мы укажем минимальный и максимальный диапазон портов, а затем откроем диапазон в нашем брандмауэре.

Добавьте в файл конфигурации следующие строки:

5. Ограничение входа пользователя

Чтобы разрешить только определенным пользователям входить на FTP-сервер, добавьте следующие строки после строки userlist_enable=YES :

Читайте также:  Как удалить все драйвера nvidia windows 10

Когда этот параметр включен, вам необходимо явно указать, какие пользователи могут входить в систему, добавив имена пользователей в файл /etc/vsftpd/user_list (по одному пользователю на строку).

6. Защита передачи с помощью SSL / TLS

Чтобы зашифровать FTP-передачу с помощью SSL / TLS, вам потребуется сертификат SSL и настроить FTP-сервер для его использования.

Вы можете использовать существующий сертификат SSL, подписанный доверенным центром сертификации, или создать самозаверяющий сертификат.

Если у вас есть домен или поддомен, указывающий на IP-адрес FTP-сервера, вы можете легко создать бесплатный SSL-сертификат Let’s Encrypt .

В этом руководстве мы создадим самозаверяющий сертификат SSL с помощью команды openssl .

Следующая команда создаст 2048-битный закрытый ключ и самозаверяющий сертификат, действительный в течение 10 лет. И закрытый ключ, и сертификат будут сохранены в одном файле:

После создания SSL-сертификата откройте файл конфигурации vsftpd:

Найти rsa_cert_file и rsa_private_key_file директивы, изменить их значения на pam путь к файлу и установите ssl_enable директиву YES :

Если не указано иное, FTP-сервер будет использовать только TLS для безопасных соединений.

Перезапустите службу vsftpd

После того, как вы закончите редактирование, конфигурационный файл vsftpd (без комментариев) должен выглядеть примерно так:

Сохраните файл и перезапустите службу vsftpd, чтобы изменения вступили в силу:

Открытие брандмауэра

Если вы используете брандмауэр, вам необходимо разрешить FTP-трафик.

Чтобы открыть порт 21 (командный порт FTP), порт 20 (порт данных FTP) и 30000-31000 (диапазон пассивных портов), 30000-31000 следующие команды:

Перезагрузите правила брандмауэра, набрав:

Создание пользователя FTP

Чтобы протестировать наш FTP-сервер, мы создадим нового пользователя.

  • Если у вас уже есть пользователь, которому вы хотите предоставить доступ по FTP, пропустите 1-й шаг.
  • Если вы установили allow_writeable_chroot=YES в вашем файле конфигурации, пропустите 3-й шаг.

    Создайте нового пользователя с именем newftpuser :

    Добавьте пользователя в список разрешенных пользователей FTP:

    Создайте дерево каталогов FTP и установите правильные разрешения :

    Как обсуждалось в предыдущем разделе, пользователь сможет загружать свои файлы в каталог ftp/upload .

    На этом этапе ваш FTP-сервер полностью функционален, и вы должны иметь возможность подключиться к своему серверу с помощью любого FTP-клиента, который может быть настроен для использования шифрования TLS, например FileZilla .

    Отключение доступа к оболочке

    По умолчанию при создании пользователя, если это не указано явно, у пользователя будет SSH-доступ к серверу.

    Чтобы отключить доступ к оболочке, мы создадим новую оболочку, которая просто напечатает сообщение, сообщающее пользователю, что его учетная запись ограничена только доступом по FTP.

    Выполните следующие команды, чтобы создать оболочку /bin/ftponly и сделать ее исполняемой:

    Добавьте новую оболочку в список допустимых оболочек в /etc/shells :

    Измените оболочку пользователя на /bin/ftponly :

    Используйте ту же команду, чтобы изменить оболочку для других пользователей, которым вы хотите предоставить только доступ по FTP.

    Выводы

    В этом руководстве вы узнали, как установить и настроить безопасный и быстрый FTP-сервер в вашей системе CentOS 7.

    Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

    Источник

    Настройка FTP-сервера vsFTPd на CentOS 7

    На текущий момент есть две удачные реализации FTP-сервера для Linux: vsFTPd и proFTPd. В данной инструкции речь пойдет о первом, так как его актуальная версия более свежая, в то время, как последняя версия proFTPd выпущена в 2013 году.

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

    Запускаем процесс установки:

    yum install vsftpd

    После открываем на редактирование следующий файл:

    И приводим его к следующему виду:

    allow_writeable_chroot=YES
    pasv_min_port=40900
    pasv_max_port=40999

    * первые две строчки мы редактируем: anonymous_enable разрешает подключение анонимных пользователей, поэтому мы отключаем такую возможность; chroot_local_user запрещает выход за пределы домашней директории пользователя. Третью, четвертую и пятую строки мы дописываем — allow_writeable_chroot разрешает подключения пользователю, у которого есть права на запись в корневую директорию; это диапазон динамических портов, которые будут использоваться vsFTPd. Данный диапазон важно указывать, если используется брандмауэр. Сам диапазон можно задать любой из незарегистрированных портов.

    Отключаем SELinux следующими командами:

    sed -i «s/SELINUX=enforcing/SELINUX=disabled/» /etc/selinux/config

    * первая команда отключит SELinux, вторая — отключит его автозапуск после перезагрузки.

    Добавляем правила в брандмауэр для корректной работы FTP-сервера:

    firewall-cmd —permanent —add-port=20-21/tcp

    firewall-cmd —permanent —add-port=40900-40999/tcp

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

    systemctl enable vsftpd

    systemctl start vsftpd

    По умолчанию, к vsFTPd нельзя подключиться с использованием учетной записи root. Поэтому нужно использовать другую пользовательскую запись или создать новую следующей командой:

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

    * ftpuser — имя учетной записи; /var/www — домашняя директория; /sbin/nologin запрещает локальный вход в систему.

    Задаем пароль новому пользователю:

    Базовая настройка закончена — можно пробовать подключаться к FTP-серверу.

    vsFTPd через TLS

    TLS позволяет настроить безопасный FTP, передача данных через который осуществляется по зашифрованному каналу.

    Для начала создаем сертификат:

    openssl req -new -x509 -days 1461 -nodes -out /etc/vsftpd/vsftpd.pem -keyout /etc/vsftpd/vsftpd.pem -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.dmosk.local/CN=test»

    * в данном примере мы создаем самоподписный сертификат на 4 года для URL test.dmosk.local или test. Обратите внимание, это один файл, в котором содержится открытый и закрытый ключи.

    Открываем на редактирование конфигурационный файл vsFTPd:

    И дописываем в него следующее:

    ssl_enable=YES
    allow_anon_ssl=NO
    force_local_data_ssl=NO
    force_local_logins_ssl=NO
    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO
    rsa_cert_file=/etc/vsftpd/vsftpd.pem

    * где ssl_enable разрешает использование шифрования; allow_anon_ssl разрешает использовать SSL анонимным пользователям; force_local_data_ssl требует использования шифрования, и если установить YES, клиенты без шифрования не смогут подключиться; force_local_logins_ssl также требует подключение по SSL; ssl_tlsv1 — использовать TLS версии 1; ssl_sslv2 — использовать SSL версии 2; ssl_sslv3 — использовать SSL версии 3; rsa_cert_file — путь к сертификату.

    systemctl restart vsftpd

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

    Устанавливаем пакет compat-db:

    yum install compat-db

    На всякий случай, сохраняем pam файл для авторизации vsftpd:

    mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.back

    Создаем новый файл со следующим содержимым:

    auth required pam_userdb.so db=/etc/vsftpd/virtual_users
    account required pam_userdb.so db=/etc/vsftpd/virtual_users
    session required pam_loginuid.so

    * где /etc/vsftpd/virtual_users — файл, в котором мы будем хранить пользователей.

    Открываем конфигурационный файл сервера FTP:

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

    guest_enable=YES
    guest_username=ftp
    virtual_use_local_privs=YES
    user_sub_token=$USER
    local_root=/home/$USER

    * где guest_enable разрешает виртуальных пользователей; guest_username — имя системной учетной записи, от которой работаю виртуальные пользователи; virtual_use_local_privs — виртуальные пользователи с такими же привилегиями, что и локальные; user_sub_token — имя учетной записи храниться в переменной $USER; local_root задает домашнюю директорию виртуальному пользователю.

    Создаем файл с виртуальными пользователями со следующим содержимым:

    ftp1
    passwd1
    ftp2
    passwd2

    * где ftp1 и ftp2 — логины; passwd1 и passwd2 — пароли.

    Сразу генерируем из файла базу:

    db_load -T -t hash -f /etc/vsftpd/virtual_users /etc/vsftpd/virtual_users.db

    Необходимо убедиться, что для пользователей есть соответствующие домашние директории:

    И также у системной учетной записи есть соответствующие права:

    chown -R :ftp /home/ftp

    systemctl restart vsftpd

    Хранение пользователей в базе данных

    В качестве базы данных можно использовать MySQL или MariaDB. В данном примере будет использоваться последняя.

    Устанавливаем СУБД следующей командой:

    yum install mariadb mariadb-server

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

    systemctl enable mariadb

    systemctl start mariadb

    Задаем пароль для пользователя root:

    mysqladmin -u root password

    Запускаем командную оболочку mariadb:

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

    > CREATE DATABASE vsftpd;

    > GRANT SELECT ON vsftpd.* TO ‘vsftpd’@’localhost’ IDENTIFIED BY ‘passwordftp’;

    * где vsftpd.* разрешает доступ на все таблицы базы vsftpd; ‘vsftpd’@’localhost’ — учетная запись, у которой есть право подключаться только с локального сервера; passwordftp — пароль для подключения.

    Подключаемся к созданной базе и создаем таблицу:

    > CREATE TABLE `users` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `username` VARCHAR( 30 ) NOT NULL ,
    `password` VARCHAR( 50 ) NOT NULL ,
    UNIQUE (`username`)
    ) ENGINE = MYISAM ;

    Теперь добавим пользователя:

    > INSERT INTO users (username, password) VALUES(‘ftpm1’, md5(‘password’));

    * где ftpm1 — логин, password — пароль.

    Выходим из оболочки mariadb:

    Устанавливаем модуль pam_mysql:

    rpm -Uvh ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/20/Everything/x86_64/os/Packages/p/pam_mysql-0.7-0.16.rc1.fc20.x86_64.rpm

    Сохраняем копию pam файла:

    mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.back

    Создаем новый и приводим его к следующему виду:

    session optional pam_keyinit.so force revoke
    auth required pam_mysql.so user=vsftpd passwd=passwordftp host=localhost db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=3
    account required pam_mysql.so user=vsftpd passwd=passwordftp host=localhost db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=3

    * где user=vsftpd passwd=passwordftp — логин и пароль для подключения к базе данных; db=vsftpd table=users — имя созданной базы данных и таблицы с пользователями; usercolumn=username passwdcolumn=password — название полей, из которых извлекаем логины и пароли для FTP-пользователей.

    Настройка завешена, пробуем подключиться.

    Возможные проблемы

    Ошибка GnuTLS -15: An unexpected TLS packet was received

    Ошибка возникает в том случае, когда у учетной записи, от которой идет подключения есть права на запись в корневую домашнюю директорию, а также используется безопасное соединение через TLS. В vsFTPd, по умолчанию, это приводит к ошибке.

    Для решения проблемы воспользуйтесь любым из способов:

    1. Убираем права на запись для корневой директории, например: chmod a-w /var/www
    2. В конфигурационном файле vsftpd добавляем следующую строку:
      allow_writeable_chroot=YES

    Если это не помогло, отключите шифрование, закомментировав строку ssl_enable=YES. После этого, при подключении будут появляться более информативные сообщения.

    500 OOPS: vsftpd: refusing to run with writable root inside chroot()

    Ошибка возникает в том случае, когда у учетной записи, от которой идет подключения есть права на запись в корневую домашнюю директорию. В vsFTPd, по умолчанию, это приводит к ошибке.

    Для решения проблемы воспользуйтесь любым из способов:

    1. Убираем права на запись для корневой директории, например: chmod a-w /var/www
    2. В конфигурационном файле vsftpd добавляем следующую строку:
      allow_writeable_chroot=YES

    500 OOPS: cannot change directory:/.

    Не существует директории или нет прав на чтение.

    Проверьте правильность настроек и то, что директория, действительно существует.

    SFTP как альтернатива FTP

    Если необходимо разово перенести на сервер данные, можно обойтись протоколом SSH File Transfer Protocol или SFTP. Все, что для этого нужно — доступ по SSH и программа клиент, например, WinSCP.

    FTP-клиент на CentOS

    Для более удобной проверки настроек можно установить FTP-клиент прямо на сервер и с его помощью выполнять подключения.

    Для этого выполняем установку клиента:

    yum install ftp

    И подключаемся к нашему серверу командой:

    Вводим логин и пароль, которые будут запрошены. После подключения мы увидим следующее:

    Trying ::1.
    Connected to localhost (::1).
    220 (vsFTPd 3.0.2)
    Name (localhost:root): ftpm1
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp>

    Для теста можно загрузить файл на сервер FTP:

    * сам файл должен быть в каталоге, в котором мы были перед подключение к серверу FTP.

    Если мы получим ошибку 500 active mode is disabled, use passive mode instead, просто переключаемся в пассивный режим:

    Источник

    Читайте также:  Скрывающаяся панель для windows
Оцените статью