Ident
Ident 服务器回答了一个简单的问题:哪些用户从您的端口 X 发起连接并连接到我的端口 Y? 在 PostgreSQL 服务器的环境下,它将通知正在尝试登录的用户帐户的 Identity 所在的 DBMS。PostgreSQL 随后获得这个问题的答案,并根据由 DBA 在相应配置文件中配置的规则集允许或拒绝登录。
PostgreSQL Ident 服务器身份验证机制的工作原理是使用主机自己的 Ident 服务器,将 PostgreSQL 用户帐户映射到 UNIX 用户帐户。
下 面的例子假设所有 UNIX 用户帐户都已经被映射到 PostgreSQL 中,能够登录到任何数据库,前提是它们在 PostgreSQL 中使用相同的帐户名。如果 UNIX 用户名在 PostgreSQL 服务器中不存在对应的用户名,或者如果尝试使用另一个 用户帐户名登录,那么登录将失败。
假设您已经通过 SSH 连接到主机:ssh -l robert wolf。
清单 20. 失败的和成功的登录
robert@wolf:~$ psql -U robert robertWelcome to psql 8.2.4, the PostgreSQL interactive terminal.Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quitrobert@wolf:~$ psql -U postgres robertpsql: FATAL: Ident authentication failed for user "postgres"-- This works, su to become the UNIX user account postgres
PostgreSQL 使用两个文件管理并控制已通过 Ident 服务器身份验证的用户的所有登录会话:
pg_hba.conf
通过一个文件中定义的记录控制访问。
pg_Ident.conf
当 Ident 服务被用作用户帐户的认证者authenticator)时发挥作用。比如,METHOD 在 pg_hba.conf 文件中被识别为 Ident。
清单 21. 简单配置示例
Example 1: A LOCALHOST connection enforces unix account robert to access database robert exclusively. There is no authentication on UNIX domain sockets.(pg_hba.conf)# TYPE DATABASE USER CIDR-ADDRESS METHOD OPTION host all all 127.0.0.1/32 Ident mymap local all all trust(pg_Ident.conf)# MAPNAME Ident-USERNAME PG-USERNAME mymap robert robertExample 2: A domain socket connection enforces unix account robert to access any database as pg account robert; unix account postgres can access any database as user robert.(pg_hba.conf)# TYPE DATABASE USER CIDR-ADDRESS METHOD OPTION local all all Ident mymap host all all 127.0.0.1/32 trust(pg_Ident.conf)# MAPNAME Ident-USERNAME PG-USERNAME mymap robert robert mymap postgres robertExample 3: A domain socket connection enforces that unix account can connect to any database with its postgres database namesake using thekeyword "sameuser". pg_Ident.conf is not necessary here. Local host connections via TCP-IP are rejected.(pg_hba.conf)# TYPE DATABASE USER CIDR-ADDRESS METHOD OPTION local template0,template1 all Ident sameuser host all all 127.0.0.1/32 rejectEx4: (all users can connect with their own user names only to the databases postgres and robert)(pg_hba.conf)# TYPE DATABASE USER CIDR-ADDRESS METHOD OPTION local template0,template1 all Ident sameuser
牢记下面的注意事项:
•配置修改在您重新加载文件后立即生效,比如重新加载 pg_ctl -D mycluster。
•不同的配置设置会引起奇怪的行为。在日志中查看失败的配置消息。
•当机器本身被认为是安全的时,将设计并实现 Ident。任何试图进行身份验证的远程服务器都应当被认为是可疑对象。
•Ident 服务器只用于对本地主机连接进行身份验证。
数据加密
有许多种方式会使您不经意地将自己暴露给 intranet 内部的骇客。
让我们来执行一次嗅探sniff)。假设您在自己的本地主机 192.168.2.64 上执行以下命令:tcpdump -i eth0 -X -s 3000 host 192.168.2.100 and port 5432。
在一个远程主机 192.168.2.100 上,您连接到您的本地主机的 PostgreSQL 服务器,后者已经在侦听端口 5432:psql -h 192.168.2.64 -p 5432 -U postgres postgres。注意修改您的超级用户帐户 postgres 的密码:ALTER USER postgres WITH ENCRYPTED PASSWORD 'my_new_password';。
清单 22. 在被嗅探的数据转储中识别密码
16:39:17.323806 IP wolf.56336 > laptop.postgresql: P 598:666(68) ack 470 win 3068