PostgreSQL本地免密登录问题及强制密码验证配置咨询
问题解答
一、为何当前配置允许本地免密登录?
PostgreSQL的pg_hba.conf是按从上到下的顺序匹配连接规则的,你的配置里有一条优先级很高的宽松规则:
local all all trust
local对应Unix域套接字的本地连接(你执行psql gitea gitea时默认用的就是这种连接方式,而非TCP/IP)trust认证方式意味着PostgreSQL直接放行连接,不需要任何密码验证
这条规则会先被匹配到,所以哪怕你给gitea用户设置了密码,本地套接字登录也会直接免密通过。
二、如何修改配置让"gitea"用户无论本地还是远程都必须验证密码?
1. 调整pg_hba.conf规则
PostgreSQL匹配规则是先到先得,要把针对gitea的严格规则放在前面,覆盖宽松的trust规则:
- 针对本地套接字连接:
在local all postgres peer这一行之后,添加专门针对gitea用户的规则:
如果你想让所有本地套接字连接都需要密码,也可以直接把原来的local gitea gitea scram-sha-256local all all trust改成:local all all scram-sha-256 - 针对远程TCP连接:
你已有针对本地TCP的gitea规则,若要允许特定远程IP访问并强制密码验证,添加类似规则(替换xxx.xxx.xxx.xxx/xx为允许的远程IP段):
注:推荐用host gitea gitea xxx.xxx.xxx.xxx/xx scram-sha-256scram-sha-256(比md5更安全),若gitea用户密码哈希不是scram格式,可执行命令更新:ALTER USER gitea WITH PASSWORD '你的密码' ENCRYPTED WITH scram-sha-256;
2. 重新加载配置生效
修改完pg_hba.conf后,无需重启服务,执行以下命令让配置生效:
sudo systemctl reload postgresql
或者用PostgreSQL内置命令:
psql -U postgres -c "SELECT pg_reload_conf();"
3. 验证效果
执行psql gitea gitea,此时会提示输入密码,正确输入后才能登录;远程连接gitea用户时也会要求验证密码。
内容的提问来源于stack exchange,提问作者Dowd
相关产品推荐
相关产品推荐

