FTP vsftpd Печать
Автор: Administrator   
02.04.10 14:12

umask великая вещь =) или расшариваем содержимое ftp через smb


понадобилось расшарить содержимое фтп по локальной сети.
и вот незадача — прав вечно недостаточно было nobody, от которого по умолчанию на шару попадали юзеры через smb.

в общем надоело мне обновлять права на новые файлы, так что я взялся за конфиг vsftpd =)
нужные параметры в этом случае: anon_umask & local_umask

именно они отвечают за маску свежесозданных файлов и папок, загруженных через фтп.
прочесть про umask можно в википедии =)

мега фраза оттуда:

Права доступа файлов вычисляются при помощи следующих побитовых операций: побитовое И между унарным дополнением аргумента (используя побитовое НЕ) и режимом полного доступа.Режим полного доступа для файлов — 666, для директорий — 777

 

 

Настройка vsftpd с исползованием вирт.пользователей


Итак, можно продолжить, в первой части я рассказал о том что есть, что нужно и как установить vsftpd, как будто бы это может вызвать сложность =)

Пришла пора рассказать о конфигурационном файле и его настройке.
я привожу текст своего конфига, напомню что мне нужны были вирт.пользователи, чрут для каждого, кроме одного из них и разные права доступа.

/etc/vsftpd> cat vsftpd.conf | grep --invert-match ^#
#фтп работает в режиме стандалон, слушает дефолтный порт
listen=YES
listen_port=21
#отключаем доступ анонимусу

anonymous_enable=NO
#разрешаем локальным пользователям логинится
local_enable=YES
#разрешаем операции записи
write_enable=YES
#разрешаем видеть не только ворлд ридабл
anon_world_readable_only=NO
#запрещаем остальные операции записи, такие как изменение имени, удаление и тд.
anon_other_write_enable=NO
#маска для загруженных файлов

local_umask=022
#разрешаем аплоуды
anon_upload_enable=YES
#разрешаем создавание каталогов
anon_mkdir_write_enable=YES
#отключаем сообщение при входе в директории
dirmessage_enable=NO
#ведем лог
xferlog_enable=YES
dual_log_enable=NO
#записываем команды и ответы в лог
log_ftp_protocol=YES

xferlog_file=/var/log/vsftpd.log
#юзер без баша и привелегий. в генту по умолчанию создается и используется ftp
nopriv_user=ftp
#запрещаем ascii аплоуды и доунлоды. для большей секурности. читай коментарий в man vsftpd.conf
ascii_upload_enable=YES
ascii_download_enable=YES
#показывает в списке процессов чем процесс vsftpd занят. включил на время дебагинга
setproctitle_enable=YES
use_localtime=YES

#запрещаем ls -R
ls_recurse_enable=NO

#ВАЖНО! для работы вирт.юзеров это необходимо!
guest_enable=YES
#пользователь, которым представится вирт.пользователь для системы
guest_username=ftp

#настройка работы в пассивном режиме. не забудьте пропустить их на файерволле
pasv_min_port=2222
pasv_max_port=2299
pasv_enable=YES

#я отрубил ссл. зря кнчно наверное. но не хотел заморачиваться с ним
ssl_enable=NO

#ВАЖНО!! для работы индивидуальной настройки пользователь необходимо указать директорию
#где будут хранится файлы с именем = именю пользователя, где будут описаны правила
#для конкретно этого пользователя
user_config_dir=/etc/vsftpd/userconf

#памы. для аутентификации пользователей
pam_service_name=vsftpd

#задаем в байтах в секунду ширину исп. канала
local_max_rate=61440

#количество клиентов и количество неверных логинов в сессию
max_clients=12
max_login_fails=1

#ВАЖНО! автоматически создаем  и помещаем пользователя в его личную папку

user_sub_token=$USER
#ВАЖНО! чрутим пользователя в его папке

local_root=$USER


вот вроде и все что касается конфига. теперь создаем папку для индивидуальных настроек.

/etc/vsftpd> mkdir userconf

и создаем там файлы с именем = имени пользователя с индивидуальными настройками.

поскольку моя задача была сделать 25 пользователей, 24 из которых идентичны (за исключением имени, пароля и папки для чрута) и имеют право аплодить файлы, читать их, создавать директории и все =) и один пользователь для просмотра всего и вся, чрутить его не нужно, права - только чтение. поскольку мне было лень создавать 24 идентичных файлов я решил занести разрешение на аплоуд и создание директорий в конфиг vsftpd.conf, а для пользователя с правами просмотра создать отдельный файл в директории /etc/vsftpd/userconf  со следующим содержанием:

user_sub_token=
write_enable=NO
anon_world_readable_only=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_upload_enable=NO
local_root=

тоесть я для одного пользователя отказался от определенных настроек в конфиге, таким образом он может гулять по всем папкам, но не может что либо писать =)

далее, в /etc/pam.d нужно положить файл vsftpd со след. содержимым:

/etc/vsftpd> cat /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash

не забудьте указать crypt=hash!! в официальной документации об этом не слова, но без указани механизма криптования ничего не выйдет

далее, заносим в файл logins.txt логины и пароли построчно и создаем файл в формате беркли дб с хешами:

db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db

вот теперь все готово =)
поскольку вирт.пользователи мапяться на пользователя ftp то в качестве рута фтп сервера используется хоум директория пользователя ftp: /home/ftp
соответвеннно в ней и создаются папки для остальных пользователей для чрута.

если что - еще добавлю. но вроде все =)

 

vsftpd и авторизация


половину сегодняшнего дня я потратил на выяснение почему vsftpd не пускает виртуального юзера.
пары логин\пароль в оф.документации предлагают хранить в беркли дб.
цитата:
Step 1) Create the virtual users database.
We are going to use pam_userdb to authenticate the virtual users. This needs
a username / password file in "db" format - a common database format.
To create a "db" format file, first create a plain text files with the
usernames and password on alternating lines.
See example file "logins.txt" - this specifies "tom" with password "foo" and
"fred" with password "bar".
Whilst logged in as root, create the actual database file like this:

db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
(Requires the Berkeley db program installed).
NOTE: Many systems have multiple versions of "db" installed, so you may
need to use e.g. db3_load for correct operation. This is known to affect
some Debian systems. The core issue is that pam_userdb expects its login
database to be a specific db version (often db3, whereas db4 may be installed
on your system).

This will create /etc/vsftpd_login.db. Obviously, you may want to make sure
the permissions are restricted:

chmod 600 /etc/vsftpd_login.db

настроив все как было сказано, за исключением того, что версия беркли дб у меня 4.3, я пол дня пытался заставить работать авторизацию, получая разные сообщения, начиная с login failure заканчивая 500 OOPS: priv_sock_get_result.
получив последнее я наконец то выяснил в чем косяк. оказывается в паме нужно указать какой алгоритм применять =)
забавно млин. то решение, что я нашел:
необходимо добавить crypt=hash для каждой строки в паме. отсюда
вариант решение так же, найденный на гентушном форуме: emerge -u world broke VSFTPd (Urgent!)

 

vsftpd на замену serv-u ftp


Больше года назад по производственной необходимости был установлен Serv-U FTP server для одной простой цели - хранение фотографий экспертиз. Для каждого филиала была выделена отдельная тачка, для каждого филиала - один пользователь.  
Пользователи имеют право только читать и писать. Есть так же один юзер с правом смотреть все папки.
Соответсвенно задачи перед фтп-сервером следующие:
* чрутить юзеров в их папки
* работа с виртуальными юзерами
* нормально понимать кирилицу в именах папок/файлов
это из необходимого. отказался от использования мускула в качестве хранилища пользователей - с учетом низкой активности, вернее никакой активности добавления пользователей или смены паролей не вижу смысла что то ковырять в этом направлении.
Мигрирую с серв-у по одной простой причине: лицензию на него приобретать не собираемся, да и в любом случае хотел реализовать фтп на линухе.

Как всегда вопрос, что поднять на линухе с подобным функционалом? Из вариантов: vsftpd и proftpd. первый мне внушил больше доверия. так что начал его установку.

Юзаем мега eix для поиска пакета и изучения юз флагов:

gate ~ # eix net-ftp/vsftpd
* net-ftp/vsftpd
Available versions:  2.0.4-r1 2.0.5 2.0.5-r1 2.0.5-r2 2.0.5-r3 {caps logrotate pam selinux ssl tcpd xinetd}
Homepage:            http://vsftpd.beasts.org/
Description:         Very Secure FTP Daemon written with speed, size and security in mind

читаем для каждого флага euse -i <флаг> как учил сансэй =) выясняем что нам понадобится. делаем соответсвующую запись в /etc/portage/package.use
смотрим что потянется вместе с vsftpd:

gate ~ # emerge -p net-ftp/vsftpd

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] app-admin/logrotate-3.7.2  USE="(-selinux)"
[ebuild  N    ] net-ftp/ftpbase-0.01  USE="pam"
[ebuild  N    ] net-ftp/vsftpd-2.0.5-r3  USE="logrotate pam tcpd -caps (-selinux) -ssl -xinetd"

как видно, у меня до сих пор не стоит в системе logrotate. думаю пора бы его поставить. его настройка - в след. заметке.

Инстолим этот комплект.

Идем далее. и начинаем курить руководство =) видимо докуривать буду завтра =) когда будет готов точно рабочий конфиг =)

 

оригинал: http://butch.blog.ru/tag/vsftpd

 

запись файлов через FTP в правам все всем 777

write_enable=YES
local_umask=0000

мой конфиг vsftpd

{jcomments on}

Последнее обновление 05.10.11 14:53