Ubuntu 16.04 LTS
<p><strong>1. 概述</strong></p>
<p>本文档为在x86和x64平台上运行的Ubuntu Linux 16.04 LTS系统建立安全配置状态提供了说明性指导。</p>
<p> </p>
<p><strong>2. 服务</strong></p>
<p><strong>(1)关闭不需要用的服务</strong></p>
<p>虽然应用系统更新和修补程序有助于纠正已知漏洞,但保护系统免受尚未报告的漏洞的最佳方法之一是禁用正常系统操作不需要的所有服务。这可以防止利用以后发现的漏洞。如果未启用服务,则无法利用该服务。建议限制开放端口,协议和服务,确保每个系统上仅运行具有经过验证的业务需求的端口,协议和服务。</p>
<p><strong>(2)SSH服务器配置</strong></p>
<p>SSH是常见登录服务(如telnet,ftp,rlogin,rsh和rcp)的安全加密替代品。强烈建议站点放弃较旧的明文登录协议,并使用SSH来防止会话劫持和嗅探网络上的敏感数据。</p>
<p><strong>1)设置SSH协议设置为2</strong></p>
<p>SSH支持两种不同且不兼容的协议:SSH1和SSH2。SSH1是原始协议,受安全问题的影响,SSHv1存在安全问题,而SSH v2不会。SSH2更先进,更安全。</p>
<p><strong>检测:</strong></p>
<p>运行以下命令并验证输出是否匹配:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># grep "^Protocol" /etc/ssh/sshd_config</p>
<p>Protocol 2</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>编辑/etc/ssh/sshd_config文件以设置参数,如下所示:</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align:top">
<p>Protocol 2</p>
</td>
</tr>
</tbody>
</table>
<p><strong>2)设置SSH 最大认证尝试次数为5或更低</strong></p>
<p>将最大认证尝试次数参数设置为较小的数字可以最大程度地降低成功暴力攻击SSH服务器的风险。虽然建议的设置为5,但请根据站点策略设置数量。</p>
<p><strong>检测:</strong></p>
<p>运行以下命令并验证输出最大认证尝试次数是否为5或更小:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># grep "^MaxAuthTries" /etc/ssh/sshd_config</p>
<p>MaxAuthTries 5</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>编辑/etc/ssh/sshd_config文件以设置参数,如下所示:</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align:top">
<p>MaxAuthTries 5</p>
</td>
</tr>
</tbody>
</table>
<p><strong>3)禁用SSH 允许空密码</strong></p>
<p>禁止对具有空密码的帐户进行远程shell访问会降低未经授权访问系统的可能性。允许空密码参数指定SSH服务器是否允许登录具有空密码字符串的帐户。</p>
<p><strong>检测:</strong></p>
<p>运行以下命令并验证输出是否匹配:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># grep "^PermitEmptyPasswords" /etc/ssh/sshd_config</p>
<p>PermitEmptyPasswords no</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>编辑/etc/ssh/sshd_config文件以设置参数,如下所示:</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align:top">
<p>PermitEmptyPasswords no</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>3. 账号密码安全</strong></p>
<p><strong>(1)密码策略</strong></p>
<p><strong>1)设置密码字段不为空</strong></p>
<p>所有帐户必须具有密码或被锁定以防止未经授权的用户使用该帐户。具有空密码字段的帐户意味着任何人都可以在不提供密码的情况下以该用户身份登录。</p>
<p><strong>检测:</strong></p>
<p>运行以下命令并验证没有返回任何输出:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># cat /etc/shadow | awk -F: '($2 == "" ) { print $1 " does not have a password "}'</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>如果/etc/shadow文件中的任何帐户没有密码,请运行以下命令锁定帐户,直到可以确定它没有密码为止:</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align:top">
<p># passwd -l <username></p>
</td>
</tr>
</tbody>
</table>
<p><strong>2)密码创建要求</strong></p>
<p>强密码可以保护系统免受强力攻击。</p>
<p><strong>检测:</strong></p>
<p>运行以下命令并验证所有密码要求是否符合组织策略,并且minlen为8或更多:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># grep pam_pwquality.so /etc/pam.d/password-auth</p>
<p>password requisite pam_pwquality.so try_first_pass retry=3</p>
<p># grep pam_pwquality.so /etc/pam.d/system-auth</p>
<p>password requisite pam_pwquality.so try_first_pass retry=3</p>
<p># grep ^minlen /etc/security/pwquality.conf</p>
<p>minlen = 8</p>
<p># grep ^dcredit /etc/security/pwquality.conf</p>
<p>dcredit = -1</p>
<p># grep ^lcredit /etc/security/pwquality.conf</p>
<p>lcredit = -1</p>
<p># grep ^ocredit /etc/security/pwquality.conf</p>
<p>ocredit = -1</p>
<p># grep ^ucredit /etc/security/pwquality.conf</p>
<p>ucredit = -1</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>运行以下命令安装pam_pwquality模块:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p>apt-get install libpam-pwquality</p>
</td>
</tr>
</tbody>
</table>
<p>编辑/etc/pam.d/common-password文件以包含pam_pwquality.so的相应选项并符合站点策略:</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align:top">
<p>password requisite pam_pwquality.so retry=3</p>
</td>
</tr>
</tbody>
</table>
<p>编辑/etc/security/pwquality.conf以添加或更新以下设置以符合站点策略:</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align:top">
<p>minlen = 8</p>
<p>dcredit = -1</p>
<p>ucredit = -1</p>
<p>ocredit = -1</p>
<p>lcredit = -1</p>
</td>
</tr>
</tbody>
</table>
<p><strong>注意:</strong>可以设置附加模块选项,推荐要求仅包括try_first_pass和minlen设置为8或更多。/etc/security/pwquality.conf中的设置必须使用=符号周围的空格。</p>
<p><strong>3)设置失败密码尝试的次数为5次</strong></p>
<p>在n次连续登录尝试失败后锁定用户ID可以减轻对系统的暴力密码攻击。</p>
<p><strong>检测:</strong></p>
<p>执行以下操作以确定用户锁定的当前设置。</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># grep "pam_tally2" /etc/pam.d/common-auth</p>
<p>auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>编辑/etc/pam.d/common-auth文件并添加以下auth行:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p>auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900</p>
</td>
</tr>
</tbody>
</table>
<p><strong>注意:</strong>如果用户因为已达到pam_tally2.so模块中deny=定义的最大连续失败计数而被锁定,则可以通过发出命令/sbin/pam_tally2 -u <username> --reset来解锁用户。此命令将失败计数设置为0,从而有效地解锁用户。</p>
<p><strong>4)设置密码哈希算法为SHA-512</strong></p>
<p>SHA-512算法提供比MD5强得多的散列,从而通过提高攻击者成功确定密码的工作量来为系统提供额外的保护。以下命令将密码加密从md5更改为sha512(更强大的哈希算法)。所有现有帐户都需要执行密码更改才能将存储的哈希值升级到新算法。</p>
<p><strong>检测:</strong></p>
<p>运行以下命令并确保sha512选项包含在所有结果中:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># egrep '^password\s+\S+\s+pam_unix.so' /etc/pam.d/common-password password sufficient pam_unix.so sha512</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>编辑/etc/pam.d/common-password文件以包含pam_unix.so的sha512选项,如下所示:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p>password [success=1 default=ignore] pam_unix.so sha512</p>
</td>
</tr>
</tbody>
</table>
<p><strong>注意:</strong>如果确定使用的密码算法不是SHA-512,则一旦更改,建议所有用户ID立即过期并在下次登录时强制更改其密码。为此,可以使用以下命令。任何需要过期的系统帐户都应由系统管理员单独完成,以防止出现任何潜在问题。</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># cat /etc/passwd | awk -F: '( $3 >= 1000 && $1 != "nfsnobody" ) { print $1 }' | xargs -n 1 chage -d 0</p>
</td>
</tr>
</tbody>
</table>
<p><strong>(2)用户帐号和环境</strong></p>
<p>本节提供有关为系统和用户帐户及其环境设置安全默认值的指导。</p>
<p><strong>1)设置root帐户的默认组为GID 0</strong></p>
<p>使用GID 0作为_root_account有助于防止_root_拥有的文件被非特权用户意外地访问。</p>
<p><strong>检测:</strong></p>
<p>运行以下命令并验证结果为0:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># grep "^root:" /etc/passwd | cut -f4 -d:</p>
<p>0</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>执行以下命令,将root用户默认组设置为GID 0:</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align:top">
<p># usermod -g 0 root</p>
</td>
</tr>
</tbody>
</table>
<p><strong>2)设置默认用户shell超时为900秒或更短</strong></p>
<p>没有与shell关联的超时值可能允许未经授权的用户访问另一个用户的shell会话(例如,用户离开他们的计算机并且不锁定屏幕)。设置超时值至少可以降低发生这种情况的风险。默认TMOUT确定用户的shell超时。TMOUT值以秒为单位测量。</p>
<p><strong>检测:</strong></p>
<p>运行以下命令并验证返回的所有TMOUT行是否为900或更少,并且每个文件中至少存在一个。</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td style="vertical-align:top">
<p># grep "^TMOUT" /etc/bashrc</p>
<p>TMOUT=900</p>
<p># grep "^TMOUT" /etc/profile</p>
<p>TMOUT=900</p>
</td>
</tr>
</tbody>
</table>
<p><strong>修复:</strong></p>
<p>编辑/etc/bashrc和/etc/profile文件(以及系统上支持的任何其他shell的相应文件),并添加或编辑任何TMOUT参数,如下所示:</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align:top">
<p>TMOUT=900</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
提交成功!非常感谢您的反馈,我们会继续努力做到更好!