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? У мене пам_mysql працює там, де він використовує mysql db для автентифікації з віртуальними користувачами vsftpd.
Том,

PAM не є такою ж, як NSS . PAM орієнтована на автентифікацію, тоді як мета NSS - вирішувати імена (імена хостів, імена користувачів тощо). Більшість дистрибутивів надають пакет для nss_mysql, наприклад, Debian та його похідні надають як libnss-mysql. Так, так, вона не оновлюється протягом півдесяти років, але працює чудово. Щойно ви встановите модуль, налаштуйте його та додайте його до свого nsswitch.conf(5), речі почнуть працювати для вас.
Ashish SHUKLA

Я додав libnss-mysql зі свого дистрибутива. Спробував з коробки, і нічого не працює. Будь-які ідеї щодо того, що мені потрібно змінити в nsswitch.conf?
Том

0

Ви можете спробувати скористатися pam_script- це модуль пам’яті, який дозволяє виконувати довільні сценарії оболонки після відкриття сеансу користувача (серед інших).

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

Будьте обережні, оскільки, здається, vsftpd має деякі проблеми з pam_script, принаймні, коли він заперечує автентифікацію, дивіться моє невирішене питання: vsftpd заморожується після невдалої автентифікації pam_script . Однак у вашому випадку це не повинно бути проблемою.


0

Коротка відповідь полягає в тому, що ви змішуєте облікові дані системи та сервісу, і ви не повинні (не можете?) Використовувати pam_mkhomedir з віртуальними користувачами в vsftpd.

pam_mkhomedir призначений для створення локальних каталогів користувачів та передбачає, що користувач визначений у системі. Віртуальні користувачі vsftpd - це не користувачі системи (за задумом) і як такі не мають привілеїв поза службою vsftpd (система не знає цих користувачів). Використання PAM для аутентифікації - це лише передача перевірки облікових даних користувачів (ім'я користувача + пароль ==> ОК). Це може заплутати при використанні віртуальних користувачів, оскільки vsftpd також може бути налаштований на використання системних користувачів з PAM.

Коли ви створюєте домашній каталог для віртуального користувача , ви повинні зробити обліковий запис / групу служб vsftpd власником папки та розмістити "віртуальний домашній каталог" в межах службового шляху vsftpd з відповідними perms для служби vsftpd. Я не впевнений, яку проблему ви намагаєтеся вирішити, але, коли ви хронізуєте сеанс користувача, я припускаю, що ви намагаєтесь створити певну ізоляцію між користувачами. Оскільки ви повинні створити віртуального користувача у базі даних користувачів, щоб вони могли увійти, чому б не створити домашній каталог одночасно? Я зробив це за допомогою сценарію для додавання / зміни / видалення користувача, щоб зберегти базу даних віртуальних користувачів та віртуальні домашні папки vsftpd користувача. YMMV.

Пам'ятайте лише, що з віртуальними користувачами ви працюєте лише в vsftpd, а не в системі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.