centos下postgres数据库整改
一、前言说明
1.1针对版本
centos7.6下postgres9.6
1.2安装路径为:
/var/lib/pgsql/9.6/
1.3注意:
postgresql.auto.conf 优先级大于 postgresql.conf
****更改之前请备份!
1.4 重启服务命令
systemctl restart postgresql-9.6
使用 ALTER SYSTEM
修改的配置会被保存到auto.conf中
二、密码安全策略
2.1数据库未启用鉴别信息检查
开启强密码判断,需要统一改一次密码,建议开启passwordcheck.so模块
密码复杂度模块配置:
passwordcheck.so模块可以实现密码复杂度要求,此模块可以检查密码,如果密码太弱,他会拒绝连接
创建用户或修改用户密码时,强制限制密码的复杂度,限制密码不能重复使用.
配置文件中的 preload_libraries的几个字段可以预加载模块,passwordcheck.so
模块用于密码的复杂度校验
我们可以使用命令:(数据库登录后)
ALTER SYSTEM SET shared_preload_libraries = passwordcheck;
也可修改配置:
vi /var/lib/pgsql/9.6/data/postgresql.conf
取消注释,修改如下:
shared_preload_libraries = 'passwordcheck,auth_delay' # (change requires restart)
模块路径:/usr/pgsql-9.6/lib下,模块拷贝进去,授可执行权限
2.2 数据库未配置密码使用期限
方法一:pg_user
或pg_shadow
中:
select * from pg_user
列valuntil值为infinity或空值表示用户密码永不过期;默认为空
方法二:navicat 上修改
方法三:命令下更改有效期
postgres=# alter user tyj with valid until '2022-09-01 16:58:00';
select * from pg_user (或者select * from pg_shadow)
2.3数据库未实现登录超时自动退出
把idle_in_transaction_session_timeout=30000(配置文件里面更改,空闲时间断开设置,见2.3.3)
2.3.1登录失败处理
auth_delay.so模块
使用以下命令
postgres=# alter system set shared_preload_libraries=pg_stat_statements, passwordcheck,auth_delay;
注意这里启用了四个模块,如果需要启用多个模块需要用逗号隔开,引入的时候不要跟后缀(.so
)
启用完毕后重启Postgresql,否则将无法设置下一步的延迟时间
auth_delay.so模块会导致服务器在报告身份验证失败之前短暂停留,这个主要用于防止暴力破解. 验证失败后, 延迟一个时间窗口才能继续验证。请注意, auth_delay它不会做任何事情来预防DoS攻击,而且甚至可能会加重这些攻击,这是因为在报告认证失败之前等待的进程仍然会消耗连接槽。
2.3.2设置延迟时间
postgres=# alter system set auth_delay.milliseconds=5000;
重启数据库服务systemctl restart postgresql-9.6 (或是其他版本,则改下版本号即可)
2.3.3连接超时(可在配置文件里面更改,也可以使用pg_timeout)
ALTER SYSTEM SET idle_in_transaction_session_timeout=900000; --空闲事务超时,单位为毫秒,此处为15分钟空闲就断开连接
ALTER SYSTEM SET tcp_keepalives_idle = 900; --TCP连接闲置超时,单位为秒,客户端异常断开连接
三、安全审计
3.1是否开启相关审计
3.1.1建议开启log_connections、log_disconnections 实现对用户登入、登出的记录
3.1.2建议messages至少为info级别(可不做)
log_min_messages (string)
控制写到数据库日志文件中的消息的级别。合法的取值是DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、INFO、NOTICE、WARNING、ERROR、 LOG、FATAL和PANIC,每个级别都包含排在它后面的所有级别中的信息。级别越低,数据库运行日志中记录的消息就越少。默认值是NOTICE。只有超级用户才能修改这个参数。只有超级用户才能设置这个参数。
3.1.3建议启用log_statement日志,并设置审计级别为mod以上
验证:登录数据库操作软件,查询(供参考,以实际更改为主)
3.2数据库日志保存时间不足六个月(当前为一周)
修改配置文件里面的日志保存文件
log_filename = ‘postgresql-%j.log’
3.3数据库终端接入地址未限制
建议对接入终端进行网络地址限制或其他方式进行限制
listen_addresses (string)
这个参数只有在启动数据库时,才能被设置。它指定数据库用来监听客户端连接的TCP/IP地址。默认是值是* ,表示数据库在启动以后将在运行数据的机器上的所有的IP地址上监听用户请求(如果机器只有一个网卡,只有一个IP地址,有多个网卡的机器有多个 IP地址)。可以写成机器的名字,也可以写成IP地址,不同的值用逗号分开,例如,’server01’, ’140.87.171.49, 140.87.171.21’。如果被设成localhost,表示数据库只能接受本地的客户端连接请求,不能接受远程的客户端连接请求。
修改postgres的系统文件pg_hba.conf 文档(/var/lib/pgsql/9.6/data)
重启服务:systemctl restart postgresql-9.6
3.4未重命名默认账户(暂不做处理)
建议重命名数据库默认账户或删除默认账户
3.4.1建立一个其他超级用户postgres1
CREATE USER postgres1 WITH
LOGIN
SUPERUSER
INHERIT
CREATEDB
CREATEROLE
REPLICATION;
ALTER USER postgres1 WITH PASSWORD 'postgres1@123456';
3.4.2用postgres1登陆,修改postgres名称
ALTER USER postgres RENAME TO admins;----重命名
ALTER USER admins WITH PASSWORD 'admins@123456$DB';---改密码
3.4.3弄完后,把postgres1用户删掉
3.5建议设立独立的系统管理员、数据库管理员、审计员(安全员)等岗位,并由不同人员进行担任,并为其设立不同权限的账户
------------------设置用户---------------
CREATE ROLE sysAdmin LOGIN CREATEDB CREATEROLE SUPERUSER PASSWORD 'kwu@019';
--密码以实际为主
CREATE ROLE dbAdmin LOGIN CREATEDB CREATEROLE PASSWORD 'kwu@29';
--密码以实际为主
CREATE ROLE sysAuditor LOGIN CREATEROLE PASSWORD 'kau@19';
--密码以实际为主
-----------------权限设置----------------
GRANT ALL ON DATABASE 数据库名 TO sysAdmin,dbAdmin;
--数据库权限
GRANT ALL ON ALL TABLES IN SCHEMA public TO sysAdmin,dbAdmin;
--默认public下全部表权限
GRANT UPDATE,SELECT,DELETE,INSERT ON ALL TABLES IN SCHEMA public TO sysAuditor;
============数据库用户操作日志
SELECT * FROM pg_stat_activity
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理