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
image
取消注释,修改如下:
shared_preload_libraries = 'passwordcheck,auth_delay' # (change requires restart)
模块路径:/usr/pgsql-9.6/lib下,模块拷贝进去,授可执行权限

2.2 数据库未配置密码使用期限

方法一:pg_userpg_shadow中:
select * from pg_user
列valuntil值为infinity或空值表示用户密码永不过期;默认为空
image
方法二:navicat 上修改
image
方法三:命令下更改有效期
postgres=# alter user tyj with valid until '2022-09-01 16:58:00';
select * from pg_user (或者select * from pg_shadow)
image

2.3数据库未实现登录超时自动退出

把idle_in_transaction_session_timeout=30000(配置文件里面更改,空闲时间断开设置,见2.3.3)
image

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 实现对用户登入、登出的记录

image

3.1.2建议messages至少为info级别(可不做)

log_min_messages (string)
控制写到数据库日志文件中的消息的级别。合法的取值是DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、INFO、NOTICE、WARNING、ERROR、 LOG、FATAL和PANIC,每个级别都包含排在它后面的所有级别中的信息。级别越低,数据库运行日志中记录的消息就越少。默认值是NOTICE。只有超级用户才能修改这个参数。只有超级用户才能设置这个参数。
image

3.1.3建议启用log_statement日志,并设置审计级别为mod以上

image
image

验证:登录数据库操作软件,查询(供参考,以实际更改为主)
image

3.2数据库日志保存时间不足六个月(当前为一周)

image
image

修改配置文件里面的日志保存文件
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)
image
重启服务: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

posted @   tangtangtu  阅读(716)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示