понедельник, 9 марта 2015 г.

vsftpd - установка и настройка FTP-сервера под Linux

Решил поставить себе FTP-серевер на домашний компьютер. Удобно скидывать информацию с телефона/планшета через Wi-Fi, используя необходимое ПО, когда это очень нужно. Да и заниматься редактированием html документов, которые параллельно находятся на установленном Apache (кстати, об этом чуть позже сделаю пост) очень удобно через FTP-сервер с абсолютно любого ПК, где бы мне это не пришлось сделать. Поэтому, побегав в интернете, пообщавшись с некоторыми людьми в интернете я решил поставить самый простой но, в тоже время, функциональный FTP-сервер под названием vsftpd.

К сожалению (для кого-то) он не имеет графического интерфейса для управления, поэтому придётся пользоваться терминалом и, собственно, командами.
В интернете просто куча... мануалов по установке и настройке. Но, передо мной стояла задача - установка сервера с тем условием, чтобы "зарегистрированный" пользователь мог подключиться к этому серверу с паролем и иметь собственное место для хранения данных (каталог). Нашёл один неплохой манул по этой ссылке, немного переработал его на "новый" лад.

Перед установкой рекомендую создать каталог /var/www для необходимой нам работы:
  • sudo mkdir /var/www

Установка:


1. Для начала установим сам сервер vsftpd:
  • sudo apt-get install vsftpd
2. Установим СУБД Berkeley DB для управления хранящихся наших подключаемых пользователей:
  • sudo apt-get install db5.1-util
3. Далее создайте каталог (папку) vsftpd под root правами по адресу /etc/ - должно выглядеть так:

/etc/vsftpd

Это можно сделать командой:
  • sudo mkdir /etc/vsftpd
4. Далее - создаём файл в этом каталоге с именем (к примеру) vsftpdusers:
  • sudo touch /etc/vsftpd/vsftpdusers
5. Задаём этому файлу права на чтение/изменение (делать сможет это только root):
  • sudo chmod 0600 /etc/vsftpd/vsftpdusers
6. Ну и собственно редактируем его:
  • sudo nano /etc/vsftpd/vsftpdusers
Вписываем туда придуманного пользователя и пароль. К примеру - создадим пользователя user с паролем password. Пользователь и пароль должны быть написаны на разных строчках, и! обязательный момент! Следующую строку обязательно сделайте пустой, т.к. может произойти ошибка при создании Базы Данных пользователей. Например, в нашем случае будет так:

Первая строка (user) - это пользователь, вторая (password) - это пароль, третья строка просто пустая.
Если будете делать несколько пользователей (т.е. на третей строке пишите логин второго пользователя, на четвёртой строке пишите его пароль, то пустую строку делайте пятую!).

7. Далее создаём каталог для хранения данных, которые будет заливать к нам на сервер наш user. Каталог должен иметь такое же имя, как и наш созданный пользователь.
Я создал этот каталог в домашней папке своего пользователя.
  • sudo mkdir /home/ИМЯ_ЛОКАЛЬНОГО_ПОЛЬЗОВАТЕЛЯ/user
где user - это каталог для хранения данных нашего пользователя user.

8. Далее устанавливаем права доступа для этой папки нашему user'у:
  • sudo chown www-data:www-data /home/ИМЯ_ЛОКАЛЬНОГО_ПОЛЬЗОВАТЕЛЯ/user
От пользователя www-data и группы www-data будет осуществляться работа подключаемых пользователей на нашем сервере (в частности - нашего user'а).

9. После этого создаём Базу Данных, в которую будет входить наш пользователь:
  • sudo db5.1_load -T -t hash -f /etc/vsftpd/vsftpdusers /etc/vsftpd/users.db
Эта база автоматически появится и будет храниться в каталоге /etc/vsftpd/

10. Теперь устанавливаем права, для безопасности. Читать и изменять файл сможет только root:
  • sudo chmod 0600 /etc/vsftpd/users.db
11. Теперь редактируем конфигурационный файл настроек нашего сервера:
  • sudo nano /etc/vsftpd.conf
Добавляем туда строки:

listen=YES
anonymous_enable=NO
local_enable=YES
user_sub_token=$USER
#здесь указываем путь к созданному ранее каталогу ($USER - это каталог user)
local_root=/home/ИМЯ_ЛОКАЛЬНОГО_ПОЛЬЗОВАТЕЛЯ/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=www-data
guest_enable=YES
write_enable=YES
virtual_use_local_privs=YES
allow_writeable_chroot=YES
pasv_enable=Yes
pasv_min_port=32768
pasv_max_port=65535

Так же в этом файле находим строку:

pam_service_name=vsftpd

и меняем её значение:

pam_service_name=vsftpd.virtual

12. Теперь создадим новую службу авторизации пользователей для сервера. Последняя строка (пункт выше) указывает на неё. Для этого создадим файл vsftpd.virtual в каталоге /etc/pam.d/ такой командой:
  • sudo nano /etc/pam.d/vsftpd.virtual
и заполним следующим содержимым:

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

13. После всего проделанного перезапускаем наш сервер:
  • sudo service vsftpd restart
Теперь пробуем подключаться к нашему серверу, например через FileZilla, введя в качестве сервера локальный ip-адрес своего компьютера, имя пользователя user и пароль password. После подключения вы попадёте в корневой каталог:

/home/ИМЯ_ЛОКАЛЬНОГО_ПОЛЬЗОВАТЕЛЯ/user

14. Я столкнулся ещё с такой проблемой: после загрузки файлов нашим user'ом в эту папку, я не мог прочитать/изменить/удалить их от имени своей учётной записи (локального пользователя). Чтобы это было возможным, необходимо локальному пользователю вступить в группу www-data:
  • sudo gpasswd -a ИМЯ_ЛОКАЛЬНОГО_ПОЛЬЗОВАТЕЛЯ www-data


Продолжение следует...