vsftpd - предпочтительный ftp-сервер благодаря своей безопасности и скорости работы
http://vsftpd.beasts.org - сайт разработчиков
vsftpd-2.3.4 - текущая версия(на 10.10.2011)
Установка vsftpd
sudo apt-get install vsftpd установка из репозитория
vsftpd -v смотрим, что за версия у нас установилась. На 10.10.2011 ставится vsftpd: version 2.2.2 от 17.11.2009. Почти 2 года, однако.
https://help.ubuntu.com/10.04/serverguide/C/ftp-server.html
При установке создается пользователь ftp с домашней папкой /srv/ftp
anonymous_enable=YES
local_enable=NO
chroot_local_user=YES
Получаем анонимный ftp-сервер, где пользователь ограничен папкой /srv/ftp
/*Черновик
1.vsftpd – ftp-сервер
1.1.Компиляция и установка программы в анонимном режиме(первая стадия).
Скачиваем vsftpd-2.0.7.tar.gz(на данный момент) с сайта vsftpd, разархивируем в папку vsftpd-2.0.7 и курим файл INSTALL. Соглсно файлу в версии 2.0.7 нужно сделать следующее:
1.1.1.make находясь в директории архива, что создаст нам исполняемый файл vsftpd в этой директории
1.1.2.Создаем пользователя nobody, котрый требуется vsftpd – серверу по умолчанию. [root@localhost root]# useradd nobody
useradd: user nobody exists – можем получить сообщение, что пользователь существует.
1.1.3.vsftpd требует наличия пустой директории /usr/share/empty в конфигурации по умолчанию. Добавляем эту директорию, если она не существует.
[root@localhost root]# mkdir /usr/share/empty/
mkdir: cannot create directory `/usr/share/empty': File exists – можем получить такое сообщение, что директория уже существует.
1.1.4.Для анонимного ftp нам нужно, чтобы существовал пользователь ftp и имел домашнюю директорию, которой он не владеет и куда не может писать. Следующие команды добавляют пользователя, создают директории и задают необходимые права для них.
[root@localhost root]# mkdir /var/ftp/
[root@localhost root]# useradd -d /var/ftp ftp - добавляем пользователя ftp, емеющего домашний каталог /var/ftp
[root@localhost root]# chown root.root /var/ftp – владелец и группа для папки – root и root
[root@localhost root]# chmod og-w /var/ftp – права на папку /var/fp
1.1.5.Распихиваем файлы по директориям. Все директории должны быть созданы предварительно mkdir (make install – делает то же самое, только не копирует файл vsftpd.conf)
cp vsftpd /usr/local/sbin/vsftpd - исполняемый файл в нужную папку
cp vsftpd.conf.5 /usr/local/man/man5 -манул
cp vsftpd.8 /usr/local/man/man8 -мануал
cp vsftpd.conf /etc - копируем конфигурационный файл.
1.1.6.Тестовый запуск в режиме standalone
Отредактируем файл конфигурации /etc/vsftpd.conf
добавим в него строчку listen=YES. Это говорит серверу запускаться в «самостоятельном» режиме. (БОльшей функциональности программы можно добиться, используя xinetd или inetd)
vsftpd can run standalone or via an inetd (such as inetd or xinetd).
[root@localhost root]# /usr/local/sbin/vsftpd & - запуск, & - переход в фоновый режим в консоли.
Проверка:
[chris@localhost chris]$ ftp localhost
Connected to localhost (127.0.0.1).
220 (vsFTPd 1.1.1)
Name (localhost:chris): ftp
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX
ftp> ls
1.2.Запуск через xinetd
1.2.1.Файл vsftpd.xinetd (есть в дистрибутиве) следующего содержания:
#Начало файла
# vsftpd is the secure FTP server.
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
per_source = 5
instances = 200
#?no_access = 192.168.1.223
banner_fail = /etc/vsftpd.busy_banner
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
#Конец файла
копируем в папку /etc/xinetd.d/ с переименованием в vsftpd
cp vsftpd.xinetd /etc/xinet.d/vsftpd
1.2.2.В файле конфигурации /etc/vsftpd.conf комментируем строчку listen=YES
Делаем рестарт сервиса xinetd:
/etc/rc.d/init.d/xinetd restart
1.3.Настройка конфигурации с виртуальными пользователями (VIRTUAL_USERS2)
1.3.1.Создание файла с учетными записями виртуальных пользователей формата *.db
Создаем текстовый файл "logins.txt" в следующем формате: 1-я строчка login1, 2-я строчка pass1, 3-я строчка login2, 4-я строчка pass2, итд, в котором содержатся логины-пароли наших виртуальных пользователей. Далее мы используем программу db_load (Berkeley db program), с помощью которой конвертируем наш файл "logins.txt" в файл определенного формата *.db Для этого под пользователем root исполняем следующую команду, находясь в директории, где лежит файл logins.txt:
db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
(Совсем не удивляемся, что команда db_load неизвестна системе, лезем в репозиторий и устанавливаем db4_utils.rpm). В итоге после выполнения команды получаем файл /etc/vsftpd_login.db
Отберем у всех права на этот файл:
chmod 600 /etc/vsftpd_login.db
(Проверить права до и после можно командой ls -l /etc/vsftpd_login.db)
1.3.2.Создаем PAM файл, который подключает нашу новую базу для аутентификации. В этом файле будет 2 строчки:
#начало файла
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
#конец файла
(Этот файл есть в дистрибутиве vsftpd ):
../vsftpd-2.0.7/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
Видно, что /etc/vsftpd_login - наш файл паролей в формате db без расширения.
Зададим этому файлу имя vsftpd.pam - оно в дальнейшем будет использовано в конфигурационном файле vsftpd.conf, как один из параметров.
Копируем этот файл в PAM-директорию, которую пасет PAM-сервис:
cp vsftpd.pam /etc/pam.d/vsftpd.pam
1.3.3.Вносим добавление(изменение) в файл конфигурации /etc/vsftpd.conf:
pam_service_name=vsftpd.pam
1.3.4.Добавление пользователя virtual (можно использовать любое имя)
Пользователь virtual используется при аутентификации виртуальных пользователей. Ему стявятся в соответствие виртуальные пользователи, подсоединившиеся к серверу. Для начала создадим папку /srv/ftproot, которая будет домашней папкой пользователя virtual
/usr/sbin/useradd -d /srv/ftproot virtual -создание пользователя с вышеуказанной домашней папкой (опция -d )
chown virtual.virtual /srv/ftproot –делаем пользователя virtual и группу virtual вледельцами папки.
1.3.5.virtual в webmine имеет следующие опции: оболочка /sbin/nologin; пароль: заранее зашифрованный пароль; стоит галка: login temporarily disabled.
1.3.6.Файл конфигурации.
#Начало файла------------------------
#Доступ и безопасность
#название файла в папке /etc/pam.d/ (папка сервиса PAM) (обязательно)
pam_service_name=vsftpd.pam
#Запрет анонимусов
anonymous_enable=NO
#Разрешаем локальных пользователей (обязательно)
local_enable=YES
#Все неанонимные логины ставятся трактуются как гостевые(обязательно)
guest_enable=YES
#какому локальному аккаунту будут сопостовляться залогиненные гости(обязательно)
guest_username=virtual
#Чтобы была возможность записи(обязательно)
write_enable=YES
#Виртуальные-гости не получают прав локального пользователя virtual
virtual_use_local_privs=NO
#Аноним-виртуал-гость может писать
anon_upload_enable=YES
#Аноним-виртуал-гость может создавать папки
anon_mkdir_write_enable=YES
#Аноним-виртуал-гость может удалять и переименовывать
anon_other_write_enable=YES
#Предыдущий код блока можно было бы организовать так:
#(Считается менее безопасным вариантом)
#virtual_use_local_privs=YES
#anon_upload_enable=NO
#anon_mkdir_write_enable=NO
#anon_other_write_enable=NO
#Пользователи будут находится в тюрьме в своей домашней папке
chroot_local_user=YES
#Для отображения содержимого директории
anon_world_readable_only=NO
#Задает права для закачиваемых файлов в соответствии с umask. Удалять файлы можно вне зависимости от umask!
#anon_umask=022
#Строчку нужно раскомментировать, если режим standalone
#listen=YES
#
#Соединения и порты
pasv_min_port=50000
pasv_max_port=60000
connect_from_port_20=YES
#Чтобы велся лог-файл. По умолчанию /etc/vsftpd.conf, можно задать другой файл в конфиге
xferlog_enable=YES
#Удаляет все файлы, которые не дозакачались
delete_failed_uploads=YES
#Директория, где хранятся файлики для каждого пользователя, для каждого пользователя - свой файл, имя которого #совпадает с именем пользователя.
user_config_dir=/etc/vsftpd/vsftpd_user_conf
#Конец файла------------------------
1.3.7.Задаем в папке /etc/vsftpd/vsftpd_user_conf индивидуальные конфигурации пользователей.
Для трех пользователей pupkin1, pupkin2, pupkin3 будут 3 одноименных файла без расширения.
#pupkin1-начало файла
local_root=/srv/ftproot/pupkin1
#pupkin1-конец файла
#pupkin2-начало файла
local_root=/srv/ftproot/upload
#pupkin2-конец файла
#pupkin3-начало файла
local_root=/srv/ftproot/upload
#Запрет удаления и переименования файлов пользователю im2000, остальное – можно.
anon_other_write_enable=NO
#pupkin3-конец файла
Эти 3 файла можно создать командами:
echo "local_root=/srv/ftproot/pupkin1" > /etc/vsftpd/vsftpd_user_conf/pupkin1
echo "local_root=/srv/ftproot/pupkin2" > /etc/vsftpd/vsftpd_user_conf/pupkin2
echo "local_root=/srv/ftproot/pupkin3" > /etc/vsftpd/vsftpd_user_conf/pupkin3
echo "anon_other_write_enable=NO" > /etc/vsftpd/vsftpd_user_conf/pupkin3
1.4.Общие замечания
1.4.1.При ошибке в конфиге соединение установить не удастся.
1.5.Файлы сервера
1.5.1./etc/vsftpd.conf – файл конфигурации с настройками vsftpd, если в файле содержится ошибка, соединение невозможно. 500 OOPS – и до свидания
1.5.2./var/log/vsftpd.log – лог-файл vsftpd по умолчанию, можно задать в кофигурации другое имя, чтобы писался лог нужно включить опцию xferlog_enable=YES
1.6.Параметры /etc/vsftpd.conf и комментарии к ним.
1.6.1.virtual_use_local_privs=NO дает эффект, что для виртуальных пользователей надо писать директивы anonymous'а. К примеру, для ограничения скорости должно быть anon_max_rate, а не local_max_rate, а также использовать параметр anon_umask, вместо local_umask. Но в то же время нужно при необходимости применять параметр local_root, а не anon_root
1.6.2.local_enable=YES (можно логиниться локальным пользователям) требует обязательно one_process_model=NO (режим одного процесса невозможен). Иначе 500 OOPS: vsftpd: security: ‘one_process_model’ anonymous only – и много потерянного времени.
1.7.Настройка доступа с технологией локальных пользователей(курим INSTALL)
1.8.Настройка анонимного доступа(курим INSTALL)
1.9.Настройка с виртуальными хостами(курим INSTALL)
Установка vsftpd в режиме виртуальных пользователей Ubuntu 8.04 Server (Hardy)
sudo apt-get install db4.6-util
sudo db4.6_load -T -t hash -f logins.txt /etc/vsftpd_login.db
vsftpd – особенности
/etc/init.d/vsftpd – скрипт, который понимает опции
stop, start, restart(stop+start), reload(force-reload) (перегружаются конфигурационные файлы)
man vsftpd.conf
#anon_word_readable_only=NO
#delete_failed_uploads=YES
Эти опции приводят к краху vsftpd после reboot! Комментируем их во избежании гемора. Restart сервиса не помогает. Только reboot.?
One_process_model=YES – также не работает. 500-OOPS, этот режим работы только для анонимный пользователей.
Пользователю virtual задаем действующую директорию в качестве домашней, на которую права только у него
-------------------------------------------------------------------------------------------------------------------
Важно!!
Права на upload: 755
#Задает права для закачиваемых файлов в соответствии с umask. Удалять файлы можно вне зависимости от umask!
anon_umask=022 – обязательно, тогда папки создаются пользователями с правами 755
В противном случае не будет видно закачиваемых в папку файлов
*/