Linux vsftpd настройка каталога

Установка и настройка vsFTPd на Ubuntu

vsFTPd и proFTPd — одни из самых простых способов поднять сервер FTP на Linux. В данной инструкции пойдет речь о vsFTPd и Ubuntu (на примере версий 14 и 16).

Установка и настройка

Обновляем списки портов в репозиториях:

apt-get install vsftpd

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

И снимаем комментарий со следующих строк:

* write_enable — разрешить копировать файлы на сервер; chroot_local_user — использовать для пользователей изолированное окружение.

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

allow_writeable_chroot=YES
pasv_enable=YES
pasv_max_port=60000
pasv_min_port=65535

* где allow_writeable_chroot разрешаем использовать домашние каталоги с правом на запись; pasv_enable включает пассивный режим работы FTP-сервера; pasv_max_port и pasv_min_port определяют диапазон портов для пассивного режима.

Если используется брандмауэр, необходимо добавить правила и разрешить следующие порты:

  • 20 — основной порт FTP для передачи.
  • 21 — для активного режима. Используется для передачи команд.
  • 60000-65535 — диапазон динамических портов, который нами был определен в конфигурационном файле. Используется для пассивного режима.

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

systemctl enable vsftpd

systemctl restart vsftpd

Если в нашей системе используется брандмауэр, открываем порты:

iptables -I INPUT -p tcp —match multiport —dports 20,21,60000:65535 -j ACCEPT

Для сохранения правил можно использовать утилиту:

apt-get install iptables-persistent

Добавление пользователя

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

useradd ftpuser -d /ftp -s /bin/false -m

* где ftpuser — имя учетной записи; /ftp — домашний каталог (в него будем попадать при подключении); /bin/false — запрет пользователю на локальный вход в систему.

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

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

* мы добавили /bin/false в список разрешенных оболочек. В противном случае, может вернуться ошибка 530 Login incorrect.

Проверка

Для проверки подключения можно воспользоваться FTP-клиентом на другом компьютере (например, FileZilla или Total Commander).

Также можно установить FTP-клиент на сервер:

apt-get install ftp

И для подключения используем следующую команду:

Система запросит логин и пароль.

Настройка SSL/TLS

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

Для данной цели можно использовать самоподписанный сертификат. Чтобы его создать, вводим команду:

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

* в данном примере мы создаем самоподписанный сертификат на 4 года для URL ftp.dmosk.local или ftp. Открытый ключ будет сохранен в файле /etc/ssl/certs/vsftpd.pem, закрытый — /etc/ssl/private/vsftpd.key. При желании, мы можем использовать купленный сертификат или получить его бесплатно у Let’s Encrypt.

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

rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES

* где ssl_enable разрешает использование шифрования; rsa_cert_file — путь к открытому ключу; rsa_private_key_file — путь к закрытому ключу.

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

allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH

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

systemctl restart vsftpd

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

Устанавливаем pam-модуль, позволяющий аутентифицировать пользователей с помощью passwd-like файлов:

apt install libpam-pwdfile

Открываем конфигурационный файл vsftpd и добавляем следующее:

user_config_dir=/etc/vsftpd_virtuser_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

  • user_config_dir — каталог для хранения настроек пользователя.
  • guest_enable — разрешаем гостевой вход.
  • virtual_use_local_privs — виртуальные пользователи используют привилегии, как локальные, а не анонимные.
  • pam_service_name — имя pam-сервиса.
  • nopriv_user — под каким пользователем работает сервер, когда ему не нужны привилегии.
  • guest_username — имя гостевого пользователя.

Для возможности использовать утилиту htpasswd ставим следующий пакет:

apt install apache2-utils

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

htpasswd -cd /etc/vsftpd/ftpd.passwd virt1

htpasswd -d /etc/vsftpd/ftpd.passwd virt2

* обратите внимание, опция -c команды htpasswd используется только при создании файла (при первом вводе команды). Мы создаем два пользователя — virt1 и virt2.

Архивируем имеющийся pam-сервис для vsftpd:

Читайте также:  Сколько будет скачиваться windows 10

mv /etc/pam.d/vsftpd /etc/pam.d/back_vsftpd

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

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

В самой системе создаем пользователя, которого используем как гостевого:

useradd vsftpd -d /home/vsftpd -g nogroup -m -s /bin/false

* с домашней директорией /home/vsftpd, основной группой nogroup и без возможности входа в систему (-s /bin/false).

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

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

* local_root — домашняя директория для FTP пользователя virt1.

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

chown vsftpd:nogroup /var/www/virt1

systemctl restart vsftpd || service vsftpd restart

Источник

Как настроить vsftpd для каталога пользователя на Ubuntu 16.04

Вступление

FTP, сокращенный для протокола передачи файлов, является сетевым протоколом, который когда-то широко использовался для перемещения файлов между клиентом и сервером. С тех пор он был заменен более быстрыми, более безопасными и более удобными способами доставки файлов. Многие случайные пользователи Интернета ожидают загрузить непосредственно с веб — браузера с https , а пользователи командной строки, более вероятно, использовать безопасные протоколы, как scp и SFTP .

FTP по-прежнему используется для поддержки устаревших приложений и рабочих процессов с особыми потребностями. Если у вас есть выбор того, какой протокол использовать, подумайте над более современными вариантами. Однако, когда вам действительно нужен FTP, vsftpd — отличный выбор. Оптимизированный для обеспечения безопасности, производительности и стабильности, vsftpd предлагает надежную защиту от многих проблем безопасности, обнаруженных на других FTP-серверах, и по умолчанию используется для многих дистрибутивов Linux.

В этом уроке мы покажем вам, как настроить vsftpd, чтобы пользователь мог загружать файлы в свой домашний каталог, используя FTP с учетными данными, защищенными SSL / TLS.

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Сервер Ubuntu 16.04 с пользователем без sudo полномочий root с привилегиями : вы можете узнать больше о том, как настроить пользователя с этими привилегиями в нашей начальной настройке сервера с помощью руководства Ubuntu 16.04 .

После того, как у вас есть сервер Ubuntu, вы готовы начать.

Шаг 1 — Установка vsftpd

Мы начнем с обновления списка пакетов и установки демона vsftpd:

  • sudo apt-get update
  • sudo apt-get install vsftpd

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

  • sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

С резервной копией конфигурации на месте мы готовы настроить брандмауэр.

Шаг 2 — Открытие брандмауэра

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

В этом случае допускается только SSH через:

To Action From
— —— —-
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)

У вас могут быть другие правила или вообще нет правил брандмауэра. Поскольку ssh в этом случае разрешен только трафик, нам нужно будет добавить правила для трафика FTP.

Нам нужно будет открыть порты 20 и 21 для FTP, порт 990 позже, когда мы включим TLS, и порты 40000-50000 для диапазона пассивных портов, которые мы планируем установить в файле конфигурации:

  • sudo ufw allow 20/tcp
  • sudo ufw allow 21/tcp
  • sudo ufw allow 990/tcp
  • sudo ufw allow 40000:50000/tcp
  • sudo ufw status

Теперь наши правила брандмауэра выглядят так:

При vsftpd установленном и открытых портах мы готовы перейти к следующему шагу.

Шаг 3 — Подготовка каталога пользователей

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

Во-первых, мы добавим тестового пользователя:

При необходимости запросите пароль и не нажимайте «ENTER» в других приглашениях.

FTP, как правило, более безопасен, когда пользователи ограничены определенным каталогом. vsftpd выполняет это с помощью chroot тюрем. Когда chroot это разрешено для локальных пользователей, они по умолчанию ограничиваются их домашним каталогом. Однако из-за способа защиты vsftpd каталога он не должен быть доступен для записи пользователем. Это нормально для нового пользователя, который должен подключаться только через FTP, но существующий пользователь может потребоваться записать в свою домашнюю папку, если они также получают доступ к оболочке.

В этом примере вместо удаления привилегий записи из домашнего каталога мы создадим ftp каталог, который будет служить каталогом, chroot доступным для записи, files для хранения фактических файлов.

Читайте также:  Kyocera 2035 драйвер linux

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

  • sudo mkdir /home/ sammy /ftp
  • sudo chown nobody:nogroup /home/ sammy /ftp
  • sudo chmod a-w /home/ sammy /ftp

Давайте проверим разрешения:

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

  1. sudo mkdir /home/ sammy /ftp/files
  2. sudo chown sammy : sammy /home/ sammy /ftp/files

Проверка разрешений в files каталоге должна возвращать следующее:

Наконец, мы добавим test.txt файл, который будет использоваться при тестировании позже:

  • echo «vsftpd test file» | sudo tee /home/ sammy /ftp/files/test.txt

Теперь, когда мы обеспечили ftp каталог и разрешили пользователю доступ к files каталогу, мы обратим наше внимание на конфигурацию.

Шаг 4 — Настройка доступа к FTP

Мы планируем разрешить одному пользователю с локальной учетной записью оболочки подключаться к FTP. Два ключевых параметра для этого уже установлены vsftpd.conf . Начните с открытия файла конфигурации, чтобы убедиться, что настройки в вашей конфигурации соответствуют приведенным ниже:

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

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

Мы добавим user_sub_token , чтобы вставить имя пользователя в наш local_root directory путь, чтобы наша конфигурация работала для этого пользователя и любых будущих пользователей, которые могут быть добавлены.

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

Примечание. Мы предварительно открыли порты, которые мы установили здесь для диапазона пассивных портов. Если вы измените значения, обязательно обновите настройки брандмауэра.

Поскольку мы планируем только разрешить FTP-доступ в каждом конкретном случае, мы настроим конфигурацию, чтобы доступ предоставлялся пользователю только тогда, когда они явно добавлены в список, а не по умолчанию:

userlist_deny переключает логику. Когда он установлен на «YES», пользователям в списке запрещается доступ к FTP. Если для него установлено значение «НЕТ», доступ разрешен только пользователям в списке. Когда вы закончите внесение изменений, сохраните и выйдите из файла.

Наконец, мы создадим и добавим нашего пользователя в файл. Мы будем использовать -a флаг для добавления в файл:

  • echo « sammy » | sudo tee -a /etc/vsftpd.userlist

Дважды проверьте, что он был добавлен так, как вы ожидали:

Перезагрузите демон, чтобы загрузить изменения конфигурации:

  • sudo systemctl restart vsftpd

Теперь мы готовы к тестированию

Шаг 5 — Тестирование FTP-доступа

Мы настроили сервер, чтобы позволить только пользователю sammy подключаться через FTP. Давайте позаботимся об этом.

Анонимные пользователи не должны подключаться : мы отключили анонимный доступ. Здесь мы проверим это, пытаясь подключиться анонимно. Если мы сделали это правильно, анонимным пользователям должно быть отказано в разрешении:

Пользователи, которым sammy не удалось подключиться, не должны подключаться : далее мы попробуем подключиться как наш sudo пользователь. Им также должен быть отказано в доступе, и это должно произойти, прежде чем им будет разрешено ввести свой пароль.

sammy должны иметь возможность подключаться, а также читать и записывать файлы : здесь мы будем следить за тем, чтобы наш назначенный пользователь мог подключиться:

Мы перейдем в files каталог, а затем воспользуемся get командой для переноса тестового файла, который мы создали ранее, на наш локальный компьютер:

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

  • put test.txt upload.txtOutput

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

Шаг 6 — Обеспечение транзакций

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

Мы будем использовать openssl для создания нового сертификата и использования -days флага, чтобы сделать его действительным в течение одного года. В этой же команде мы добавим приватный 2048-битный ключ RSA. Затем, установив оба значения -keyout и -out флаги в одно и то же значение, закрытый ключ и сертификат будут находиться в одном файле.

Мы сделаем это с помощью следующей команды:

  • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Вам будет предложено предоставить адресную информацию для вашего сертификата. Запишите свою информацию по следующим вопросам:

Читайте также:  Дублирование экрана через hdmi windows 10

Более подробную информацию о флажках сертификата см. В разделе OpenSSL Essentials: работа с сертификатами SSL, закрытыми ключами и CSR

Создав сертификаты, vsftpd снова откройте файл конфигурации:

В нижней части файла вы должны начать две строки rsa_ . Прокомментируйте их, чтобы они выглядели так:

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

После этого мы будем принудительно использовать SSL, что предотвратит подключение клиентов к TLS. Это необходимо для обеспечения шифрования всего трафика, но может заставить вашего пользователя FTP изменять клиент. Изменить ssl_enable на YES :

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

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

Наконец, мы добавим еще два варианта. Во-первых, мы не будем требовать повторного использования SSL, так как это может сломать многие FTP-клиенты. Нам потребуются «высокие» шифровальные шифры, которые в настоящее время означают длину ключа, равную или превышающую 128 бит:

Когда все будет готово, сохраните и закройте файл.

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

  • sudo systemctl restart vsftpd

На этом этапе мы больше не сможем связаться с небезопасным клиентом командной строки. Если мы попытаемся, мы увидим что-то вроде:

  • ftp -p 203.0.113.0
  • Connected to 203.0.113.0.
  • 220 (vsFTPd 3.0.3)
  • Name (203.0.113.0:default): sammy
  • 530 Non-anonymous sessions must use encryption.
  • ftp: Login failed.
  • 421 Service not available, remote server has closed connection
  • ftp>

Затем мы проверим, что мы можем подключиться с помощью клиента, который поддерживает TLS.

Шаг 7 — Тестирование TLS с помощью FileZilla

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

Когда вы сначала открываете FileZilla, найдите значок Менеджера сайта чуть ниже слова «Файл», самый левый значок в верхней строке. Нажмите на нее:

Откроется новое окно. Нажмите кнопку «Новый сайт» в нижнем правом углу:


В разделе «Мои сайты» появится новый значок со словами «Новый сайт». Вы можете назвать его сейчас или вернуться позже и использовать кнопку «Переименовать».

Вы должны заполнить поле «Хост» именем или IP-адресом. В раскрывающемся меню «Шифрование» выберите «Требовать явный FTP через TLS».

В поле «Тип входа» выберите «Спросить пароль». Заполните пользователя FTP, который вы создали в поле «Пользователь»:


Нажмите «Подключиться» в нижней части интерфейса. Вам будет предложено ввести пароль пользователя:


Нажмите «ОК» для подключения. Теперь вы должны подключиться к вашему серверу с помощью шифрования TLS / SSL.


Когда вы приняли сертификат, дважды щелкните files папку и перетащите файл upload.txt влево, чтобы подтвердить, что вы можете загружать файлы.


Когда вы это сделаете, щелкните правой кнопкой мыши локальную копию, переименуйте ее в upload-tls.txt` и перетащите обратно на сервер, чтобы подтвердить, что вы можете загружать файлы.


Теперь вы подтвердили, что можете безопасно и успешно передавать файлы с включенным SSL / TLS.

Шаг 8 — Отключение доступа к оболочке (необязательно)

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

Сначала откройте файл, который вызывается ftponly в каталоге bin:

Мы добавим сообщение, сообщающее пользователю, почему они не могут войти в систему. Вставьте следующее:

Измените разрешения, чтобы сделать исполняемый файл:

Откройте список допустимых оболочек:

Обновите оболочку пользователя с помощью следующей команды:

  • sudo usermod sammy -s /bin/ftponly

Теперь попробуйте войти в систему как sammy:

Вы должны увидеть что-то вроде:

Это подтверждает, что пользователь больше не может работать ssh на сервере и ограничен только доступом к FTP.

Заключение

В этом уроке мы рассмотрели настройку FTP для пользователей с локальной учетной записью. Если вам нужен внешний источник аутентификации, вам может понадобиться посмотреть на поддержку vsftpd для виртуальных пользователей. Это предлагает богатый набор опций с использованием PAM, подключаемых модулей аутентификации и является хорошим выбором, если вы управляете пользователями в другой системе, такой как LDAP или Kerberos.

Источник

Оцените статью