OOPS: не удается прочитать файл списка пользователей: /etc/vsftpd.user_list ошибка с VSFTP, использующим MySQL в качестве бэкенда пользователей.

Вопрос или проблема

Я хочу настроить сервер VSFTP на Ubuntu 22.04.4 с MySQL в качестве базы данных для хранения пользователей.

Я использовал этот гид для его настройки (он предназначен для CentOS, но за исключением части о pam_mysql.so, он применим и к Ubuntu).

Вот моя конфигурация:

  • /etc/vsftpd.conf
anonymous_enable=NO
pasv_addr_resolve=YES
pasv_address=ftp.company.com
pasv_min_port=40000
pasv_max_port=41000

local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES

nopriv_user=vsftpd
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
#user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES
pasv_enable=YES
  • /etc/pam.d/vsftpd
#%PAM-1.0
session       optional        pam_keyinit.so       force revoke
auth required pam_mysql.so user=vsftpd passwd=mypassword  host=localhost db=vsftpd table=accounts usercolumn=username   passwdcolumn=pass crypt=3
account required pam_mysql.so user=vsftpd passwd=mypassword host=localhost db=vsftpd table=accounts usercolumn=username  passwdcolumn=pass crypt=3
  • Таблица аккаунтов MySQL
mysql> select * from accounts;
+----+-----------------------------------+----------------------------------+
| id | username                          | pass                             |
+----+-----------------------------------+----------------------------------+
|  1 | [email protected]                  | [passwordhash]                   |
+----+-----------------------------------+----------------------------------+
1 row in set (0.00 sec)

На локальном тестовом сервере в VirtualBox всё работает нормально, однако когда я использую ту же конфигурацию на производственном сервере, я получаю следующую ошибку при подключении к FTP-серверу с помощью winSCP:

OOPS: cannot read user list file:/etc/vsftpd.user_list

Поэтому, по всей видимости, vsftp не использует подключение к MySQL для извлечения пользователей, а ищет файл userlist, который, конечно, отсутствует.

Пока что я проверил следующее:

  • Убедился, что libpam-mysql и mysql-client установлены
  • Проверил возможность подключения к базе данных MySQL с учетными данными vsftpd
  • Отключил iptables, чтобы это не мешало подключению к базе данных

Но пока я не смог решить эту проблему. Разочаровывает то, что это работает на моем экземпляре VirtualBox, но я не вижу никакой разницы между этим экземпляром и производственным экземпляром.

Как мне устранить неполадки в соединении между vsftpd и MySQL?

Моя производственная среда:

  • Ubuntu 22.04.4
  • MySQL 8.0.36
  • vsftpd 3.0.5
  • iptables v1.8.7

При дальнейшей проверке я заметил следующую ошибку в /var/log/auth.log

pam_mysql - MySQL error (Access denied for user 'vsftpd'@'localhost' (using password: YES))

Как я и думал, vsftpd не может подключиться к базе данных MySQL. Я, похоже, решил это, создав нового пользователя: vsftpd_user и новую базу данных vsftpd_db, а затем воссоздав привилегии и таблицы для vsftpd. У меня не было никаких дальнейших проблем с подключением vsftpd к MySQL таким образом, поэтому, вероятно, возникла некоторая путаница из-за использования одного и того же имени для базы данных и пользователя.

Ответ или решение

Чтобы решить ошибку OOPS: cannot read user list file:/etc/vsftpd.user_list при использовании VSFTP с MySQL в качестве бэкенда пользователей, необходимо учитывать несколько ключевых аспектов конфигурации и подключения к базе данных.

1. Проблема с доступом к MySQL

Ошибка, которую вы увидели в /var/log/auth.log:

pam_mysql - MySQL error (Access denied for user 'vsftpd'@'localhost' (using password: YES))

указывает на то, что учетная запись ‘vsftpd’ не имеет прав доступа к базе данных. Для решения этой проблемы вы уже предприняли шаги по созданию нового пользователя и базы данных, что является правильным решением. Однако, если вы все еще работаете с учетной записью ‘vsftpd’, убедитесь, что она создана и ей предоставлены необходимые привилегии. Ваша команда для предоставления прав может выглядеть следующим образом:

GRANT ALL PRIVILEGES ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'mypassword';
FLUSH PRIVILEGES;

2. Убедитесь в правильности конфигурации pam.d

Ваш файл /etc/pam.d/vsftpd выглядит корректно, но важно, чтобы pam_mysql.so был установлен и правильно настроен. Убедитесь, что у вас установлены все необходимые зависимости, и что пакет libpam-mysql корректно сконфигурирован.

3. Параметры конфигурации VSFTP

Согласно вашей конфигурации /etc/vsftpd.conf, параметр userlist_enable=YES будет заставлять сервер проверять наличие файла /etc/vsftpd.user_list для списка разрешенных пользователей. Если у вас нет этого файла, вы можете либо создать его и добавить туда пользователей, либо установить параметр userlist_enable=NO, если вы полностью полагаетесь на MySQL для аутентификации.

4. Проверка логов

Если сервер все еще не работает, внимательно посмотрите другие логи, такие как /var/log/vsftpd.log и /var/log/syslog, чтобы получить более детальную информацию о проблемах.

5. Перезапуск службы

После внесения всех изменений в конфигурацию не забудьте перезапустить службу VSFTPD:

sudo systemctl restart vsftpd

6. Тестирование подключения

После настройки и перезапуска службы вы можете протестировать подключение к FTP-серверу с помощью клиента, такого как WinSCP, чтобы убедиться, что все работает как задумано.

Заключение

Если вы соблюдаете все вышеперечисленные шаги и проблемы все еще сохраняются, рекомендуется проверить настройки SELinux, если они включены, или другие элементы безопасности, которые могут мешать соединению между VSFTP и MySQL. Кроме того, убедитесь, что сервер может корректно разрешать DNS-имя, если это применимо, и что сеть настроена корректно без ограничений на порты, используемые сервером (например, 21 для FTP).

Оцените материал
Добавить комментарий

Капча загружается...