Показаны сообщения с ярлыком ftp. Показать все сообщения
Показаны сообщения с ярлыком ftp. Показать все сообщения

вторник, 3 марта 2009 г.

vsftpd и pam_mkhomedir: «OOPS: Cannot change directory»

Столкнулся с тем, что модуль PAM pam_mkhomedir отказался работать с vsftpd. После захода на FTP не создаются домашние каталоги пользователей и соединение прерывается сообщением сервера об ошибке 500 «OOPS: Cannot change directory». А поиск в интернете ничего вразумительного не дал.
Как оказалось все решается одной строкой в «vsftpd.conf»:

session_support="YES"
Проблема возникает из-за того, что vsftpd по умолчанию не трогает модули сервиса session в PAM.

воскресенье, 16 марта 2008 г.

vsftpd и пользователи из базы LDAP.

Предполагается, что сервер каталогов openldap уже установлен и настроен.
Устанавливаем nss_ldap

# cd /usr/ports/net/nss_ldap
# make install
Отредактируем файл конфигурации /usr/local/etc/nss_ldap.conf
host small.server
base dc=small,dc=server
# Пользователь, которому разрешен просмотр каталога
binddn uid=proxy,dc=small,dc=server
# Пароль пользователя proxy
# Пароль не надо хешировать!
bindpw proxy-password
scope sub
bind_timelimit 3
bind_policy soft
nss_paged_results yes
pagesize 1000
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_password exop
nss_base_passwd ou=People,dc=small,dc=server?one
nss_base_shadow ou=People,dc=small,dc=server?one
nss_base_group ou=Group,dc=small,dc=server?one
Изменим следующие строки в /etc/nsswitch.conf
group: files ldap
passwd: files ldap
Проверяем работу nss_ldap
# id user-from-ldap
Должно выйти что-то похожее на
uid=10000(user-from-ldap) gid=10000(Group-from-LDAP) groups=10000(Group-from-LDAP)
Устанавливаем pam_ldap
#cd /usr/ports/security/pam_ldap
# make install
Отредактируем файл конфигурации pam_ldap: /usr/local/etc/ldap.conf
host small.server
base dc=small,dc=server
binddn uid=proxy,dc=small,dc=server
# Пароль не надо хешировать!
bindpw proxy-password
scope one
bind_timelimit 3
bind_policy soft
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_password exop
nss_base_passwd ou=People,dc=small,dc=server?one
nss_base_shadow ou=People,dc=small,dc=server?one
nss_base_group ou=Group,dc=small,dc=server?one
Установка самого сервера FTP
# cd /usr/ports/ftp/vsftpd
make config
В появившемся диалоге ставим галочку около опции RC_NG и далее
# make install
Ниже приведен файл конфигурации vsftpd: /usr/local/etc/vsftpd.conf
#Запрещаем анонимусов
anonymous_enable=NO
listen=YES
background=YES
# Указываем какую именно конфигурацию PAM использовать
pam_service_name=vsftpd
check_shell=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
# Скрываем какой именно сервер FTP у нас стоит
ftpd_banner=Welcome to FTP service.
# Помещаем пользователей в изолированное окружение
chroot_local_user=YES
pasv_min_port=49152
# Скрываем uid и gid файлов при просмотре директорий.
hide_ids=YES
local_umask=022
anon_umask=022
secure_chroot_dir=/usr/local/share/vsftpd/empty
Создаем файл конфигурации PAM: /usr/local/etc/pam.d/vsftpd
auth            required        /usr/local/lib/pam_ldap.so
account required /usr/local/lib/pam_ldap.so
# Если вы хотите разграничить доступ к ftp по группам
# можете дополнительно установить модуль pam_require
# и добавить приведенную ниже строку. Подробности тут
account required /usr/local/lib/pam_require.so no_case @Ftp:Users
# Строка для модуля pam_mkhomedir,
# избавляющего от необходимости ручного
# создания домашней директории для нового пользователя
session required /usr/local/lib/pam_mkhomedir.so mode=0700
Добавим следующую строку в /etc/rc.conf
vsftpd_enable="YES"
Запускаем сервер FTP и проверяем его работу :)
# /usr/local/etc/rc.d/vsftpd start

среда, 24 октября 2007 г.

ftp-proxy в freebsd

Дело было ранней зимой. Требовалось обеспечить доступ из интернета к ftp-серверу в локальной сети. Сперва решил тупо перенаправить на него порт 21 и порты выше 1025, но выглядело это не очень красиво.
В результате было решено поднять на шлюзе прокси-сервер для протокола ftp (ftp-proxy - портированный из openbsd вместе с pf) и настроить его для работы в обратную сторону.

Что нужно сделать:
1. Добавить в файл /etc/inetd.conf строку:
ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy -R <local-ftp-server> -S <local-net-if>

где
<local-ftp-server> - ip-адрес внутреннего ftp-сервера,
<local-net-if> - ip-адрес внутреннего интерфейса шлюза.
2. Настроить параметры запуска inetd в /etc/rc.conf:
inetd_enable="YES"
inetd_flags="-wW -c 60 -a 80.xx.yy.zz"

где 80.xx.yy.zz - внешний ip-адрес шлюза.
3. Настроить pf:
rdr on $ext_if proto tcp from any to $ext_ip port ftp tag TRAF_FTP -> 80.xx.yy.zz port 8021
< ... skip ... >
pass in on $ext_if reply-to proto tcp tagged TRAF_FTP flags S/SA keep state
pass out on $ext_if proto tcp from $ext_ip to any flags S/SA user proxy keep state
pass in on $ext_if proto tcp from any to $ext_ip flags S/SA user proxy keep state
pass out on $int_if proto tcp from $int_ip to any flags S/SA user proxy keep state
pass in on $int_if proto tcp from any to $int_ip flags S/SA user proxy keep state
где
$int_if - локальный интерфейс,
$int_ip - ip-адрес локального интерфейса,
$ext_if - внешний интерфейс,
$ext_ip - ip-адрес внешнего интерфейса,
proxy - имя пользователя ftp-proxy.
4. Запустить inetd.
# /etc/rc.d/inetd start

Прокси-сервер может работать в пассивном режиме. Работу в активном режиме не проверял.

P.S. Данные настройки действительны для семейства FreeBSD 6.x