Почему pure-ftpd-postgresql не подключается к моей базе данных PostgreSQL?

В настоящее время я пытаюсь настроить чистый ftpd-сервер с аутентификацией PostgreSQL, но мне не удается заставить мой FTP-сервер обмениваться данными с моей базой данных во время входа в систему.

Для справки: моя установка состоит из машины Linux с Ubuntu Server 22.04 LTS, на которой размещен сервер pure-ftpd по IP 192.168.120.98. База данных PostgreSQL размещена на отдельном сервере по IP 192.168.120.99. Я отключил брандмауэры на обоих серверах и могу успешно пинговать между ними.

Однако когда я пытаюсь войти на FTP-сервер, он не может пройти проверку подлинности в базе данных. Я настроил pure-ftpd и сервер PostgreSQL на основе документации, но не могу определить, почему они не подключаются. Будем признательны за любые предложения по устранению этой проблемы с подключением между pure-ftpd и PostgreSQL.

1. Я установил пакет pure-ftpd-postgresql:

      sudo aptitude install pure-ftpd-postgresql

2. Я добавил эти файлы в папку /etc/pure-ftpd/conf:

      echo 'yes' > VerboseLog
echo 'yes' > ChrootEveryone 
echo 'yes' > CreateHomeDir
echo 'yes' > UnixAuthentication

3. Я добавил группы «ftpgroup» и «ftpuser»:

      groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

4. Я изменил файл конфигурации /etc/pure-ftpd/db/postgresql.conf, чтобы он выглядел следующим образом:

      PGSQLServer     192.168.120.99
PGSQLPort       5432  
PGSQLUser       pureftpd
PGSQLPassword   admin
PGSQLDatabase   custom_db
PGSQLCrypt      cleartext
PGSQLGetPW      SELECT "password" FROM users WHERE "username"='\L' 
PGSQLGetUID     SELECT "uid" FROM users WHERE "username"='\L'
PGSQLGetGID     SELECT "gid" FROM users WHERE "username"='\L'
PGSQLGetDir     SELECT "dir" FROM users WHERE "username"='\L'

5 - Я применил изменения:

      sudo /etc/init.d/pure-ftpd-postgresql restart

6. В базе данных PostgreSQL я создал пользователя с именем «pureftpd» и паролем «admin» и предоставил этому пользователю полные права.

7. Я создал базу данных под названием «custom_db»:

      CREATE TABLE users (
     id int NOT NULL PRIMARY KEY,  
     username varchar NOT NULL default '',
     Password varchar NOT NULL default '',
     Uid int NOT NULL default '2001',
     Gid int NOT NULL default '2001',
     Dir varchar NOT NULL default '',
     QuotaSize int NOT NULL default '0',
     ULBandwidth int NOT NULL default '0',
     DLBandwidth int NOT NULL default '0',
     UNIQUE KEY username (username)
);

8. Я создал пользователя с именем «test» с паролем «test» и домашним каталогом «/home/test».

9. Теперь, когда я пытаюсь подключиться к FTP-серверу с помощью FileZilla, используя пользователя «test», я получаю:

      Status: Connecting to 192.168.1.98:21...
Status: Connection established, waiting for welcome message...
Response: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
Response: 220-You are user number 1 of 50 allowed.
Response: 220-Local time is now 21:52. Server port: 21.
Response: 220-This is a private system - No anonymous login
Response: 220-IPv6 connections are also welcome on this server. 
Response: 220 You will be disconnected after 15 minutes of inactivity.
Command: AUTH TLS
Response: 500 This security scheme is not implemented
Command: AUTH SSL 
Response: 500 This security scheme is not implemented
Status: Server does not support non-ASCII characters.
Command: USER test
Response: 331 User test OK. Password required
Command: PASS ****
Error: Connection closed by server
Error: Failed to connect to server

10. Когда я проверяю журналы с помощью «journalctl | grep ftp', я получаю:

      Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: (?@192.168.1.99) [INFO] New connection from 192.168.1.99
Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: (?@192.168.1.99) [DEBUG] Command [auth] [TLS] 
Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: (?@192.168.1.99) [DEBUG] Command [auth] [SSL]
Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: (?@192.168.1.99) [DEBUG] Command [user] [test]
Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: (?@192.168.1.99) [DEBUG] Command [pass] [<*>]
Jul 28 21:52:48 pure-ftpd-postgresql kernel: pure-ftpd-postg[19921]: segfault at 1538 ip 00007fd8560889fa sp 00007ffe15f2b1f8 error 4 in libc.so.6[7fd855ff6000+195000]
Jul 28 21:52:48 pure-ftpd-postgresql kernel: Code: f3 0f 1e fa 66 0f ef c0 66 0f ef c9 66 0f ef d2 66 0f ef db 48 89 f8 48 89 f9 48 81 e1 ff 0f 00 00 48 81 f9 cf 0f 00 00 77 66 <f3> 0f 6f 20 66 0f 74 e0 66 0f d7 d4 85 d2 74 04 0f bc c2 c3 48 83
Jul 28 21:54:41 pure-ftpd-postgresql sudo[19846]: pam_unix(sudo:session): session closed for user root

Я также не могу войти в систему с собственными пользователями Unix - возникает та же ошибка входа. Однако я обнаружил, что если я удалю или переименую «PGSQLConfigFile» в «/etc/pure-ftpd/conf» и перезапущу pure-ftpd, я смогу войти в систему, используя учетные записи Unix. Это указывает на то, что конкретной причиной является конфигурация PostgreSQL, поскольку pure-ftpd обычно работает с пользователями Unix, когда файл PostgreSQL отсутствует.

Для подтверждения: ранее мне удалось заставить pure-ftpd работать с аутентификацией MySQL, используя пакет «pure-ftpd-mysql» и изменив файл mysql.conf в «/etc/pure-ftpd/db».

Таким образом, конфигурация PostgreSQL, похоже, является сутью проблемы. Я выполняю те же шаги, что и при настройке MySQL, и все работает нормально. Но с PostgreSQL я не могу преодолеть ошибку входа в систему, несмотря на то, что включено подробное ведение журнала. Я застрял на этом уже несколько дней, поэтому любая помощь или предложения по отладке приветствуются! Мне действительно нужна возможность pure-uploadscript, которую предоставляет pure-ftpd. Заранее благодарим за любые рекомендации, которые вы можете предоставить

0 ответов

Другие вопросы по тегам