Как дилетанты поднимали ftp-сервер на Debian 6

Как я и обещал, рассказываю о том, как дилетанты поднимали ftp на Днепропетровском сервере. Раньше ни я, ни мой коллега с этим не сталкивались, поэтому нам пришлось прошерстить множество забугорных форумов и сайтов. На основании прочитанного нам таки удалось реализовать задуманное.

Сразу скажу, какие цели мы ставили перед собой. На сервере есть определенная папка, которую (только ее и все вложенные) мы хотим опубликовать, однако она должна быть доступна для просмотра только после авторизации. Пользователь нужен только один, а права на папку ― 770 и не должны изменяться.

Для начала установим, собственно, сам vsftpd:

sudo apt-get install vsftpd

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

echo ftpuser > auth.txt
echo ftppass >> auth.txt

Вместо ftpuser в моем примере Вы указываете нужный Вам логин, а вместо ftppass, соответственно, пароль.

Теперь из нашего текстового файла нужно сделать понятный серверу файл базы данных. Для этого сначала установим пакет db-util.

sudo apt-get install db4.7-util

Теперь, собственно, превращаем:

sudo db4.7_load -T -t hash -f auth.txt /etc/vsftpd_login.db
sudo chmod 600 /etc/vsftpd_login.db

Затем, нам нужно указать серверу, что авторизационные данные ему следует брать из этой самой базы, которую мы сформировали, для этого нужно править файл /etc/pam.d/vsftpd.

sudo gedit /etc/pam.d/vsftpd

Правим его следующим образом: закомментируем все незакомментированные строчки в этом файле, после чего добавляем в конец следующие строки:

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

Теперь создаем пользователя системы, под которым у нас будет работать сервер. Это можно сделать и через консоль, но поскольку наш сервер работает на Debian, то можно воспользоватся программным средством. Находим Система -> Администрирование -> Пользователи и группы, под списком пользователей кликаем на кнопку «Добавить».

А теперь небольшое наблюдение. В нашем случае авторизация нормально работала только тогда, когда имя пользователя («Короткое имя») было таким же, как и то, что мы указывали в файле auth.txt.

Итак, в поле «Имя» можно указать что угодно, но в поле «Короткое имя» указываем тот же логин, что и в файле auth.txt. Указываем пароль пользователя (не обязательно такой же, как и в вышеупомянутом файле), нажимаем «OK» и учетная запись готова.

Теперь еще одно замечание. Если у Вас такие же требования, как и наши, то Вам следует поместить свежесозданного пользователя в ту же группу, что и учетную запись, под которой Вы входите в систему. Сейчас объясню зачем это нужно. Папка, которую мы хотим сдеать доступной через ftp, имеет права 770, т.е. в ней могут творить что хотят только владелец и группа, к которой он относится, остальные же не имеют даже права на чтение. И если учетная запись администратора, и та учетка, которую мы создали под ftp будут в разных группах, то нам придется выбирать, какой из них разрешить доступ к папке. Или же ставить права 777, а это совсем не комильфо.

Итак, вернемся к заполнению учетной записи. Переходим на вкладку «Дополнительно», в поле «Домашний каталог» указываем папку, которую хотим сделать доступной по ftp, отмечаем пункт «Выключить учетную запись» (для того, чтобы эта учетная запись не вылезала на экран входа в систему), там же выбираем и группу. Сохраняем и идем дальше. Теперь нам нужно сконфигурировать наш vsftpd. Вот на этом этапе я застрял на несколько часов. Вот то, что у нас получилось в итоге:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_root=/path/to/ftp/root #папка, которую мы хотим опубликовать
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=dp_ibice_ftp #имя пользователя
virtual_use_local_privs=YES
chmod_enable=YES
chown_uploads=YES
chown_username=dp_ibice_ftp #имя пользователя еще раз (все загружаемые по ftp файлы будут принадлежать этому пользователю)
local_umask=0022
anon_umask=0007
file_open_mode=0777
listen=YES
listen_port=21
pasv_min_port=30000
pasv_max_port=30999
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
tcp_wrappers=YES
dirmessage_enable=YES
ftpd_banner=Welcome to our ftp server! #приветствие после авторизации

Подставляем нужные нам значения, находим файл /etc/vsftpd/vsftpd.conf (иногда /etc/vsftpd.conf), все из него удаляем и вставляем нашу конфигурацию. Сохраняем. На этом настройка сервера завершена, теперь нам нужно его перезагрузить. Это можно сделать без перезагрузки всего компьютера:

sudo /etc/init.d/vsftpd restart

или же путем обыкновенной перезагрузки. Я пользовался вторым способом. После перезагрузки попытаемся войти на сервер. Это можно сделать при помощи консоли или же через любой ftp-клиент.

Если же при попытке подключения сервер возвращает ошибку «550 Failed to change directory», это скорее всего означает, что пользователь (или же вся группа пользователей), которого Вы указали в конфигурации сервера, не имеет доступа к папке, указанной в качестве корневой. Это решается просто. Проверяем, все ли пользователи, которым мы хотим дать доступ к ftp находятся в одной группе, затем выполняем следующую команду в терминале:

chgrp -R [название_группы] [путь_к_папке]

Теперь у нас все работает и обмениваться файлами стало немножко проще и удобнее. Улыбка

UPD: Если после всего этого у Вас при авторизации возникает ошибка 530, то возможно, поможет эта статья.


11.04.2011, 18:50
  debian, vsftpd, ftp, установка.
Просмотров: 3076.
9