vsftpd - andyceo/documentation GitHub Wiki

Установка и настройка VSFTPD + MySQL

Проверено в Ubuntu 10.04 LTS - ставится и корректно работает. В Ubuntu 8.04 LTS не ставится (см. Проблемы.) В Ubuntu 12.04.1 LTS есть нюансы - см. Установка и настройка vsftpd в Ubuntu 12.04.1

  • Ставим необходимые пакеты:

    sudo aptitude install vsftpd libpam-mysql
    
  • Создаем базу данных, в которой будут аккаунты пользователей, и пользователя БД, даем ему необходимые привилегии для работы с этой БД:

    CREATE DATABASE vsftpd CHARSET=utf8;
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
    FLUSH PRIVILEGES;
    
  • Создаем таблицу, где будут храниться пользователи:

    DROP TABLE IF EXISTS `accounts`;
    CREATE TABLE IF NOT EXISTS `accounts` (
      `id` int(11) NOT NULL auto_increment,
      `username` varchar(30) NOT NULL,
      `pass` varchar(50) NOT NULL,
      PRIMARY KEY  (`id`),
      UNIQUE KEY `username` (`username`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    
  • В начале создаем непривилегированного пользователя vsftpd (с домашней директорией: /home/vsftpd) входящего в группуnogroup. Домашние директории виртуальных пользователей, в дальнешем будут расположены в этой /home/vsftpd директории (например: /home/vsftpd/user1, /home/vsftpd/user2, и т.д.):

    sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
    
  • Сохраняем оригинальный /etc/vsftpd.conf файл и создаем другой:

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
    sudo cat /dev/null > /etc/vsftpd.conf
    sudo nano /etc/vsftpd.conf
    
  • Вставляем в открывшееся окно редактора следующий текст:

    listen=YES
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    
    # Включаем ведение лога операций.
    xferlog_enable=YES
    vsftpd_log_file=/var/log/vsftpd.log
    
    # Расширенные логи всех команд
    log_ftp_protocol=YES
    
    connect_from_port_20=YES
    run_as_launching_user=NO
    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, создадим вновь специальную директорию:

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

    sudo cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
    sudo cat /dev/null > /etc/pam.d/vsftpd
    sudo 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
    

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

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

    sudo service vsftpd restart
    
  • Создаем первого виртуального пользователя:

    INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('mypassword'))
    

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

    sudo mkdir /home/vsftpd/testuser
    sudo chown vsftpd:nogroup /home/vsftpd/testuser
    

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

  • Для того, чтобы иметь возможность с этой конфигурацией работать с символьными ссылками на другие директории, необходимо сделать следующие действия (простые символические ссылки - symlinks - работать с такой конфигурацией не будут, чтобы работали, нужно chroot_local_user=NO, но тогда при выходе из папки фтп-пользователь сможет увидеть другие папки, не из его корневой директории):

    • создать пустую папку в директории фтп-пользователя, в которую будет монтироваться любая другая необходимая папка в любом месте файловой системы, например, такая: /home/vsftpd/files.example.com

    • примонтировать желаемую папку к целевой папке в директории фтп-пользователя:

        sudo mount --bind /var/www/files.example.com /home/vsftpd/files.example.com
      
    • отмонтировать папку можно так:

        sudo umount /mnt
      

Проблемы

На Ubuntu 10.04 установилось без проблем, а на 8.04 - после успешного логина - сервер offline. Лог:

Connect to: (03.08.2010 22:10:30) hostname=84.16.230.159 username=andyceo startdir= 220 (vsFTPd 2.0.6) USER andyceo 331 Please specify the password. PASS *********** 230 Login successful. SYST 215 UNIX Type: L8 OFFLINE Connect ok!

Connect to: (03.08.2010 22:10:32) hostname=84.16.230.159 username=andyceo startdir= 220 (vsFTPd 2.0.6) USER andyceo 331 Please specify the password. PASS *********** 230 Login successful. SYST OFFLINE Connect ok!

FIXME

Возможно, проблема в firewall. После продолжительного гугления и сбора всякого опыта, нашел, что это проблема: "500 OOOPS: cap_set_proc" или "500 OOPS: vsf_sysutil_recv_peek" - выдает Firefox. Нужно в ядре включить Capabilities или собрать vsftpd без этих самых capabilities. I found out that I need to install the module called “capability”.

To check if this module is already installed run the following command:

lsmod | grep capability

http://lifein0and1.com/2007/11/19/vsftpd-errror-message-500-oops-cap_set_proc-or-vsf_sysutil_recv_peek/

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

Две ошибки происходят при логине пользователя, после настройки vsftpd по вышеприведенной инструкции:

  • libgcc_s.so.1 must be installed for pthread_cancel to work - решается установкой libpam-ldap:

    sudo aptitude install libpam-ldap
    

    Настроить его надо так:

    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
    

    Ссылка: http://www.howtoforge.com/virtual-hosting-with-vsftpd-and-mysql-on-ubuntu-12.04

  • После устранения вышестоящей ошибки, появится такая: 500 OOPS: vsftpd: refusing to run with writable root inside chroot (). Устраняется тем, что надо установить папке пользователя права root, а внутри нее уже можно создавать другие папки, с правами vsftpd-пользователя:

    chown root:root /home/vsftpd/testuser
    mkdir /home/vsftpd/testuser/downloads
    chown vsftpd:nogroup /home/vsftpd/testuser/downloads
    

    Ссылка: http://huinn.wordpress.com/2012/09/16/vsftpd-with-mysql-virtual-users/

Ссылки

⚠️ **GitHub.com Fallback** ⚠️