Простий ftp-сервер на базі ubuntu (vsftpd) - записки it фахівця

Час від часу у кожного системного адміністратора виникає потреба в FTP-сервері, найчастіше це пов'язано з необхідністю забезпечити обмін інформацією в автоматичному режимі між додатками, наприклад, при автообмене розподіленої інформаційної бази 1С, або для доступу до файлів на веб-сервері. Сьогодні ми розповімо, як менше ніж за півгодини створити такий сервер на платформі Ubuntu.

Але спочатку трохи теорії. Протокол FTP (File Transfer Protocol) призначений, як випливає з назви, для передачі файлів і з'явився в 1971 році, але не дивлячись на свій похилий вік продовжує широко використовуватися до сих пір. Хоча сьогодні його використання носить частіше технічний характер, для доступу кінцевих користувачів до даних зазвичай використовують браузер і протокол HTTP. До переваг FTP можна віднести можливість докачки файлу при обриві зв'язку і можливість однаково легко як зчитувати файли, так і записувати їх. Але є і недоліки, найсерйозніший - низька безпека, тому цьому питанню слід приділити найпильнішу увагу.

FTP, як і PPTP, використовує різні сполуки для передачі команд і передачі даних. При ініціації з'єднання клієнт передає керуючі команди на порт 21 сервера, який в свою чергу встановлює вихідні повідомлення для передачі даних на 20 порту, порт з боку клієнта визначається в результаті узгодження. Однак при знаходженні клієнта за NAT з'єднання подібним чином встановити не вдасться, тому був розроблений додатковий режим FTP passive mode (пасивний режим), коли з'єднання для передачі даних встановлює не сервер, а клієнт, однак з параметрами, зазначеними сервером. Ці моменти слід враховувати при форвардного FTP і при налаштуванні мережевого фільтра.

Для нашого сервера ми будемо використовувати vsftpd - простий, швидкий і безпечний FTP сервер. Так як він буде обслуговувати як зовнішню, так і внутрішню мережі, то має сенс додати цю роль нашому роутера. Установка сервера гранично проста:

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

Дана опція має взаємовиключну запис, яку слід привести до вигляду:

Дозволимо вхід тільки локальним користувачам:

Дозволимо користувачам записувати файли і вкажемо сервера автоматично виставляти потрібні права (755 на папки і 644 на файли):

Якщо потрібно встановити інший набір прав: 775 і 664, то umask має дорівнювати 002.

За замовчуванням сервер використовує час GMT, щоб файлів встановлювалося час вашого часового поясу, використовуйте опцію:

Включимо лог завантажуються і скачуваних файлів:

Дозволимо сервера встановлювати з'єднання для передачі даних на порт 20 (активний режим):

Наступні опції задають місце і формат зберігання логів:

Задамо таймаут сесії:

Також з метою безпеки ізолюємо користувача в його домашньому каталозі і відразу вирішимо запис в його корінь:

Для коррекной роботи з текстовими даними можна включити підтримку ASCII, це дозволить при передачі текстового файлу з Windows системи в UNIX (Linux) коректно замінити символи розриву рядків з CR + LF на LF для коректного відображення вмісту і виконати зворотне перетворення при передачі його назад.

Можна включити тільки одну опцію, для закачування або скачування. Зверніть увагу, що при передачі бінарного файлу в режимі ASCII останній може бути пошкоджений.

Досить цікава опція:

Всі інші опції залишаємо за замовчуванням, хоча можете відредагувати вітання сервера, написавши там все що вам подобається:

В кінці конфігураційного файлу задамо налаштування для пасивного режиму, рекомендується явно задати порти, щоб була можливість вказати їх при форвардного, якщо сервер стоїть за NAT або в правилах брандмауер:

Перезапускаємо сервер (це потрібно робити щоразу після внесення змін в конфігурацію):

і пробуємо підключитися будь-яким FTP-клієнтом використовуючи облікові дані існуючого користувача. Ми повинні потрапити в його домашню директорію і бути ізольовані в ній.

У разі появи помилки, пов'язаної з некоректною роботою vsftpd і системи безпеки seccomp:

додайте в файл недокументовану опцію:

Однак пам'ятайте, що FTP - небезпечний протокол, тому пускати на сервер будь-якого локального користувача, як це зроблено зараз, не найкращий варіант. Щоб уникнути такої ситуації vsftpd має вбудований механізм контролю користувачів. Додамо в конфігураційний файл опцію:

і створимо файл списку користувачів:

За замовчуванням vsftpd забороняє доступ до сервера користувачам, зазначеним в даному списку ще до введення пароля, тобто реалізує принцип дозволено всім, кому не заборонено. Але набагато краще буде реалізувати інший підхід: заборонено всім, кому не дозволено. Тобто дозволяти доступ тільки зазначеним користувачам. Для цього додамо опцію:

Тепер доступ до FTP-сервера матимуть тільки явно зазначені користувачі, їх слід вказувати в vsftpd.user_list по одному в рядок, наприклад:

Якщо не вказано інше, то підключившись по FTP користувачі потрапляють в свій домашній каталог. Це не завжди зручно, часто потрібно перенаправляти їх в іншу директорію. Якщо це загальна для всіх папка, скажімо / var / ftp, то можна задати опцію:

Яка перенаправляє всіх користувачів в зазначений каталог і ізолює їх там.

Це найпростіша ситуація, реальні завдання зазвичай складніше, припустимо нам треба встановити користувачеві Іванову як кореневої директорії /var/www/example1.com. а Петрову /var/www/example2.com. щоб кожен з них працював зі своєю папкою. Для цих цілей можна використовувати ще одну можливість vsftpd - призначені для користувача настройки, які перекривають настройки основного конфігураційного файлу.

Для цього додамо опцію:

Потім створимо саму директорію

Щоб задати користувачеві власні настройки в даній директорії слід створити файл з ім'ям пользовтаеля і додати в нього необхідні опції. Зміни застосовуються без перезапуску FTP-сервера під час наступного підключення клієнта.

Створимо файл з настройками для Іванова:

і внесемо в нього опцію:

При наступному підключенні коренева директорія користувача зміниться на зазначену. Також в цьому файлі ми можемо задавати будь-які персональні опції, наприклад, інший umask або права на доступ до файлів. Однак ми не можемо використовувати тут глобальні настройки: опції підключення, логгірованія, аутентифікації, вони будуть просто ігноруватися.

Якщо вам потрібно приховати реальних власників файлів і папок, то можна використовувати опцію:

У цьому випадку замість реальних власників і груп буде вказано ftp: ftp, це може бути корисним у разі публічного сервера або наявності в списку користувачів сторонніх осіб, яким ви не хочете розкривати реальні імена користувачів вашої системи.

Як бачимо, ми дійсно створили робочий FTP-сервер менш ніж за півгодини.

Додаткові матеріали:

Схожі статті