安全性
最佳实践可以确保最高级别的系统安全性。
基础安全最佳实践
- 保护好gpadmin系统用户。Greenplum要求一个UNIX用户ID来安装和初始化Greenplum 数据库系统。这个系统用户在Greenplum文档中被称作gpadmin。gpadmin 用户是Greenplum数据库中的默认数据库超级用户,也是Greenplum安装及其底层数据文件的文件系统拥有者。默认 的管理员账户是Greenplum数据库设计的根本。没有它系统无法运行,并且也没有办法限制gpadmin 用户ID的访问。这个gpadmin用户可以绕过Greenplum数据库的所有安全性特性。任何人通过这一 用户ID登入到Greenplum主机,就可以读取、修改或者删除任何数据,包括系统目录数据和数据库访问权限。因此,非常 有必要保护好gpadmin用户ID并且只允许必要的系统管理员可以接触到它。只有在执行特定系统维 护任务(例如升级或扩展)时,管理员才应该作为gpadmin登入到Greenplum。数据库用户绝不应 作为gpadmin登录,并且也绝不应以gpadmin运行ETL或者生产负载。
- 为每个登入的用户分配一个不同的角色。为了日志和审计目的,每个被允许登入Greenplum数据库的用户应该被给定其 自己的数据库角色。对于应用或者Web服务,考虑为每种应用或者服务创建一个不同的角色。详情请见Greenplum数据库 管理员指南中的“创建新角色(用户)”部分。
- 使用组来管理访问特权。详情请见Greenplum数据库管理员指南中的“创建组(角色的成员关系)”部分。
- 限制拥有SUPERUSER角色属性的用户。作为超级用户的角色会绕过Greenplum数据库中的所有访问 特权检查,也会绕过资源队列。只有系统管理员才应该被给予超级用户权利。详情请见Greenplum数据库管理员指南 中的“修改角色属性”部分。
口令强度指导
为了保护网络不受侵入,系统管理员应该验证组织中使用的口令是强口令。下面的建议可以增强口令:
- 最小口令强度推荐:至少9个字符。MD5口令应该为至少15个字符。
- 混合大小写字母。
- 混合字母和数字。
- 包括非字母数字字符。
- 选择一个用户可以记住的口令。
下面推荐了一些可以用来确定口令强度的口令破解软件。
- John The Ripper。一种快速灵活的口令破解程序。它允许使用多个单词列表并且可以进行蛮力口令破解。 该程序可以从http://www.openwall.com/john/得到。
- Crack。可能是最著名的口令破解软件,Crack也非常快,但是可能不如John The Ripper那么易用。 该软件可以在http://www.crypticide.com/alecm/security/crack/c50-faq.html 得到。
整个系统的安全性依赖于root口令的强度。该口令应该至少长达12个字符并且包括大写字母、小写字母、特殊字符 和数字的组合。它不能基于任何词典中的词。
应该配置口令过期参数。
确保下面的行存在于文件/etc/libuser.conf的[import]小节中。
login_defs = /etc/login.defs
确保在[userdefaults]小节中没有以下列文本开头的行,因为这些词会覆盖来自 /etc/login.defs的设置:
- LU_SHADOWMAX
- LU_SHADOWMIN
- LU_SHADOWWARNING
确保下面的命令不会产生输出。通过这一命令列出的任何账号都应该被锁定。
grep "^+:" /etc/passwd /etc/shadow /etc/group
注意:我们强烈推荐客户在初始设置后更改他们的口令。
cd /etc
chown root:root passwd shadow group gshadow
chmod 644 passwd group
chmod 400 shadow gshadow
找出所有全域可写的文件以及没有设置其粘滞位的文件。
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
为前一个命令结果中的所有目录设置其粘滞位(# chmod +t {dir})。
找出所有全域可写的文件并且修正每一个被列出的文件。
find / -xdev -type f -perm -0002 -print
为前述命令给出的所有文件设置正确的权限(# chmod o-w {file})。
找出所有不属于有效用户或组的文件,然后为它们分配一个拥有者或者移除文件。
find / -xdev \( -nouser -o -nogroup \) -print
找出所有全域可写的目录并且确认它们属于root或者某个系统账户(假定只有系统账户的用户ID低于500)。 如果该命令生成输出,验证其分配是否正确或者将它们重新分配给root。
find / -xdev -type d -perm -0002 -uid +500 -print
口令质量、口令过期策略、口令重用、口令重试尝试以及更多认证设置可以通过可插拔认证模块(PAM)框架配置。 PAM在目录/etc/pam.d中查找应用相关的配置信息。运行authconfig 或者system-config-authentication将重写PAM配置文件,这会毁掉任何手工更改并且将 它们替换为系统默认配置。
默认的PAM模块pam_cracklib提供了口令的强度检查。要配置pam_cracklib 以要求至少一个大写字符、小写字符、数字和特殊字符(U.S.国防部指导方针推荐),可编辑文件/etc/pam.d/system-auth 并且在对应于口令前置条件pam_cracklib.so try_first_pass的行中包括下列参数。
retry=3:
dcredit=-1. Require at least one digit
ucredit=-1. Require at least one upper case character
ocredit=-1. Require at least one special character
lcredit=-1. Require at least one lower case character
minlen-14. Require a minimum password length of 14.
例如:
password required pam_cracklib.so try_first_pass retry=3\minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
可以设置这些参数来反映用户的安全性策略需求。注意口令限制不适用于root口令。
PAM模块pam_tally2提供了在指定失次数的败登录尝试之后锁住用户账户的功能。要实施口令封锁, 可编辑文件/etc/pam.d/system-auth来包括下列行:
第一个认证行应该包括:
auth required pam_tally2.so deny=5 onerr=fail unlock_time=900
第一个账户行应该包括:
account required pam_tally2.so
这里,deny参数被设置以限制重试次数为5并且unlock_time已经被设置为900秒来保持账户在 被解锁前锁定900秒。请配置这些参数以反映用户的安全性策略需求。被锁定的账户可以用pam_tally2 工具手工解锁:
/sbin/pam_tally2 --user {username} -reset
用户可以使用PAM限制重用最近用过的口令。可以设置pam_ unix模块的remember选项来记住最近 的口令并且阻止重用它们。要做到这一点,可在/etc/pam.d/system-auth中编辑适当的行来包括 remember选项。
例如:
password sufficient pam_unix.so [ … existing_options …]
remember=5
用户可以设置要记住的历史口令的数量以正确地反映其安全性策略需求。
cd /etc
chown root:root passwd shadow group gshadow
chmod 644 passwd group
chmod 400 shadow gshadow
Parent topic: Greenplum数据库最佳实践