- Установка и настройка vsFTPd на Ubuntu
- Установка и настройка
- Добавление пользователя
- Проверка
- Настройка SSL/TLS
- Виртуальные пользователи
- Как настроить vsftpd для каталога пользователя на Ubuntu 16.04
- Вступление
- Предпосылки
- Шаг 1 — Установка vsftpd
- Шаг 2 — Открытие брандмауэра
- Шаг 3 — Подготовка каталога пользователей
- Шаг 4 — Настройка доступа к FTP
- Шаг 5 — Тестирование FTP-доступа
- Шаг 6 — Обеспечение транзакций
- Шаг 7 — Тестирование TLS с помощью FileZilla
- Шаг 8 — Отключение доступа к оболочке (необязательно)
- Заключение
Установка и настройка 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:
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 для хранения фактических файлов.
Создайте ftp папку, установите ее право собственности и обязательно удалите права на запись с помощью следующих команд:
- sudo mkdir /home/ sammy /ftp
- sudo chown nobody:nogroup /home/ sammy /ftp
- sudo chmod a-w /home/ sammy /ftp
Давайте проверим разрешения:
Затем мы создадим каталог, в котором файлы могут быть загружены и назначены права собственности пользователю:
- sudo mkdir /home/ sammy /ftp/files
- 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
Вам будет предложено предоставить адресную информацию для вашего сертификата. Запишите свою информацию по следующим вопросам:
Более подробную информацию о флажках сертификата см. В разделе 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.
Источник