vsftpd - PAM - MySQL и pam_mkhomedir для создания каталогов

11

Я успешно использую vsftpd с виртуальными пользователями, подключающимися через PAM к моей базе данных mysql. Теперь я хотел бы автоматизировать создание пользовательских каталогов с успешным соединением vsftpd.

Вот /etc/pam.d/vsftpd конфигурация:

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
account required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
session required pam_mkhomedir.so skel=/home/skel/ umask=0022 debug

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

Мой /etc/vsftpd/vsftpd.conf:

# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=YES

# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=vsftpd
chroot_local_user=YES
listen=YES

# here we use the authentication module for vsftpd to check users name and passw
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=YES
# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
download_enable=NO

force_local_data_ssl=NO
force_local_logins_ssl=NO

# PASV - passive ports for FTP 
pasv_enable=YES
pasv_min_port=14000
pasv_max_port=14100

Я увидел сообщение о том, что мне это нужно, в моем vsftpd.conf, поэтому я тоже попробовал:

session_support=YES

Но теперь, кажется, он больше не аутентифицируется, как показывают логи:

Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_keyinit(vsftpd:session): Unable to look up user "user1"
Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_mkhomedir(vsftpd:session): User unknown.

Это даже если я уже создал каталог. Теперь никто не может войти.

Есть идеи?

Том
источник
Привет, вы когда-нибудь были в состоянии решить эту проблему?
Джордж
@ Джордж Не совсем.
Том
Я решил проблему совершенно по-другому, отошел от vsftpd и перешел на pureftp. Настройка и запуск через пару часов без всех этих проблем. Работает отлично.
Джордж
/ home / vsftpd принадлежит vsftpd?
Лука Гибелли

Ответы:

0

Для успешного поиска пользователей по модулю PAM необходимо включить модуль NSS для MySQL в nsswitch.conf(5). nss_mysqlтвой друг.

Ашиш ШУКЛА
источник
Любые ссылки, которые вы можете предоставить по этому поводу? Кажется, я ничего не могу найти nss-mysqlв моем контексте?
Том
Как pam_mkhomedirопределить путь к домашнему каталогу пользователя, которого он должен создать? Как он узнает, какую базу данных использовать для разрешения пользователя? NSS предоставляет ему эту информацию. В вашем случае вам понадобится nss_mysql , при условии, что ваша база данных пользователей хранится в базе данных MySQL.
Ашиш ШУКЛА
Я просто пытаюсь узнать что-нибудь об этой библиотеке. Ссылка, которую вы предоставили, является очень старым проектом без документации. Если я установлю это, он не даст никаких указаний на то, что поместить в ваш nssswitch.conf. Только то, что он может содержать 3 параметра. Можете ли вы дать какое-либо руководство? Звучит так, будто pam_mysql - это то же самое, что и nss-mysql? У меня действительно работает pam_mysql, где он использует базу данных mysql для аутентификации с виртуальными пользователями vsftpd.
Том
PAM отличается от NSS . PAM нацелен на аутентификацию, тогда как цель NSS - разрешать имена (имена хостов, имена пользователей и т. Д.). Большинство дистрибутивов предоставляют пакет для nss_mysql, например, Debian и производные предоставляют его как libnss-mysql. И да, он не обновляется в течение полувека, но работает нормально. Как только вы установите модуль, сконфигурируете его и добавите в свой nsswitch.conf(5), все начнет работать для вас.
Ашиш ШУКЛА
Я добавил libnss-mysql из моего дистрибутива. Пробовал из коробки и ничего не работает. Любые идеи о том, что мне нужно изменить в nsswitch.conf?
Том
0

Вы можете попробовать использовать pam_script- это модуль pam, который позволяет выполнять произвольные сценарии оболочки после открытия пользовательского сеанса (среди прочих).

Вы можете найти pam_scriptздесь: https://github.com/jeroennijhof/pam_script . Его также можно установить через менеджеры пакетов, по крайней мере, я смог установить его через apt-get.

Будьте осторожны, поскольку vsftpd, по-видимому, имеет некоторые проблемы с pam_script, по крайней мере, когда он запрещает аутентификацию, см. Мой нерешенный вопрос: vsftpd зависает после неудачной аутентификации pam_script . Однако в вашем случае это не должно быть проблемой.

edziubudzik
источник
0

Короткий ответ: вы смешиваете учетные данные системы и службы и не должны (не можете?) Использовать pam_mkhomedir с виртуальными пользователями в vsftpd.

pam_mkhomedir предназначен для создания пользовательских локальных каталогов и предполагает, что пользователь определен в системе. Виртуальные пользователи в vsftpd не являются системными пользователями (по замыслу) и поэтому не имеют никаких привилегий вне службы vsftpd (система не знает этих пользователей). Использование PAM для аутентификации - это только проверка учетных данных пользователя (имя пользователя + пароль ==> ОК). Это может сбивать с толку при использовании виртуальных пользователей, поскольку vsftpd также может быть настроен на использование системных пользователей с PAM.

Когда вы создаете домашний каталог для виртуального пользователя , вы должны сделать учетную запись / группу службы vsftpd владельцем папки и поместить «виртуальный домашний каталог» в путь службы vsftpd с соответствующими разрешениями для службы vsftpd. Я не уверен, какую проблему вы пытаетесь решить, но, поскольку вы пользуетесь пользовательской сессией, я предполагаю, что вы пытаетесь создать некоторую изоляцию между пользователями. Поскольку вы должны создать виртуального пользователя в своей пользовательской базе данных, чтобы он мог войти в систему, почему бы не создать домашний каталог одновременно? Я сделал это, используя скрипт для добавления / изменения / удаления пользователя, чтобы обеспечить согласованность виртуальной пользовательской базы данных и виртуальных домашних папок пользователя vsftpd. YMMV.

Просто помните, что с виртуальными пользователями вы работаете только в vsftpd, а не в системе.

Яро
источник