主机系统安全配置标准-UNIX
V 1.1
中国石化
2006年03 月30 日
文档控制
| 拟 制: | |
| 审 核: | |
| 标准化: | |
| 读 者: |
| 版本 | 提交日期 | 相关组织和人员 | 版本描述 |
| V1.0 | 2005-12-08 | ||
| V1.1 | 2006.03.30 |
目 录
1 概述 1
1.1 适用范围 1
1.2 实施 1
1.3 例外条款 1
1.4 检查和维护 1
2 适用版本 2
3 业务使用警告 2
4 用户帐户设置 2
4.1 UID-用户ID基本要求 2
4.2 UNIX中Root安全标准 3
4.3 默认系统帐户安全标准 3
4.4 密码要求 5
4.5 密码保护 7
4.6 登陆失败次数 7
4.7 GID-组ID的基本要求 7
5 网络设置 8
5.1 IP协议栈的安全设置 8
5.1.1 套接字队列长度定义用来防护SYN攻击 8
5.1.2 重定向 8
5.1.3 源站路由 9
5.1.4 TIME_WAIT设置 9
5.1.5 ECHO回应广播 9
5.1.6 地址掩码查询和时间戳广播 10
5.2 /etc/hosts.equiv, .rhosts和.netrc配置文件 10
5.3 X Window系统 11
5.4 其他网络服务安全设置标准: 11
5.5 /etc/hosts.deny和/etc/hosts.allow的配置规范 12
6 权限控制 13
6.1 用户文件和HOME目录属性 13
6.2 操作系统资源 13
7 操作系统补丁管理 14
8 审计策略 14
8.1 系统访问日志 14
8.2 日志记录保存期限 14
8.3 Sudo日志记录 14
9 附则 15
9.1 文档信息 15
9.2 其他信息 15
1概述
安全配置标准提供中国石油化工股份有限公司(下简称“中国石化”)UNIX操作系统应当遵循的安全性设置的标准,本文档旨在帮助系统管理人员,利用UNIX操作系统内建的安全配置,以建立一个更为安全的环境。
1.1适用范围
本规范的使用者包括:
主机系统管理员、应用管理员、网络安全管理员。
本规范适用的范围包括:
支持中国石化运行的AIX,Solaris和Linux(Redhat Linux)主机系统。
1.2实施
本规范的解释权和修改权属于中国石化,在本标准的执行过程中若有任何疑问或建议,应及时反馈。
本标准一经颁布,即为生效。
1.3例外条款
欲申请本标准的例外条款,申请人必须准备书面申请文件,说明业务需求和原因,送交中国石化信息系统管理部门进行审批备案。
1.4检查和维护
根据中国石化经营活动的需要,每年检查和评估本标准,并做出适当更新。如果在突发事件处理过程中,发现需对本标准进行变更,也需要进行本标准的维护。
任何变更草案将由中国石化IT管理部门进行审核批准。各相关部门经理有责任与其下属的组织和员工沟通变更的内容。
2适用版本
AIX 版本5.1, 5.2, 5.3;
Solaris 7,8,9
Redhat Linux 7.2, 7.3
3业务使用警告
要求设置业务使用提示警告:
| 系统值/参数 | 内容 |
| /etc/motd | 中国石化内部生产系统只能因中国石化业务需要而使用,经由管理层授权。中国石化管理层将随时监测此系统的使用。 或 SinoPEC production server can only be used for business purpose, with appropriate manager team’s authorization. SinoPEC manager team will monitor the usage of this system. |
4.1UID-用户ID基本要求
| 系统值/参数 | 描述 | 设置要求 |
| UID | 适用于所有的UID | 每个UID必须只能用一次,并唯一对应一个操作系统用户帐号。 |
对于系统Root帐户必须满足以下要求:
Root帐户的UID必须是唯一的0;
Root帐户是root组的唯一用户;
Root帐户必须在每个系统本地有相关定义;
Root帐户和目录下不能存在/root/.rhosts或/root/.netrc文件,如果存在也必须为空,而且文件所有者和所有组必须为root和root组。其相关权限为r-------;
Root的登录脚本中不能使用到非root帐户拥有的文件或拥有全局读写权限的文件。
Root的cron jobs中不能使用到非root帐户拥有的文件或拥有全局读写权限的文件。
对于root所运行的命令必须使用全路径. (例如. /bin/su),或对于root的$PATH环境变量中不能含有相对当前目录(.), 相对子目录(./)和相对父目录(..)定义;
root 帐号不允许进行远程登录操作,远程需要root的访问需求,必须要求使用普通个人用户帐号进行登录后通过SU命令切换到root帐号。
REDHAT: 可以通过在/etc/securetty配置文件实现root的登录控制,/etc/securetty文件中包含了所有的可供root登录的TTY端口,这个配置文件在默认的状态下只包括了物理终端console TTY
必须有相应的日志记录来跟踪成功或失败的su尝试。这个功能可以通过使用pam_wheel模块来实现。在/etc/pam.d/su添加如下auth required /lib/security/pam_wheel.so debug group=sinoadmin配置信息来确保只有在sinoadmin系统组的成员帐号才可以使用/bin/su命令切换到root。要添加一个用户到这个系统组,可以使用如下命令来实现:
#usermod -G sinoadmin userid (userid=the userid)
SOLARIS: 对于root的物理终端console登录可以通过在/etc/default/login配置文件中添加CONSOLE=/dev/console配置行来实现。
AIX:在/etc/security/user配置文件中的root帐号的配置段落必须存在rlogin = false的配置定义,以此来实现Root的物理终端console登录。
4.3默认系统帐户安全标准
对于UID从1到99必须保留给默认系统帐号或应用系统帐号使用,通常对于这些用户不需要登录访问,故此可以通过在/etc/shadow (REDHAT or SOLARIS) 或/etc/security/passwd (AIX) 文件相关的口令字段中设置“*”号来实现。
REDHAT: 对于安装过程会建立许多通常不需要使用的系统帐号。对于下列的系统用户帐号可以锁定或删除(如没有相关的使用需求)。
nfsnobody
games
rpc
postgres
nscd
news
gopher
named
rpcuser
SOLARIS: 对于安装过程会建立许多通常不需要使用的系统帐号。对于下列的系统用户帐号可以锁定或删除(如没有相关的使用需求)。
lp
uucp
nuucp
listen
smtp
对于默认的系统帐号只能是使用如下的UID:
root:0
bin:2
adm:4
noaccess:60002
daemon:1
sys:3
nobody:60001
nobody4:65534
如下的默认系统帐号已经被通过在/etc/shadow文件中的NP – No Password 或 *LK* - Locked的定义来其相关的登录访问权限。
daemon:NP:45::::::
bin:NP:45::::::
sys:NP:45::::::
adm:NP:45::::::
nobody:NP:45::::::
noaccess:NP:45::::::
nobody4:NP:45::::::
AIX: 对于安装过程会建立许多通常不需要使用的系统帐号。对于下列的系统用户帐号可以锁定或删除(如没有相关的使用需求)
Guest
UUCP
Nuucp
Lpd
Nobody
下列系统用户和组必须采用以下的UID和GIDs
| Userids | Groupids |
| root:0 | system:0 |
| daemon:1 | security:7 |
| bin:2 | bin:2 |
| sys:3 | sys:3 |
| adm:4 | adm:4 |
| uucp:5 | uucp:5 |
| nuucp:6 | mail:6 |
| lpd:9 | printq:9 |
| imnadm (no assigned UID) | cron:8 |
| ipsec (no assigned UID) | audit:10 |
| ldap (no assigned UID) | shutdown:21 |
| lp (no assigned UID) | ecs:28 |
| snapp (no assigned UID) | imnadm (no assigned GID) |
| ipsec (no assigned GID) | |
| ldap (no assigned GID) | |
| lp (no assigned GID) | |
| haemrm (no assigned GID) | |
| snapp (no assigned GID) |
密码的强度要求,Solaris系统的具体要求如下:相关配置文件/etc/default/passwd。
| 系统值/参数 | 描述 | 设置要求 |
| MAXWEEKS | 密码有效期限的最大周数 (Maximum number of weeks that can pass before a password must be changed.) | 13 |
| WARNWEEKS | 在密码过期前的警告信息显示 (Number of weeks show warning message before the password expired.) | 2 |
| MINWEEKS | 密码有效期限的最少周数 (Minimum number of weeks that must pass before a password can be changed) | 0 |
| PASSLENGTH | 密码长度 (Password length) | 8 |
| 系统值/参数 | 描述 | 设置要求 |
| maxage | 密码有效期限的最大周数 (Maximum number of weeks that can pass before a password must be changed.) | 13 |
| maxrepeats | 可重复的连续字符数 (Number of repeating consecutive characters) | 2 |
| minage | 密码有效期限的最少周数 (Minimum number of weeks that must pass before a password can be changed) | 0 |
| minalpha | 最少字母数 (Minimum number of alphabetic characters) | 1 |
| mindiff | 与前一次密码的最少不同字符数 (Number of characters not found in last password) | 1 |
| minother | 最少的非字母数 (Number of non-alphabetic characters) | 1 |
| minlen | 密码最小长度 (Minimum password length) | 8 |
| histsize | 禁止重复使用密码次数 (Number of previous password that can not be used) | 2 |
| flags=NOCHECK | 参数在/etc/security/passwd。 (Option in /etc/security/passwd) | 不允许任何需要密码的用户帐号设置NOCHECK。 |
| 系统值/参数 | 描述 | 设置要求 |
| PASS_MAX_DAYS | 密码有效期限的最大天数 (Maximum number of days that can pass before a password must be changed.) | 91 |
| PASS_MIN_DAYS | 密码有效期限的最少天数 (Minimum number of days that must pass before a password can be changed) | 0 |
| PASS_MIN_LEN | 密码最小长度 (Minimum password length) | 8 |
| PASS_WARN_AGE | 在密码过期前的显示警告信息 (Number of weeks show warning message before the password expired.) | 14 |
| N/A | 禁止重复使用密码次数 (Number of previous password that can not be used) 在/etc/pam.d/system-auth,/etc/pam.d/passwd和/etc/pam.d/login,添加如下定义 password required /lib/security/pam_unix.so nullok remember=4 use_authtok md5 shadow 或 password sufficient /lib/security/pam_unix.so nullok remember=4 use_authtok md5 shadow 之后要运行如下命令: # touch /etc/security/opasswd | 4 |
对于AIX系统有如下要求:
| 系统值/参数 | 描述 | 设置要求 |
| /etc/passwd | 包含userid, uid, gid, 和misc | 必须不能包含密码 |
| /etc/security/passwd | 包含有经过加密保护的密码信息 | 此文件和其相关的拷贝文件只能由所有者root拥有读或写的权限。 |
| 系统值/参数 | 描述 | 设置要求 |
| /etc/passwd | 包含userid, uid, gid, 和misc | 必须不能包含密码 |
| /etc/shadow | 包含有经过加密保护的密码信息 | 此文件和其相关的拷贝文件只能由所有者root拥有读或写的权限。 |
AIX系统具体要求:
| 系统值/参数 | 描述 | 设置要求 |
| loginretries | 帐号被锁住之前登陆失败的次数 | 除root之外其他帐号的值设为5 |
| 系统值/参数 | 描述 | 设置要求 |
| N/A | 可以通过/etc/pam.d/system-auth配置文件中添加"auth required /lib/security/pam_tally.so onerr=fail no_magic_root" "account required /lib/security/pam_tally.so deny=5 reset no_magic_root per_user"来实现。 | 5 |
| 系统值/参数 | 描述 | 设置要求 |
| GID | 适用于所有的GID | 每个GID必须只能用一次,并唯一对应一个操作系统用户组。 |
| 0-99 GID的使用 | 使用于0-99的GID | 保留给默认系统组或应用程序组使用, |
5.1IP协议栈的安全设置
5.1.1套接字队列长度定义用来防护SYN攻击
现在有一种流行的攻击方式是SYN洪水攻击,攻击者通过使用大量伪造的连接请求信息来填满被攻击服务器的套接字队列。要防止这种方式的攻击,可以通过增加套接字队列的大小和数量来进行防护,分流入站的套接字连接请求,例如,有两个队列,一个针对半打开套接字(SYN收到, SYN|ACK已经发送), 另一个队列对于已打开套接字等待从应用程序发出的accept()请求。通过这些设置来减轻SYN攻击造成的影响,从而提高了系统的稳定性和可靠性。
通过以下命令或配置来增加套接字队列的大小:
| REDHAT Linux:在/etc/sysctl.conf文件中添加net.ipv4.tcp_max_syn_backlog=1280定义,增大套接字队列的大小; |
| SOLARIS: 在/etc/init.d/inetinit或/etc/init.d/secure_ndd文件中添加/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q 1024定义,增大套接字队列的大小和数量,q套接字队列将单独等待从应用程序发出的accept()请求; |
| AIX: 在/etc/rc.net文件中添加/usr/sbin/no -o clean_partial_conns=1定义,使得系统内核随机地删除在对了q0中的半打开套接字请求。 |
IP重定向通常用来修改远程主机的路由表信息,必须禁止发送和接收重定向信息。
REDHAT:在/etc/sysctl.conf文件中添加如下配置定义:
net.ipv4.conf.all.send_redirects=0
| net.ipv4.conf.all.accept_redirects=0 |
| SOLARIS:在/etc/init.d/inetinit中添加如下配置定义: /usr/sbin/ndd -set /dev/ip ip_ignore_redirect 1 /usr/sbin/ndd -set /dev/ip ip_send_redirects 0 |
| AIX: 在/etc/rc.net添加如下配置定义: /usr/sbin/no -o ipignoreredirects=1 /usr/sbin/no -o ipsendredirects=0 |
利用源站路由,攻击者可以尝试到达内部IP地址,所以必须禁止接受源站路由数据包来防止对于内部网络的侦测。
REDHAT: 在/etc/sysctl.conf文件中添加如下配置来丢弃所有的源站路由数据包,
net.ipv4.conf.all.accept_source_route=0
下列配置用来禁止转发相关的源站路由数据包。
net.ipv4.conf.all.forwarding=0
net.ipv4.conf.all.mc_forwarding=0
对于内核版本2.4以上:在/etc/sysctl.conf添加如下配置。
net.ipv4.ip_forward=0
| net.ipv4.conf.default.rp_filter=1 |
| SOLARIS:在/etc/init.d/inetinit文件中添加如下配置来禁止转发相关的源站路由数据包, /usr/sbin/ndd -set /dev/ip ip_forward_src_routed 0 |
| AIX: 在/etc/rc.net文件中添加如下配置来丢弃所有的源站路由数据包, /usr/sbin/no -o ipsrcroutesend=0 下列配置用来禁止转发相关的源站路由数据包。 /usr/sbin/no -o ipsrcrouteforward=0 |
对于繁忙的Web服务器,许多套接字会处于一个TIME_WAIT状态。这是由于客户端应用程序没有完全的关闭一个套接字连接所造成的。这个可以被攻击者所利用来进行DOS或DDOS攻击。故此建议对于任何停留在TIME_WAIT状态的套接字的等待时间不能超过60秒。
REDHAT 6.2: 在/etc/sysctl.conf文件中添加如下配置行
net.ipv4.vs.timeout_timewait=60
任何的套接字不会在TIME_WAIT状态等待超过60秒。
REDHAT 7或以上版本:在/etc/sysctl.conf文件中添加如下配置行
| net.ipv4.tcp_fin_timeout=60 |
| SOLARIS:在/etc/init.d/inetinit文件中添加如下配置行 /usr/sbin/ndd -set /dev/tcp tcp_time_wait_interval 60000 对于Solaris 7, 这个参数名为tcp_close_wait_interval. |
| AIX: 无 |
攻击者可以通过一个伪造的IP地址来发送ICMP (ECHO REQUEST)信息,一些IP协议栈会对于这些信息进行回应。这将造成大量网络资源被无端消耗,因此要禁止对于直接的广播信息进行回应。
REDHAT: 在/etc/sysctl.conf文件中添加如下配置行:
net.ipv4.icmp_echo_ignore_broadcasts=1
| 对于直接的广播信息不作回应。 |
| SOLARIS:在/etc/init.d/inetinit文件中添加如下配置行: /usr/sbin/ndd -set /dev/ip ip_respond_to_echo_broadcast 0 对于直接的广播信息不作回应。 /usr/sbin/ndd -set /dev/ip ip_forward_directed_broadcasts 0 不转发直接的广播信息。 |
| AIX:在/etc/rc.net文件中添加如下配置行: /usr/sbin/no -o directed_broadcast=0 对于直接的广播信息不作回应。 |
地址掩码查询通常被用来映射netblock大小和进一步系统侦测,时间戳通常被用来映射和查询识别主机的另一种方式。
REDHAT: 在/etc/sysctl.conf文件中添加如下配置行:
net.ipv4.tcp_timestamps=0
| 来禁用对于TCP时间戳的支持。 |
| SOLARIS: 在/etc/init.d/inetinit文件中添加如下配置行: /usr/sbin/ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0 防止地址掩码查询。 /usr/sbin/ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0 禁用对于时间戳广播查询的响应。 |
| AIX:在etc/rc.net文件中添加如下配置行: /usr/sbin/no -o icmpaddressmask=0 防止地址掩码查询。 |
●/etc/hosts.equiv 和 /etc/hosts.lpd不能出现在任何一台UNIX服务器上,因为在这些文件中出现的服务器被认为是可以信任的,故此在从这些服务器通过Berkeley r系列命令进行登录操作是是不需要进行密码的。这要就导致了安全隐患。
●.rhosts不能出现在任何一台UNIX服务器上,因为此文件存在安全漏洞而且对于每个用户都可以单独进行修改;
●.netrc 文件不能存在于任何一台UNIX服务器上,因为为了给多个网络应用如ftp,ncftp和curl提供服务可能会包含明码口令,从而造成一个安全漏洞。
5.3X Window系统
以下的相关设置必须在所有运行X Window系统的UNIX平台上实施。
●所有的X-Window的通讯必须被加密,例如可以使用Secure Shell (ssh)工具;
●/tmp目录的访问权限必须设置为1777,粘置位必须设置以确保只有所有者才可以删除X-server套接字文件, /tmp/.X11-unix/X0;
●所有者必须是root,所有组ID必须为0或system;
●X magic cookie机制MIT-MAGIC-COOKIE-1必须被启用,通过编辑xdm-config文件并将DisplayManager*authorize属性设置为true来实现xdm登录控制;
●不得使用低于X11 release 6版本;
●使用xauth命令实现访问授权控制;
●. 删除系统范围内所有的Xsession,用户.xsession或任何使用到X Window的应用程序/脚本文件中的xhost +命令;
5.4其他网络服务安全设置标准:
| 系统值/参数 | 设置要求 |
| Anonymous FTP | |
| 通常情况下,如果应用没有要求,应不允许Anonymous FTP访问 | etc/anonymousftp文件不存在。 |
| 对于root和默认系统帐号不能使用FTP服务。 | 通过在/etc/ftpusers或/etc/vsftpd.ftpusers文件中列举相关的root和默认系统帐号名来实现。 |
| Trivial File Transfer Protocol (TFTP) 系统设置 | |
| 通常情况下,如果应用没有要求,TFTP应该禁止。 | 禁止TFTP |
| 如果一定要使用TFTP,应符合以下配置要求 | |
| TFTP访问控制 | 通常情况下,如果应用没有要求,TFTP应该禁止。 当TFTP运行时,/etc/tftpaccess.ctl必须存在。 |
| /etc/tftpaccess.ctl file | 必须仅包含“allow”语句 |
| 远程登录的使用(telnet、ssh) | |
| telnet除特殊要求,一般禁止使用 | AIX为例,其它UNIX可参考相关资料 1,修改/etc/inetd.conf 在telnet前面加#注释 2,修改/etc/services 在telnet前面加#注释 3,停inetd服务:stopsrc –s inetd 4,启动inetd服务:startsrc –s inetd |
| ssh如果需要远程登录,可使用ssh | AIX为例,其它UNIX可参考相关资料 1,先从AIX安装介质的LUNIX盘中安装 OPENSSL 2,从网上下载openssh-4.1p1_53.tar,并解压安装 |
| Network File System (NFS) 设置 | |
| 通常情况下,如果应用没有要求,NFS应该禁止。 | 禁用NFS |
| 如果一定要使用NFS,应符合以下配置要求 | |
| /etc/exports | 当NFS运行时,该文件必须存在,属性为4 |
| “r” 命令服务 | |
| 如果应用没有要求,建议停用‘r’服务 | rsh,rlogin,rexec |
| .rhosts, .netrc,/etc/hosts.equiv | 不能存在 |
| Remote Execution Daemon (rexd) 设置 | |
| Rexd daemon | 必须禁止 |
| Line Printer Daemon (lpd)设置 | |
| Lpd | 禁止 |
| Post Office Protocol (POP) 设置 | |
| POP服务 | 禁止 |
| iFOR/LS 系统设置 | |
| /var/ifor/i4ls.ini | 需要做如下设置 DisableRemoteAdmin = yes DisableRemoteNdlAdmin = yes |
| 防止DoS攻击的系统设置 | |
| 如果没有要求,这些服务必须被禁止 | ECHO, CHARGEN, RSTAT, TFTP, RWALLD, RUSERSD, DISCARD, DAYTIME, BOOTPS, FINGER, SPRAYD, PCNFSD, REXD, SYSTAT, NETSTAT, RWHOD,UUCP |
| SNMP 服务 | 如果SNMP 服务运行,Community names 'public' and 'private" 不允许使用 |
| Network Information Services (NIS) 设置 | |
| NIS | 不安装NIS相关文件。如果安装,删除NIS相关文件 |
| yppasswd daemon | 禁止 |
| ypupdated daemon | 禁止 |
在/etc/hosts.deny文件的最后必须包含有如下配置行:
ALL:ALL
或
在/etc/hosts.allow的最后包含有如下配置行:
ALL:ALL:DENY
6权限控制
6.1用户文件和HOME目录属性
| 系统值/参数 | 描述 | 设置要求 |
| 系统默认UMASK | 用户文件创建时缺省值 | 至少X27或027; 建议使用下x77或077。 Redhat Linux: 添加umask=027到/root/.bash_profile文件; Solaris:添加umask=027到/.profile; AIX:添加秒拾=027到/etc/security/user文件root相关配置段。 |
| $HOME | 除root用户之外, 用户缺省的home目录 | x00或700 |
| 系统值/参数 | 描述 | 设置要求 |
| /etc /bin /usr/sbin /usr/bin /usr/etc | 操作系统资源 | 通常的所有者为root并属于系统组。 |
| 可执行 *.a *.o *.so *.cf *.conf *.cfg | 操作系统资源文件类型 | Other必须设置为r-x或更严格 |
| AIX中/etc/security/ | 操作系统资源目录 | 必须设置为xx0 |
| /tmp和/var/tmp | 临时空间 | (t) Sticky 位必须设置 (缺省) |
| /etc/snmpd.conf | SNMP配置文件 | 必须设置为0或更严格 |
| /etc/services | 服务设置文件 | 必须设置为4 |
| 系统值/参数 | 设置要求 |
| /etc/locks | 该目录下可以包含world-writeable 文件 |
| ∙socket (s) ∙named pipe (p) ∙block special file (b) ∙character special file (c) ∙symbolic links (l) | 可以是world-writeable 文件 |
具体操作可以参阅相关的补丁管理规范和流程。
8审计策略
8.1系统访问日志
必须启用syslog进程来记录任何成功或失败的访问行为,特别是对于用户认证。在/etc/syslog.conf配置文件中必须定义记录优先级为“info”或高于其的相关信息。
8.2日志记录保存期限
对于所UNIX服务器的日志记录必须保存至少60天。
8.3Sudo日志记录
对于所有UNIX服务器中的Sudo命令的运行必须有相应的日志记录。可以通过在/etc/syslog.conf文件中添加如下配置行来实现。
| REDHAT: authpriv.debug /var/log/messages |
| SOLARIS: local2.debug /var/adm/messages |
| AIX: local2.debug /var/adm/logs/syslog or /var/adm/messages |
9附则
9.1文档信息
第一条本策略由公司信息安全办公室制定,并负责解释和修订。由公司信息安全工作组讨论通过,发布执行。
第二条本策略自发布之日起执行。
9.2其他信息下载本文