ноября 4 2007 06:25 пп

Установка и настройка VSFTPD + MYSQL (Ubuntu & Debian)

Vsftpd считается одним из самых быстрых и хорошо защищенных FTP серверов под Linux. Обычно он устанавливается и конфигурируется под пользователей зарегистрированных в системе. В этом руководстве предполагается установка vsftpd под виртуальных пользователей, зарегистрированных в базе данных MySQL.
Такое решение позволяет открыть и управлять до тысячи ftp пользователей на одном сервере.
Управлять MySQL базой вы можете с помощью пакета phpMyAdmin.
Он имеет достаточно удобный графический интерфейс, который позволяет не применять коммандную строку.

1 Введение

Использовался дистрибутив Ubuntu 7.10.

Все пакеты взяты из штатных репозитариев.

2 Установка vsftpd, MySQL и phpMyAdmin

Vsftpd собран без поддержки MySQL, по этой причине неоходимо установить пакет libpam-mysql для PAM аутентификацию в MySQL базе данных. таким образом мы должны установить следующие пакеты libpam-mysql совместно с vsftpd, MySQL, и пакет phpMyAdmin:

Код:
sudo aptitude install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

Далее необходимо назначить пароль для пользователя root для управления MySQL (замените слово yourrootsqlpassword на ваш настоящий пароль) :

Код:
mysqladmin -u root password yourrootsqlpassword

проверим все ли получилось?

Код:
netstat -tap | grep mysql

должно написать:

Код:
tcp 0 0 localhost.localdo:mysql *:* LISTEN 2713/mysqld

Это если у вас имя хоста только локальное localhost.localdomain, в противном случае вы увидите что-то типа:

Код:
tcp 0 0 *:mysql *:* LISTEN 2713/mysqld

Для смены пароля вашей базы данных MySQL под ваш hostname, примените следующую комманду:
Код:
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

3 Создаем в терминале суперпользователя MySQL базу данных под vsftpd

Код:
mysql -u root -p
в появившемся окне выполняем следующие команды (т.е. находясь в командной оболочке MySQL создадим базу):
Их можно скопировать выделить и затем вставить, нажав среднюю кновку мыши.

Код:
CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;

Далее таблицу для этой базы:

Код:
USE vsftpd;

Код:
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;
quit;

Запустив в браузере ссылку- http://localhost/phpmyadmin/ (или ваш- например: server1.example.com, или можно вставить IP адрес вашего сервера) вы попадете в утилиту phpmyadmin.
С помощью этой утилиты вы можете создать или изменить эту же базу данных (vsftpd), и тут же просмотреть её.
Позже с помощью неё вы сможете управлять вашим vsftpd сервером.

4 Конфигурируем vsftpd

В начале создаем непривилегированного пользователя vsftpd (с домашней директорией: /home/vsftpd) входящего в группу: nogroup. Домашние директории виртуальных пользователей, в дальнешем будут расположены в этой /home/vsftpd директории (например: /home/vsftpd/user1, /home/vsftpd/user2, и т.д.).

Код:
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Сохраняем оригинальный /etc/vsftpd.conf файл и создаем другой:

Код:
cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
cat /dev/null > /etc/vsftpd.conf
gedit /etc/vsftpd.conf

Вставляем в открывшееся окно следующий текст:

Код:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf

сохраняем созданный файл.
Посмотреть примеры можно по адресу: http://vsftpd.beasts.org/vsftpd_conf.html

Для использования в дальнейшем опций: user_config_dir, создадим вновь специальную директорию:

Код:
mkdir /etc/vsftpd_user_conf
В эту директорию в дальнейшем вы можете класть файлы конфигурации VSFTPD для отдельных пользователей.

Так же должны сконфигурировать PAM для ваших виртуальных FTP пользователей с аутентификацией в MySQL базе данных вместо расположения в /etc/passwd и /etc/shadow. Конфигурационный файл для PAM под vsftpd должен находится в папке /etc/pam.d/vsftpd. Сохраняем оригинальный и создаем новый:

Код:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
cat /dev/null > /etc/pam.d/vsftpd
gedit /etc/pam.d/vsftpd

Вставляем в открывшееся окно следующий текст:

Код:
auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

Сохраняем этот файл.

Помните теперь что вы единственный, кто может восстановить ваш MySQL пароль !

Перезапустим наш vsftpd сервер:

Код:
/etc/init.d/vsftpd restart

5 Создаем первого виртуального пользователя

Заходим опять под root в оболочку MySQL :

Код:
mysql -u root -p

Пишем или копируем команду:

Код:
USE vsftpd;

Создаем пользователяпод именем: testuser и паролем secret:

Код:
INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret')); quit;

Домашняя директория testuser’а будет здесь /home/vsftpd/testuser.
Если она не создалась автоматически, создадим эту директорию вручную в группе: nogroup:

Код:
mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser

Теперь через любой FTP клиент для Linux или Windows, или используя просто браузер, вы можете соединится c вновь созданным сервером, используя имя testuser и пароль secret.

Для создания и администрирования пользователей вашего фтп сервера вы можете использовать скрипт любезно предоставленный Александром Астаповым, скачать его и почитать о возможностях можно в отдельном посте, http://sudouser.com/skript-dlya-upravleniya-polzovatelyami-vsftpd.html

7 Ссылки

http://vsftpd.beasts.org
http://howtoforge.com/vsftpd_mysql_debian_etch

44 комментария »

44 комментария to “Установка и настройка VSFTPD + MYSQL (Ubuntu & Debian)”

  1. iron_head on 01 Июл 2008 at 14:07 #

    Привет, неполучается, всё делаю ровно так кк написана, а в итоге ftp не пускает, testuser и secret ну ни как не подходят, может быть ты чтото забыл ещё написать?

  2. iron_head on 01 Июл 2008 at 14:41 #

    Нашел косяк! проблема была в том что файл /etc/pam.d/vsftpd должен состоять из двух строк!!!! не 4 как может показаться, обе строки начинаются на auth required и account required соответственно. На эту мысль меня навела статься http://www.lissyara.su/?id=1614. В общем все заработало автору спасибо.

  3. MicroDC on 01 Июл 2008 at 16:45 #

    iron_head, Скорее всего ты, что то пропустил =)

  4. Stepanoff on 01 Июл 2008 at 23:33 #

    Нет, точно все написано так как надо, проверено не один раз уже многими людьми 🙂

  5. BlackWhite on 22 Мар 2009 at 15:10 #

    Вот спасибо, класная статья. Именно то что я хотел — что бы для каждого пользователя можно точно настроить доступ.
    Единственно, может кому полезно будет, я добавил так в конфиге:
    anonymous_enable=YES # включ anonymous
    anon_upload_enable=NO # запрешаем ему загружать
    anon_mkdir_write_enable=NO # и делать директории
    anon_root=/home/ftp/anonymous/ # перенаправляем его в нужную директорию

    и вот так можно подключать директори:
    sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/ftp/anonymous/
    Что бы сделать это при загрузке системы, прописываем в:
    sudo gedit /etc/fstab

  6. military on 09 мая 2009 at 02:34 #

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

    А инфа очень полезная, спасибо!

  7. Stepanoff on 10 мая 2009 at 23:36 #

    Скрипт есть, выложен в другом посте, адрес http://sudouser.com/skript-dlya-upravleniya-polzovatelyami-vsftpd.html

  8. stolz on 11 Июн 2009 at 22:09 #

    Наконец после долгих хождений по гуглу нашлась понятная ламаке мануалка. Спасибо огоромное комрады!!
    Объясните так же подробно как прикрутить предложенный скрипт. И как он запускается?

  9. Stepanoff on 11 Июн 2009 at 22:13 #

    Запустить его можно как и любой bash или sh скрипт, как пользовать отписал в пост о скрипте.

  10. stolz on 11 Июн 2009 at 23:12 #

    я забыл добавить что я ламер )))

  11. TrEK on 09 Июл 2009 at 13:02 #

    Подскажите пожалуйста какие права доступа и какого юзера и группу нужно назначить директории /home/vsftpd ?
    Спасибо.

  12. at-prog.ru on 16 Июл 2009 at 10:29 #

    […] Инструкция по установке FTP сервера vsFTPd. Статья настолько точно и правильно все объясняет, что необходимости в обработке результата напильником нет – необходимо просто следовать пошаговой инструкции. […]

  13. s127gav on 06 Авг 2009 at 00:41 #

    Как подружить его с ISPConfig 3? Где прописать, чтобы vsftpd видел базу пользователей панели хостинга?

  14. wildwhiteash on 07 Авг 2009 at 09:17 #

    наверное есть разница в дистрибутивах
    ситуация:
    AltLinux Server 4.0.1
    vsftpd работает через xinet.d
    пакет libpam-mysql называется pam-mysql (именно как lib нету)
    все остальное по этой инструкции (разве что пароль поменял на базу)
    в логах видно как юзер заходит и сразу же вылетает

    tail /var/log/auth/secure
    Aug 7 09:10:00 rainbow2 xinetd[14426]: START: ftp pid=14435 from=80.252.245.101
    Aug 7 09:10:00 rainbow2 xinetd[14426]: EXIT: ftp pid=14435 duration=0(sec)

    а вы говорите нет необходимости допиливать =)
    у кого нибудь есть идеи как победить?

  15. HowTo: Установка и настройка VSFTPD + MYSQL (Ubuntu & Debian) | Мануалы Linux on 04 Сен 2009 at 20:38 #

    […] Взято с http://sudouser.com […]

  16. maximka on 31 мая 2010 at 22:30 #

    Доброго времени суток . Скажите пожалуйста зачем нужен libpam-mysql и можно ли связать фтипиху с мусклом без этого пакета . Заранее спасибо

  17. Максим Степанов on 31 мая 2010 at 23:10 #

    Библиотека pam нужна для авторизации. Пакет libpam-mysql нужен для авторизации с использованием базы данных mysql. Поставьте pure-ftpd, он умеет авторизовывать из базы данных.

  18. maximka on 01 Июн 2010 at 13:21 #

    Доброго времени суток . настраивал по вашему мануалу , выскакивает следующая ошибка 500 OOPS: child died
    В чем может быть проблема ? Заранее спасибо

  19. Максим Степанов on 01 Июн 2010 at 13:25 #

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

  20. maximka on 01 Июн 2010 at 13:31 #

    простите может вопрос глупый но как я понимаю логи пишутся в /var/log/vsftpd.log но у меня он абсолютно пуст и там не появляется ни одной записи

  21. Максим Степанов on 01 Июн 2010 at 13:32 #

    Ну значит ошибка в конфигах.

  22. maximka on 02 Июн 2010 at 22:06 #

    Код:
    auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
    account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

    Максим , вопрос такой . Что это за user и passwd ? Это пользователь и пароль от mysql ?
    Заранее спасибо

  23. Максим Степанов on 02 Июн 2010 at 22:08 #

    Да, это данные для авторизации в Mysql, логин, пароль хост и имя базы.

  24. maximka on 02 Июн 2010 at 22:08 #

    Спасибо

  25. hidalgo on 14 Июн 2010 at 15:17 #

    Что-то у меня не получается… При попытке подключиться сервер выдает ошибку 530.
    Начал разбирать конфиги и наткнулся на такую строчку:
    rsa_cert_file=/etc/ssl/certs/vsftpd.pem
    посмотрел в файловой системе — такого файла у меня нет. Может быть, в этом проблемма?
    Каким образом в таком случае генерируется сертификат?

  26. hidalgo on 14 Июн 2010 at 15:23 #

    И еще вопрос: как назвать файлы конфигов для конкретных пользователей?

  27. Максим Степанов on 28 Июн 2010 at 19:18 #

    Файлы называть логином юзера, например, если есть логин vasya то файл конфига будет называться vasya

  28. voloxastik on 28 Июн 2010 at 22:30 #

    sudo /etc/init.d/vsftpd status rather than invoking init scripts through /etc/init.d, use the service(8) utility e.g. service vsftpd start since the script you are attempting to invoke has been converted to an upstart job, you may also use the start(8) utility, e.g. start vsftp

    что это значит?

  29. Максим Степанов on 29 Июн 2010 at 10:19 #

    В новой версии Ubuntu рекомендуют использовать команду service вместо прямого запуска скриптов из /etc/init.d

  30. maximka on 27 Июл 2010 at 14:15 #

    Добрый день . Вопрос такой . Несколько месяцев назад воспользовался вашей статьей . очееееень понравилась . Сейчас хочу завести виртуального юзера который гуляет по всему компу . Создал в базе юзера admin . В директории user_config_dir создал одноименный файл . Что надо там прописать . Посоветуйте please . Я так понимаю что надо использовать опцию local_root или chroot_local_user … Дайте пожайлуста совет

  31. Максим Степанов on 27 Июл 2010 at 14:18 #

    ftp по всей машине это изврат. Создать простого юзера, использовать sftp.

  32. Itachi1701 on 10 Сен 2010 at 20:06 #

    все по статье но в итоге login incorrect. создавал и другого пользователя user с пассвордом user и у него тоже login incorrect

  33. s7r0ng on 27 Дек 2010 at 12:43 #

    Когда соединяюсь по ftp используя логин testuser и пасс secret, мне выдает ошибку:
    Connecting to 192.168.1.22:21…
    Connection attempt failed with «ECONNREFUSED — Connection refused by server»

    Уже везде всё облазил, решения не могу найти!

    Подскажите, в чем может быть проблема?

  34. Максим Степанов on 27 Дек 2010 at 12:45 #

    В логах фтп сервера что?

  35. s7r0ng on 27 Дек 2010 at 13:07 #

    /var/log/vsftpd.log — нет такого файла

    А тут никаких упоминаний о vsftpd нет:
    /var/log/messages
    /var/log/syslog

  36. s7r0ng on 27 Дек 2010 at 13:35 #

    После неудачной попытки соединиться с ftp сервером, в /var/log/syslog появляются записи:

    Dec 27 02:29:04 web ntpd[841]: bind() fd 21, family AF_INET6, port 123, scope 2, addr fe80::20c:29ff:fel5:a399, mcast=0 flags=0xll fails: Cannot assign requested address
    Dec 27 02:29:04 web ntpd[8411]: unable to create socket on ethO (36) for fe80::20c:29ff:fel5:a399#123
    Dec 27 02:29:04 web ntpd[8411]: failed to initialize interface for address fe80::20c:29ff:fel5:a399

    Хотя сеть работает нормально, инет на ubuntu работает, локалка пингуется…. Что может быть?!

  37. s7r0ng on 27 Дек 2010 at 23:58 #

    Всё заебись, сделал заново все сначала — заработало. Главное хз в чем ошибка была….
    Автору спасибо 🙂

  38. Vsftpd с виртуальными пользователями | MUHIEV.RU on 02 Янв 2011 at 11:04 #

    […] Источник: sudouser.com […]

  39. Настравиваем Ubuntu под HomeServer | Black&White's Blog on 07 Янв 2011 at 12:14 #

    […] С фтп сервером оказалось немного сложнее. Их приличное количесво и все они без нормального визуального контроля. Я выбрал vsFtpd + Mysql. Эта связка позволяет создвавать виртуальных пользователей, что весьма удобно. Описание установки и настройки находиться по этому адресу. […]

  40. Проставляемся on 23 Янв 2011 at 05:21 #

    […] хотелось, чтоб ftp брал пользователей из базы данных. Здесь http://sudouser.com/ustanovka-i-nastrojka-vsftpd-mysql-ubuntu-debian расисанно как сделать […]

  41. Настраиваем Ubuntu Server под HomeServer | Black&White's Blog on 31 Янв 2011 at 20:24 #

    […] Я выбрал vsFtpd + Mysql. Эта связка позволяет создвавать виртуальных пользователей, что весьма удобно. Описание установки и настройки находиться по этому адресу. […]

  42. pd27 on 09 Окт 2011 at 13:49 #

    conection refused это при ftp 192.168.1.5 И никак нет доступа к серверу, даже простого коннекта. Всё по инструкции.
    Даже 2 раза повторил всё в точности.
    Система — консольный Дебиан 6,0

  43. shigella on 09 Авг 2012 at 19:14 #

    Настраивал по этому мануалу много раз и все работало, за что большое спасибо автору.
    Но на ubuntu 12.04 server vsFTP наотрез отказался работать. Через 2 дня нашел причину. Если у кого
    500 OOPS: vsftpd: refusing to run with writable root inside chroot() то вот решение http://blog.pavelb.ru/2011/02/500-oops-vsftpd-refusing-to-run-with.html

  44. Развертывание ftp-сервера на Ubuntu « Кузнецов Александр on 09 Ноя 2012 at 10:43 #

    […] данных MySQL. Статья написана по материалам из статьи "Установка и настройка VSFTPD + MYSQL (Ubuntu & Debian)" но моем сервере уже стоял […]

Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.



Server load average: 0.08, 0.02, 0.01
Server uptime: 21 days, 4:09
Your IP is: 54.198.134.32.