Поиск по сайту:

Виртуальный хостинг с шифрованием vsftpd + TLS и MySQL на Ubuntu 15.10


Это руководство существует для этих версий ОС

  • Ubuntu 15.10 (Wily Werewolf)
  • Ubuntu 12.10 (Quantal Quetzal)

На этой странице

  1. 1 Предварительное примечание
  2. 2. Установите vsftpd, MySQL и phpMyAdmin.
  3. 3 Создайте базу данных MySQL для vsftpd
  4. 4 Настройка vsftpd
  5. 5 Создание сертификата SSL для TLS
  6. 6 Включение TLS в vsftpd
  7. 7 Создайте первого виртуального пользователя
  8. 8 Администрирование базы данных
  9. 9 Образ виртуальной машины
    1. SSH-вход
    2. Вход в MySQL

    Vsftpd — один из самых безопасных и быстрых FTP-серверов для Linux. Обычно vsftpd настроен на работу с системными пользователями. Этот документ описывает, как установить сервер vsftpd, который использует виртуальных пользователей из базы данных MySQL вместо реальных системных пользователей. Это гораздо более производительно и позволяет иметь тысячи пользователей ftp на одной машине.

    Для администрирования базы данных MySQL вы можете использовать веб-инструменты, такие как phpMyAdmin, которые также будут установлены в этом руководстве. phpMyAdmin — это удобный графический интерфейс, который означает, что вам не нужно возиться с командной строкой.

    Это руководство основано на Ubuntu 15.10. Вы должны были уже настроить

    Это руководство задумано как практическое руководство; он не охватывает теоретических основ. Они рассматриваются во многих других документах в Интернете.

    Этот документ предоставляется без каких-либо гарантий! Хочу сказать, что это не единственный способ настройки такой системы. Есть много способов достичь этой цели, но я выбираю именно этот. Я не даю никаких гарантий, что это сработает для вас!

    1 Предварительное примечание

    В этом руководстве я использую имя хоста server1.example.com с IP-адресом 192.168.1.100. Эти настройки могут отличаться для вас, поэтому вам придется заменить их там, где это необходимо.

    Поскольку мы должны выполнять все шаги из этого руководства с привилегиями суперпользователя, мы можем либо предварить все команды в этом руководстве строкой sudo, либо стать пользователем root прямо сейчас, набрав

    sudo su

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

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

    apt-get -y install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin libpam-ldap

    Вам будут заданы следующие вопросы:

    New password for the MySQL "root" user: <-- yourrootsqlpassword
    Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
    LDAP server Uniform Resource Identifier: <--  ENTER
    Distinguished name of the search base: <-- ENTER
    LDAP version to use: <-- 3
    Make local root Database admin: <-- Yes
    Does the LDAP database require login?  <-- No
    LDAP account for root: <-- ENTER
    LDAP root account password: <-- ldaprootpw
    Web server to configure automatically: <-- Select the option: apache2
    Configure database for phpmyadmin with dbconfig-common? <-- Yes
    Password of the database's administrative user: <-- Enter the MariaDB root password
    MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

    3 Создайте базу данных MySQL для vsftpd

    Теперь мы создаем базу данных с именем vsftpd и пользователя MySQL с именем vsftpd, которого демон vsftpd будет использовать позже для подключения к базе данных vsftpd:

    mysql --defaults-file=/etc/mysql/debian.cnf
    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;

    Замените строку ftpdpass любым паролем, который вы хотите использовать для пользователя MySQL vsftpd. Еще на оболочке MySQL создаем нужную нам таблицу базы данных (да, таблица всего одна!):

    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`
    )
    );
    quit;

    Как вы могли заметить, с quit; мы покинули оболочку MySQL и вернулись в оболочку Linux.

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

    4 Настройте vsftpd

    Сначала мы создаем непривилегированного пользователя с именем vsftpd (с домашним каталогом /home/vsftpd), принадлежащего к группе nogroup. Мы будем запускать vsftpd под этим пользователем, а каталоги FTP наших виртуальных пользователей будут находиться в каталоге /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
    nano /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. Важными параметрами для нашей виртуальной установки являются chroot_local_user, guest_enable, guest_username, user_sub_token, local_root и virtual_use_local_privs.

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

    mkdir /etc/vsftpd_user_conf

    Теперь мы должны настроить PAM так, чтобы он использовал базу данных MySQL для аутентификации наших виртуальных пользователей FTP вместо /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
    nano /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

    После этого перезапускаем vsftpd:

    service vsftpd restart

    5 Создание сертификата SSL для TLS

    Чтобы использовать TLS, мы должны создать сертификат SSL. Я создаю его в /etc/ssl/private - если каталог не существует, создайте его сейчас::

    mkdir -p /etc/ssl/private
    chmod 700 /etc/ssl/private

    После этого мы можем сгенерировать SSL-сертификат следующим образом:

    openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

    Название страны (двухбуквенный код) [AU]: <-- Введите название вашей страны (например, \DE\).
    Название штата или провинции (полное название) [Some-State]:<-- Введите ваш Название штата или провинции.
    Название местности (например, город) []:<-- Введите свой город.
    Название организации (например, компания) [Internet Widgits Pty Ltd]:<-- Введите название вашей организации ( например, название вашей компании).
    Название организационного подразделения (например, раздела) []:<-- Введите название вашего организационного подразделения (например, \ИТ-отдел\).
    Общее название (например, ВАШ name) []:<-- Введите полное доменное имя системы (например, \server1.example.com\).
    Адрес электронной почты []:<-- Введите свой адрес электронной почты.

    6 Включение TLS в vsftpd

    Чтобы включить TLS в vsftpd, откройте /etc/vsftpd.conf...

    nano /etc/vsftpd.conf

    ... и добавьте следующие параметры:

    # Turn on SSL
    ssl_enable=YES
    
    # Allow anonymous users to use secured SSL connections
    allow_anon_ssl=YES
    
    # All non-anonymous logins are forced to use a secure SSL connection in order to
    # send and receive data on data connections.
    force_local_data_ssl=YES
    
    # All non-anonymous logins are forced to use a secure SSL connection in order to send the password.
    force_local_logins_ssl=YES
    
    # Permit TLS v1 protocol connections. TLS v1 connections are preferred
    ssl_tlsv1=YES
    
    # Permit SSL v2 protocol connections. TLS v1 connections are preferred
    ssl_sslv2=NO
    
    # permit SSL v3 protocol connections. TLS v1 connections are preferred
    ssl_sslv3=NO
    
    # Disable SSL session reuse (required by WinSCP)
    require_ssl_reuse=NO
    
    # Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla)
    ssl_ciphers=HIGH
    
    # This option specifies the location of the RSA certificate to use for SSL
    # encrypted connections.
    rsa_cert_file=/etc/ssl/private/vsftpd.pem
    [...]

    Если вы используете force_local_logins_ssl=YES и force_local_data_ssl=YES, то разрешены только подключения TLS (это блокирует всех пользователей со старыми FTP-клиентами, которые не поддерживают TLS); при использовании force_local_logins_ssl=NO и force_local_data_ssl=NO разрешены как TLS-, так и не-TLS-подключения, в зависимости от того, что поддерживает FTP-клиент.

    После этого перезапустите vsftpd:

    service vsftpd restart

    Вот и все. Теперь вы можете попробовать подключиться с помощью вашего FTP-клиента; однако вам следует настроить FTP-клиент на использование TLS (это обязательно, если вы используете force_local_logins_ssl=YES и force_local_data_ssl=YES) — см. следующую главу, как это сделать с FileZilla.

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

    Для заполнения базы данных вы можете использовать оболочку MySQL:

    mysql --defaults-file=/etc/mysql/debian.cnf
    USE vsftpd;

    Теперь мы создаем виртуального пользователя testuser с секретным паролем (который будет храниться в зашифрованном виде с помощью функции MySQL PASSWORD):

    INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
    quit;

    Домашний каталог testusers — /home/vsftpd/testuser; к сожалению, vsftpd не создает этот каталог автоматически, если он не существует. Поэтому сейчас мы создаем его вручную и делаем его владельцем пользователя vsftpd и группы nogroup:

    mkdir /home/vsftpd/testuser
    chown vsftpd:nogroup /home/vsftpd/testuser
    chmod a-w /home/vsftpd/testuser

    Теперь откройте клиентскую программу FTP на рабочей станции (например, FileZilla или FireFTP) и попробуйте подключиться. В качестве имени хоста вы используете server1.example.com (или IP-адрес системы), имя пользователя — testuser, а пароль — secret.

    8 Администрирование базы данных

    Для большинства людей проще, если у них есть графический интерфейс к MySQL; поэтому вы также можете использовать phpMyAdmin (в этом примере по адресу http://server1.example.com/phpmyadmin/) для администрирования базы данных vsftpd.

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

    9 Образ виртуальной машины

    Это руководство доступно как готовая к использованию виртуальная машина в формате OVA/OVF для подписчиков Howtoforge. Формат VM совместим с VMWare, Virtualbox и другими инструментами, которые могут импортировать этот формат. Вы можете найти ссылку для скачивания в правом меню вверху. Нажмите на имя файла, чтобы начать загрузку.

    Данные для входа в виртуальную машину:

    Вход по SSH

    Имя пользователя: administrator
    Пароль: howtoforge

    Пользователь-администратор имеет права sudo.

    Вход в MySQL

    Имя пользователя: root
    Пароль: howtoforge

    Пожалуйста, измените пароли после первой загрузки.

    ВМ настроена на статический IP 192.168.1.100, IP можно изменить в файле /etc/network/interfaces.

    10 ссылок

    • vsftpd: http://vsftpd.beasts.org/
    • Убунту: http://www.ubuntu.com/