LINUX.ORG.RU

Fedora 41 и vsftpd 3.0.5 как настроить виртуальных пользователей не добавляя древностей?

 , ,


2

1

Здравствуйте.

Установил Fedora 41 (оф. Fedora-Everything-netinst-x86_64-41-1.4.iso) с предлагаемым в установке минимальным набором утилит. Добавил vsftpd (текущая, предлагаемая из оф. репозиториев - version 3.0.5) Сконфигурировал для двух виртуальных пользователей по прилагаемой к пакету vsftpd инструкции (/usr/share/doc/vsftpd/EXAMPLE/VIRTUAL_USERS/README) . При попытке соединения получаю

в журнале:

vsftpd[1492]: pam_userdb(ftp:auth): user_lookup: could not open database `/etc/vsftpd/login': No such file or directory

в log-файле:

Fri Dec 20 12:24:38 2024 [pid 1201] CONNECT: Client "127.0.0.1"
Fri Dec 20 12:24:38 2024 [pid 1201] FTP response: Client "127.0.0.1", "220 Welcome FTP service."
Fri Dec 20 12:24:46 2024 [pid 1201] FTP command: Client "127.0.0.1", "USER user"
Fri Dec 20 12:24:46 2024 [pid 1201] [user] FTP response: Client "127.0.0.1", "331 Please specify the password."
Fri Dec 20 12:24:52 2024 [pid 1201] [user] FTP command: Client "127.0.0.1", "PASS <password>"
Fri Dec 20 12:24:52 2024 [pid 1200] [user] FAIL LOGIN: Client "127.0.0.1"
Fri Dec 20 12:24:53 2024 [pid 1201] [user] FTP response: Client "127.0.0.1", "530 Login incorrect."
Fri Dec 20 12:24:53 2024 [pid 1201] FTP command: Client "127.0.0.1", "SYST"
Fri Dec 20 12:24:53 2024 [pid 1201] FTP response: Client "127.0.0.1", "530 Please login with USER and PASS."
Fri Dec 20 12:27:00 2024 [pid 1201] FTP command: Client "127.0.0.1", "QUIT"
Fri Dec 20 12:27:00 2024 [pid 1201] FTP response: Client "127.0.0.1", "221 Goodbye."

Непосредственно сама попытка:

$ ftp localhost
Trying ::1...
ftp: connect to address ::1В соединении отказано
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 Welcome FTP service.
Name (localhost:LaLe): user
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> quit
221 Goodbye.

Найти решение с помощью гугла не удалось. Поэтому установил Fedora 31

(Linux fc31x64-local 5.8.18-100.fc31.x86_64 #1 SMP Mon Nov 2 20:32:55 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux) и vsftpd-3.0.3-32.fc31.x86_64 , так же сконфигурировал для двух виртуальных пользователей. Получив удовлетворительный результат работы ftp-сервера, решил для себя (вдруг и неожиданно), что проблема не в vsftpd, а в пакете pam. Это была просто догадка. Взял из Fedora 31 файл pam_userdb.so и положил его в установленную Fedora 41 (/etc/vsftpd/lib/pam_userdb.so). В установленной Fedora 41 изменил путь к этому файлу (pam_userdb.so) в /etc/pam.d/ftp , указав на добавленный файл из Fedora 31, и получил удовлетворительный результат работы виртуальных пользователей и ftp-сервера в целом.

В Fedora 41 файл /usr/lib64/security/pam_userdb.so принадлежит пакету pam-1.6.1-7.fc41.x86_64

В Fedora 31 файл /usr/lib64/security/pam_userdb.so принадлежит пакету pam-1.3.1-25.fc31.x86_64

Программа vsftpd-3.0.5-8.fc41.x86_64 из Fedora 41 с прилагаемым вариантом конфигурации для виртуальных пользователей не работает при использовании необходимого pam_userdb.so непосредственно из дистрибутива, но успешно работает при использовании этого файла из пакета pam ниже версией.

Можно ли как-нибудь точнее определить причину почему так? Или, может быть, в инструкции (примере) по конфигурированию виртуальных пользователей из пакета vsftpd v.3.0.5 что-то не учли такого, имеющегосся в пакете pam-1.6.1-7.fc41.x86_64, чего не было в предыдущих версиях? Прошу понять (простить), но как-то не очень-то здорово притаскивать файло из старых пакетов. Спасибо за понимание.


Ответ на: комментарий от bigbit

Нет. В прилагаемой инструкции (примере) конфигурирования виртуальных пользователей чётко указано, что не надо добавлять «.db». Я строго придерживался инструкции (примеру). И не менял конфигурацию. Ещё раз: получается так, что конфигурация из примера-инструкции рабочая, и если использовать именно её, не допуская вольностей, то и работает, но…. При условии, если будет подходящий к этой инструции (примеру) файл pam_userdb.so

LaLe
() автор топика
Ответ на: комментарий от LaLe

Вот ты видишь сообщение:

vsftpd[1492]: pam_userdb(ftp:auth): user_lookup: could not open database `/etc/vsftpd/login': No such file or directory

Какая мысль должна была первой прийти тебе в голову?

А есть ли на самом деле на диске файлик /etc/vsftpd/login? Проверь.

bigbit ★★★★★
()
Ответ на: комментарий от anonymous

А вдруг найдётся человек, который подскажет как быстро найти действительную причину явления. Ну, я лишь предполагаю, что либо в pam что-то углубили/усилили/улучшили, что не учли в мануале к vsftpd, либо кто-то и как-то накосячил в pam и получилось нехорошо. Возможны и другие варианты, конечно. Но хотелось бы понять.

LaLe
() автор топика
Ответ на: комментарий от LaLe

То есть как это есть?

По инструкции ты должен был создать файл /etc/vsftpd/login.db, а не /etc/vsftpd/login. А файла /etc/vsftpd/login на диске быть не должно.

Ты что, не следовал инструкции?

bigbit ★★★★★
()
Ответ на: комментарий от bigbit
# ls -al /etc/vsftpd
итого 60
drwxr-xr-x    4 root root  4096 дек 20 23:46 .
drwxr-xr-x. 106 root root 12288 дек 20 23:45 ..
-rw-------    1 root root   125 авг 19 03:00 ftpusers
drwxr-xr-x    2 root root  4096 дек 20 23:52 lib
-rw-------    1 root root 12288 сен 12  2018 login.db
-rw-r--r--    1 root root    28 сен 12  2018 logins.txt
-rwx------    1 root root   169 сен 12  2018 useradd.sh
-rw-------    1 root root   361 авг 19 03:00 user_list
drwxr-xr-x    2 root root  4096 сен 12  2018 users
-rw-------    1 root root   636 фев  8  2020 vsftpd.conf
-rwxr--r--    1 root root   352 авг 19 03:00 vsftpd_conf_migrate.sh

# file /etc/vsftpd/login.db 
/etc/vsftpd/login.db: Berkeley DB (Hash, version 9, native byte-order)

# cat /etc/pam.d/ftp
auth required /etc/vsftpd/lib/pam_userdb.so db=/etc/vsftpd/login
account required /etc/vsftpd/lib/pam_userdb.so db=/etc/vsftpd/login

# cat /etc/vsftpd/useradd.sh 
#!/bin/bash
systemctl stop vsftpd.service
rm -f /etc/vsftpd/login.db
db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/login.db
systemctl start vsftpd.service
LaLe
() автор топика
Последнее исправление: LaLe (всего исправлений: 3)
Ответ на: комментарий от LaLe

Ну, вот, видишь, а говорил есть.
Нету у тебя этого файла. В этом и проблема.
Создай этот файл (либо добавь суффикс .db в конфиг PAM) все заработает. Видно в свежем PAM-модуле убрали добавление суффикса .db по умолчанию. Хочешь - отправь PR на обновление документации.

bigbit ★★★★★
()
Ответ на: комментарий от bigbit

И раньше не надо было добавлять «.db» в pam-е, и сейчас не надо. И это я тоже опробовал. Добавляй не добавляй - ошибочка одинаковая. Пользователь не авторизуется, файл какбэ не находится. Вот вы странный человек. Спасибо, конечно, что принимаете участие, но непонятно почему вы не желаете сами лично проверить. Это же совершенно мало времени займёт. Установить на виртуалочку fc41 и в соответствии с прилагаемым примером настроить парочку виртуальных пользователей для vsftpd. Ну, действительно - минут 15 уйдёт. И попробуйте залогиниться. :) Получите вот это самое, о чём я выше спрашиваю. Потом тупо поменяете so на предыдущую версию и всё заработает.

LaLe
() автор топика
Ответ на: комментарий от LaLe

Ты что, я уже давно ничего не делаю руками. Только советы даю.

А не работает скорее всего потому, что PAM пеерключился с Berkeley DB на GDBM. Попробуй вместо db_load gdbm_load.

bigbit ★★★★★
()
Ответ на: комментарий от bigbit

Вот этот ответ я и разыскивал. И вот это известие, что начиная с версии номер сорок в Fedora, например, для «стандартного» (описанного примером непосредственно в пакете) создания виртуальных пользователей для ftp-сервера vsftp теперь надо использовать GDBM: https://discussion.fedoraproject.org/t/f40-change-proposal-switch-pam-userdb-from-berkeleydb-to-gdbm-system-wide/89606

И действительно, после:

# gdbmtool

Вас приветствует gdbm. Введите ? для просмотра справки.

gdbmtool> open /etc/vsftpd/login.pag
gdbmtool> store user userpassword
gdbmtool> store superuser superuserpassword
gdbmtool> list
user userpassword
superuser superuserpassword
gdbmtool> quit

# file /etc/vsftpd/login.pag 
./login.pag: GNU dbm 1.x or ndbm database, little endian, 64-bit

# cat /etc/pam.d/ftp
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login.pag
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login.pag

Получается удовлетворительный результат. Спасибо вам огромнейшее.

LaLe
() автор топика