vsftpd - andyceo/documentation GitHub Wiki
Проверено в 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
-
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
Две ошибки происходят при логине пользователя, после настройки 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/