我目前正在尝试设置一个带有 PostgreSQL 身份验证的纯 ftpd 服务器,但是我无法让我的 FTP 服务器在登录期间与我的数据库进行通信。
作为背景,我的设置包括一台运行 Ubuntu Server 22.04 LTS 的 Linux 机器,该机器托管 IP 为 192.168.120.98 的 pure-ftpd 服务器。PostgreSQL 数据库托管在 IP 为 192.168.120.99 的单独服务器上。我已禁用两台服务器上的防火墙,并且可以在它们之间成功 ping 通。
但是,当我尝试登录 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 – 现在,当我尝试使用用户“test”通过 FileZilla 连接到 FTP 服务器时,我得到:
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]: ([email protected]) [INFO] New connection from 192.168.1.99
Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: ([email protected]) [DEBUG] Command [auth] [TLS]
Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: ([email protected]) [DEBUG] Command [auth] [SSL]
Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: ([email protected]) [DEBUG] Command [user] [test]
Jul 28 21:52:48 pure-ftpd-postgresql pure-ftpd[19921]: ([email protected]) [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 用户登录 - 出现相同的登录错误。但是,我发现如果我删除或重命名“/etc/pure-ftpd/conf”中的“PGSQLConfigFile”并重新启动 pure-ftpd,我就能够使用 Unix 帐户登录。这表明 PostgreSQL 配置是具体原因,因为当 PostgreSQL 文件不存在时,pure-ftpd 可以正常与 Unix 用户配合使用。
为了确认,我之前能够通过使用“pure-ftpd-mysql”包并修改“/etc/pure-ftpd/db”中的 mysql.conf 文件来使 pure-ftpd 与 MySQL 身份验证一起工作。
因此,PostgreSQL 配置似乎是问题的关键。我按照与 MySQL 设置相同的步骤进行操作,效果很好。但使用 PostgreSQL,尽管启用了详细日志记录,但我无法解决登录错误。我已经被这个问题困扰了好几天,所以任何帮助或调试建议都非常感谢!我真的需要 pure-ftpd 提供的 pure-uploadscript 功能。提前感谢您提供的任何指导