proftpd - postgres 集成问题

proftpd - postgres 集成问题

我还不能发布图片,所以我会尽我所能简洁地解释一切。

我有一个可以正常工作的 ProFTPd 安装。现在我尝试通过 postgres 路由身份验证。有一个数据库包含一个 webapp 用户表。理想情况下,这将允许 webapp 用户使用他们的 webapp 凭据登录 FTP。以下是 proftpd.conf 文件中的相关设置:

LoadModule mod_sql.c

LoadModule mod_sql_passwd.c

LoadModule mod_sql_postgres.c

#Begin SQL configuration
#mod_sql_password parameters
SQLPasswordEngine           on
SQLPasswordEncoding         hex

#mod_sql base configuration
SQLEngine               on
SQLBackend              postgres
SQLConnectInfo          [database_name]@localhost:5432 [SELECT name] [password]
SQLAuthTypes            SHA1
SQLAuthenticate         users
SQLLogFile              /var/log/proftpd/sqlLog.txt

“SELECT name”帐户是被授予了对 webapp users 表的 SELECT 权限的帐户。我可以使用以下命令从命令行登录该用户

psql -d [database_name] -U [SELECT name] -W 

然后输入与 proftpd.conf 文件中相同的密码。

当我尝试连接时,它会生成以下日志文​​件数据:

Feb 21 10:20:00 mod_sql/4.2.5[43238]: entering  postgres cmd_exit
Feb 21 10:20:00 mod_sql/4.2.5[43238]: exiting   postgres cmd_exit
Feb 21 10:29:45 mod_sql/4.2.5[43334]: defaulting to 'postgres' backend
Feb 21 10:29:45 mod_sql/4.2.5[43334]: backend module 'mod_sql_postgres/4.0.4'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: backend api    'mod_sql_api_v1'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: >>> sql_sess_init
Feb 21 10:29:45 mod_sql/4.2.5[43334]: entering  postgres cmd_defineconnection
Feb 21 10:29:45 mod_sql/4.2.5[43334]:  name: 'default'
Feb 21 10:29:45 mod_sql/4.2.5[43334]:  user: [SELECT account]
Feb 21 10:29:45 mod_sql/4.2.5[43334]:  host: 'localhost'
Feb 21 10:29:45 mod_sql/4.2.5[43334]:    db: [database_name]
Feb 21 10:29:45 mod_sql/4.2.5[43334]:  port: '5432'
Feb 21 10:29:45 mod_sql/4.2.5[43334]:   ttl: '0'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: exiting   postgres cmd_defineconnection
Feb 21 10:29:45 mod_sql/4.2.5[43334]: mod_sql engine     : on
Feb 21 10:29:45 mod_sql/4.2.5[43334]: negative_cache     : off
Feb 21 10:29:45 mod_sql/4.2.5[43334]: authenticate       : users 
Feb 21 10:29:45 mod_sql/4.2.5[43334]: usertable          : users
Feb 21 10:29:45 mod_sql/4.2.5[43334]: userid field       : userid
Feb 21 10:29:45 mod_sql/4.2.5[43334]: password field     : passwd
Feb 21 10:29:45 mod_sql/4.2.5[43334]: UID field          : uid
Feb 21 10:29:45 mod_sql/4.2.5[43334]: GID field          : gid
Feb 21 10:29:45 mod_sql/4.2.5[43334]: homedir field      : homedir
Feb 21 10:29:45 mod_sql/4.2.5[43334]: homedir(default)   : [redacted]
Feb 21 10:29:45 mod_sql/4.2.5[43334]: shell field        : shell
Feb 21 10:29:45 mod_sql/4.2.5[43334]: SQLMinUserUID      : 999
Feb 21 10:29:45 mod_sql/4.2.5[43334]: SQLMinUserGID      : 999
Feb 21 10:29:45 mod_sql/4.2.5[43334]: <<< sql_sess_init
Feb 21 10:29:45 mod_sql/4.2.5[43334]: >>> sql_pre_pass
Feb 21 10:29:45 mod_sql/4.2.5[43334]: <<< sql_pre_pass
Feb 21 10:29:45 mod_sql/4.2.5[43334]: >>> cmd_getpwnam
Feb 21 10:29:45 mod_sql/4.2.5[43334]: entering  postgres cmd_escapestring
Feb 21 10:29:45 mod_sql/4.2.5[43334]: entering  postgres cmd_open
Feb 21 10:29:45 mod_sql/4.2.5[43334]: exiting   postgres cmd_open
Feb 21 10:29:45 mod_sql/4.2.5[43334]: exiting   postgres cmd_escapestring
Feb 21 10:29:45 mod_sql/4.2.5[43334]: unrecoverable backend error
Feb 21 10:29:45 mod_sql/4.2.5[43334]: error: 'mod_sql_postgres/4.0.4'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: message: 'FATAL:  Ident authentication failed for user [SELECT account]
'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: entering  postgres cmd_exit
Feb 21 10:29:45 mod_sql/4.2.5[43334]: exiting   postgres cmd_exit

所以我现在完全不知所措,因为我不确定为什么在命令行登录中可以使用的相同凭据在 proftpd.conf 中使用时不起作用。有人能给我建议下一步该怎么做吗?谢谢!

答案1

好的,我找到了这个问题的答案,以防将来有人遇到它。

因此,错误日志看起来好像 Postgres 拒绝了我的有效凭据。但事实并非如此!在 proftpd.conf 文件中,proftpd 默认尝试以用户和组“nobody”的身份登录。“nobody”是服务器上实际有效的用户,但关联的 ID# 通常很低。在我的情况下是 99。

现在,使用 mod_sql 时,有一个名为SQLMinID。默认情况下,该值设置为 999。这就是阻止我登录的原因!

为了解决这个问题,我只需将 proftpd.conf 中的“用户”和“组”参数设置为具有更高 ID 号且具有足够权限访问 postgres 的用户。我这样做后,它就起作用了。

相关内容