手机网站首页经典案例,广告营销顾问,湖北外贸网站建设多少钱,北京封闭小区名单最新一、概述
客户端的身份验证是由配置文件控制的#xff0c;配置文件为pg_hba.conf#xff0c;存放位置在数据目录下#xff08;show data_directory;#xff09;。 在initdb初始化数据目录时#xff0c;会生成一个默认的pg_hba.conf文件。也可以将该配置文件存放在其他地方…一、概述
客户端的身份验证是由配置文件控制的配置文件为pg_hba.conf存放位置在数据目录下show data_directory;。 在initdb初始化数据目录时会生成一个默认的pg_hba.conf文件。也可以将该配置文件存放在其他地方。 pg_hba.conf文件的常用格式是一组记录每行一条。空白行和#注释字符后面的文本都将被忽略。 每条记录指定连接类型、客户端IP地址范围、数据库名称、用户名以及匹配这些参数连接使用的认证方法。 如果没有匹配的记录访问将被拒绝。 还可以当作黑白名单访问控制文件可以限制某些IP的机器允许访问数据库。
pg_hba.conf 文件示例
cat pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD# local is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0/0 md5
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust## ip/数值参数说明
ip/32表示只允许该ip地址访问如192.168.1.1
host all all 192.168.1.1/32 md5ip/24表示允许一个ip段之间的地址访问如192.168.1.1~192.168.1.255
host all all 192.168.1.0/24 md5ip/16表示允许两个ip段之间的地址访问如192.168.1.1~192.168.255.255
host all all 192.168.0.0/16 md5ip/8表示允许所有ip段之间的地址访问如192.1.1.1~192.255.255.255
host all all 192.0.0.0/8 md5ip/0表示允许所有ip地址访问
host all all 0.0.0.0/0 md5二、认证方式
2.1.trust
无条件的允许连接。 这种方法允许任何可以与PostgreSQL服务器连接的用户以任意PostgreSQL数据库用户身份登入而不需要口令或者其他认证。 此方式一般与UNIX域套接字的连接认证组合使用对于单用户的本地连接是非常安全和方便的。 为了防止系统其他普通用户连接到数据库可以设置套接字文件/tmp/.s.PGSQL.5432的权限限制访问。 可以设置unix_socket_directories和unix_socket_permissions参数重启生效或操作系统层面设置 chmod 770 .s.PGSQL.5432。
## 配置示例
cat pg_hba.conf
# local is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0/0 trust## 使更改生效
pg_ctl reload## 验证
[postgrespostgresql ~]$ psql
psql (15.4)
Type help for help.postgres# [postgrespostgresql ~]$ psql -h 192.168.80.239 -p 5432 postgres postgres
psql (15.4)
Type help for help.postgres# 2.2.md5
连接时需要提供口令进行验证口令以md5方式加密此方式安全性较高。
## 配置示例
cat pg_hba.conf
# local is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0/0 md5## 使更改生效
pg_ctl reload## 验证
[postgrespostgresql ~]$ psql
Password for user postgres:
[postgrespostgresql ~]$ psql -h 192.168.80.239 -p 5432 postgres postgres
Password for user postgres:2.3.password
连接时需要提供口令进行验证口令以明文的形式在网络上传输存在一定的安全隐患不建议使用。
## 配置示例
cat pg_hba.conf
# local is for Unix domain socket connections only
local all all password
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0/0 password## 使更改生效
pg_ctl reload## 验证
[postgrespostgresql ~]$ psql
Password for user postgres:
[postgrespostgresql ~]$ psql -h 192.168.80.239 -p 5432 postgres postgres
Password for user postgres:2.4.reject
无条件的拒绝连接。 可以阻止一个特定的主机连接而允许其他主机连接数据库相当于设置了访问黑名单。
## 配置示例
cat pg_hba.conf
# local is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.10.132 reject## 使更改生效
pg_ctl reload## 验证
会出现类似的错误现象FATAL: pg hba.conf rejects connection for host 192.168.10.132,user postgres, database postgres, no encryption2.5.ident
ident认证方式是通过联系客户端的ident服务器获取客户端操作系统的用户名并且检查它是否匹配被请求的数据库用户名。 ident认证只能在TCP/IP连接上使用。当为本地连接指定这种认证方式时将用peer认证来代替。 服务器为了确定接收到的连接请求确实是客户端机器上的某个用户发起的而不是这台机器上其他用户发起的假冒请求会向客户端机器上的ident服务发起请求让ident服务查看此TCP连接是否是该用户发起的如果不是则认证失败。 如果客户端通过本地连接连接到服务器因为客户端与服务器在同一台机器上数据库服务器可以直接检查客户端用户的操作系统用户身份就不需要向ident服务发送请求进行判断了。
实际上每个类 Unix 操作系统都带着一个默认监听 TCP 113 端口的 ident 服务器。这个过程的缺点是它依赖于客户端的完整性如果客户端机器不可信或者被攻破攻击者可能在 113 端口上运行任何程序并且返回他们选择的任何用户。因此这种认证方法只适用于封闭的网络这样的网络中的每台客户端机器都处于严密的控制下并且数据库和操作系统管理员操作时可以方便地联系。换句话说你必须信任运行 ident 服务器的机器。
此验证方式需要配合pg_ident.conf使用。 远程操作系统的当前用户名和数据库的用户名一致时可以直接使用此用户名登录而不需要密码。
## 安装oidentd服务
yum install -y oidentd
或
rpm -ivh oidentd-2.0.8-20.el7.x86_64.rpm ## 开启oidentd服务
systemctl start oidentd.service
systemctl status oidentd.service
systemctl enable oidentd.servicess -tlnp | grep 113
LISTEN 0 128 *:113 *:* users:((oidentd,pid19188,fd4))## 配置示例
cat pg_hba.conf
# local is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 ident mapcscat pg_ident.conf
# MAPNAME SYSTEM-USERNAME PG-USERNAME
cs postgres postgres
cs admin test## 使更改生效
pg_ctl reload## 验证
[rootpostgresql tmp]# su - postgres
[postgrespostgresql ~]$ psql -U postgres -h 192.168.80.239 -p 5432
psql (15.4)
Type help for help.postgres# select user;user
----------postgres
(1 row)[rootpostgresql ~]# su - admin
[adminpostgresql ~]$ psql -U test -h 192.168.80.239 -p 5432 postgres
psql (15.4)
Type help for help.postgres select user;user
------test
(1 row)2.6.peer
从操作系统获得客户端的操作系统用户并且检查它是否匹配被请求的数据库用户名这只对本地连接可用。 数据库端允许客户端上的特定操作系统用户连接到数据库。 这种认证方式的使用场景如下客户端是主机上某个操作系统用户已经通过了操作系统的身份认证是数据库服务器可以信任的用户不需要在数据库层面再次检测其身份。
## 配置示例
cat pg_hba.conf
# local is for Unix domain socket connections only
local all all peer mapcs
# IPv4 local connections:
host all all 127.0.0.1/32 trustcat pg_ident.conf
# MAPNAME SYSTEM-USERNAME PG-USERNAME
cs postgres postgres
cs admin test## 使更改生效
pg_ctl reload## 验证
[rootpostgresql tmp]# su - admin
[adminpostgresql ~]$ psql -U test postgres
psql (15.4)
Type help for help.postgres select user;user
------test
(1 row)