Russian English German Ukrainian

Компьютерная помощь

(066) 72-00-654     (098) 44-74-068

г. Днепр

ж/м Левобережный-3

FTP-сервер: VsFTPd

 

   В качестве FTP-сервера я выбрал vsftpd. Разработчик позиционирует его как very security, т. е. очень безопасный. Безопасность лишней никогда не бывает.

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

Vsftpd есть в репозиториях Ubuntu поэтому поставить его проще простого, в консоли набираем:

sudo apt-get install vsftpd

Настройки vsftpd сервера находятся в файле /etc/vsftpd.conf Первым делом сделаем резервную копию:

sudo cp /etc/vsftpd.conf/  etc/vsftpd.conf_original

А потом очистим содержимое файла

cat /dev/null > /etc/vsftpd.conf

И откроем его для редактирования

sudo nano /etc/vsftpd.conf

   В моем случае сервер будет работать следующим образом. Для анонимных пользователей разрешен доступ на скачивание из папки /home/ftp. Эта папка является домашней для пользователя ftp  (он же anonymous). Любое изменение файлов, включая загрузку, запрещено. Подключаться анонимусы будут без пароля.

   Анонимный доступ я открыл для обмена файлами с друзьями. А для себя сделал следующие настройки. На сервере есть локальные пользователи. Отрываем для них доступ с полными правами в определенную папку, т. е. файлы и папки можно не только скачивать, но и загружать, переименовывать, удалять и т. д.

   Настройки самого сервера опишу в примере своего конфиг файла. Файл настроек vsftpd сервера имеет следующую структуру: опция=параметр. Параметр может быть значением YES или NO, числом, строковым значением. Строки начинающиеся с символа # являются комментариями и на настройки не влияют.

Пример настройки:

#vsftpd будет загружаться в автономном режиме и сам позаботится о прослушивании и перехвате входящих соединений. inetd использоваться не будет
listen=YES
#работать в фоновом режиме
background=YES
#если на сервере несколько сетевых интерфейсов, можно прямо прописать какой из них прослушивать
listen_address=192.168.1.100
#максимальное количество подключений
max_clients=20
#максимальное количество подключений с одного ip
max_per_ip=10
#
#разрешить доступ анонимным пользователям
anonymous_enable=YES
#папка анонимусов
anon_root=/home/ftp
#не спрашивать пароль
no_anon_password=YES
#
#разрешить доступ локальным пользователям
local_enable=YES
#папка локальных пользователей
local_root=/media/files
#
#включить команду "async ABOR" для "плохих" клиентов
async_abor_enable=YES
#разрешить изменение файлов
write_enable=YES
#
#скачивать и загружать данные в режиме ASCII
#ascii_download_enable=YES
#ascii_upload_enable=YES
#
#вся пользовательская и груповая информация в списке директорий, выводится как "ftp"
hide_ids=YES
#детальный отчет о скачиваниях и загрузках (пишется в /var/log/vsftpd.log)
xferlog_enable=YES
#активируем 20-й порт
connect_from_port_20=YES
#приветствие при подключении
ftpd_banner=Welcome to home FTP server.
#пустая папка "для безопасности"
secure_chroot_dir=/var/run/vsftpd/empty
#имя сервиса PAM, который будет использоваться vsftp
pam_service_name=passwd

Так выглядит мой файл конфигурации vsftpd сервера.

Запускаем ftp сервер

sudo vsftpd

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

Например:

500 OOPS: config file not owned by correct user – измените владельца файлов конфигураций пользователей на roor:root

500 OOPS: vsftpd: refusing to run with writable anonymous root – изменить права каталога указаного в anon_root на 555

425 Security: bad IP connecting – добавить опцию pasv_promiscuous=YES, хотя добавление этой опции является нежелательным.

Подключаемся:

user@user-pc:~$ ftp 192.168.1.100
Connected to 192.168.1.100.
220 Welcome to user`s FTP server.
Name (192.168.1.100:user): ftp
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>


FTP-сервер за 15 минут

   Итак появилась очередная задача, надо было сделать корпоративный ftp сервер на базе Ubuntu. Поскольку клиенты и разработчики используют один и тот же сервер, необходимо сделать так, чтобы к разрабатываемым проектам доступ имели все разработчики, Однако для каждого клиента должен быть свой аккаунт доступ к которому должен быть только у него. Покопавшись в сети за основу я выбрал ftp сервер vsftpd. По независимым тестам данный сервер показывает отличные результаты в производительности и безопасности, да и как выяснилось при очень богатом функционале настраивать его совершенно не сложно.

   Принципиально существует несколько подходов к установке и настройке ftp серверов:

- Настройка ftp сервера и связка его с MySQL
- Настройка ftp сервера c виртуальными учетными записями
- Настройка ftp сервера и привязка к локальным пользователям

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

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

   Третий вариант пожалуй самый подходящий. Linux имеет очень гибкую систему управления пользователями, а также разграничения прав, дополнительных пакетов и технологий нам не потребуется, только сам vsftpd и локальные пользователи, поэтому именно на этом варианте мы и остановимся. Теперь перейдем непосредственно к практике…
Установка и настройка vsftpd

   Vsftpd есть в репозиториях Ubuntu поэтому поставить его проще простого, в консоли набираем:

sudo apt-get install vsftpd

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

/etc/vsftpd.conf.

   Особенности конфига: запрещен анонимный доступ, назначен стандартный порт для прослушивания, разрешены локальные пользователи, umask назначен 002 (это значит что все залитые по фтп файлы будут иметь права 664), разрешено изменение прав доступа к файлам по фтп включая рекурсию, пользователям запрещен выход из домашней папки.

   Ну все, настройка ftp сервера на этом заканчивается, быстро правда? :) Теперь займемся пользователями.

   Настройка пользователей. Далее лезем в /etc/shells:

sudo gedit /etc/shells

   В конец добавляем строку:

/bin/false

   Сохраняем, закрываем.

   Теперь надо создать 2 группы, одна группа (web-users) будет для пользователей, другая (web-developers) для разработчиков

sudo addgroup web-users && sudo addgroup web-developers

   Окей, для полноты картины надо бы добавить сервер apache в каждую из созданных групп (по умолчанию apache работает под пользователем www-user):

sudo useradd www-user web-users && sudo useradd www-user web-developers

   Добавили. Теперь можно заняться самими пользователями. Создадим папки для будущих пользователей. Для удобства в папке /home я создаю папки для каждой из групп:

sudo mkdir /home/web-developers && sudo mkdir /home/web-users

   Теперь предположим что логины наших пользователей – user1, dev1, dev2 создадим папки для пользователей:

sudo mkdir /home/web-users/user1
sudo mkdir /home/web-developers/dev1
sudo mkdir /home/web-developers/dev2

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

sudo useradd user1 -g web-users -p наш-пароль -d /home/web-users/user1 -s /bin/false
sudo useradd dev1 -g web-developers -p наш-пароль -d /home/web-developers/dev1 -s /bin/false
sudo useradd dev2 -g web-developers -p наш-пароль -d /home/web-developers/dev2 -s /bin/false

   Замечание: не делайте пароль состоящий только из цифр он не будет работать (если все таки сделали, переназначьте его через команду passwd имя пользователя).
   Такая конструкция создаст пользователей которые не смогут авторизоваться в системе, однако смогут использовать ftp сервер как положено.

   Теперь назначим пользователей владельцами папок созданных ранее:

sudo chown user1:web-users /home/web-users/user1
sudo chown dev1:web-developers /home/web-developers/dev1
sudo chown dev2:web-developers /home/web-developers/dev2

   Предположим, что есть 2 сайта которые лежат в /var/www – site1.com и site2.com первый принадлежит пользователю, а второй находится на разработке у программеров. Чтобы раздать эти сайты необходимо промонтировать их в домашние директории пользователей. Для этого необходимо сначала создать соответствующие папки в домашних папках пользователей, а потом уже примонтировать туда файлы наших сайтов.

sudo mkdir /home/web-users/user1/site1.com
sudo chown user1:web-users /home/web-users/user1/site1.com
sudo mkdir /home/web-developers/dev1/site2.com
sudo chown dev1:web-developers /home/web-developers/dev1/site2.com
sudo mkdir /home/web-developers/dev2/site2.com
sudo chown dev2:web-developers /home/web-developers/dev2/site2.com

   Теперь добавляем точку монтирования для каждого из пользователей, для этого правим fstab:

sudo gedit /etc/fstab

   Добавляем нужные пути:

/var/www/site1.com /home/web-users/user1/site1.com none bind 0 0
/var/www/site2.com /home/web-developers/dev1/site2.com none bind 0 0
/var/www/site2.com /home/web-developers/dev2/site2.com none bind 0 0

   Все, перезагружаемся и радуемся результату.

   Выводы: Мы получили довольно быстрый и безопасный ftp сервер. При этом к одному из сайтов назначен общий доступ для группы разработчиков. Куски кода в данной статье выглядят довольно страшно, но это того стоит, ведь мы разобрали пример не для одного, а сразу для 3х пользователей и 2х групп. Дерзайте и все у вас обязательно получится.

  • Сборка ПК для дома и офиса

  • Бесплатная диагностика

  • Гарантия

  • Самые низкие цены