# Password 安全加固

#### 博客作者：联系请[点击](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)，搬运不易，希望请作者喝咖啡，可以点击[联系博客作者](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)

在针对服务器的入侵事件中，有近一半的比例是弱口令爆破攻击，每年由此类攻击引发的勒索和挖矿行为给用户带来巨大的损失，为了减少此类入侵事件带来的损失，您可以参考本文完成弱口令的安全加固和攻击防御。

## 一、背景信息

据部分行业媒体报导，近年来由弱口令引发的安全事件占到云上安全事件总数的一半以上，并且有逐年上升的趋势。有研究机构预测2021年在全球范围由勒索病毒和挖矿病毒引发的经济损失预估将超过300亿美元。

## 二、弱口令攻击防御方法

您可以通过以下两种方法防御弱口令攻击：

* 设置复杂密码复杂密码应同时满足以下要求：
  * 密码长度大于等于8个字符。
  * 至少包含大写字母（A\~Z）、小写字母（a\~z）、数字（0\~9）、特殊字符（\`\~!@$%^&\*()-\_=+#|\[{}];:'",<.>/?）中三种字符的组合。
  * 密码不能为用户名或用户名的倒序。
  * 不使用常见或公开的弱口令。
    * 已公开的常用弱口令。例如abcd1234、admin、root、admin\@123等。
    * 数字或字母连排或混排，键盘字母连排。例如123456、abcdef、123abc、qwerty、1qaz2wsx等。
    * 短语密码。例如5201314、woaini1314等。
    * 公司名称、 生日、姓名、身份证、手机号、邮箱名、用户ID、时间年份等。
* 避免服务端口开放到互联网

  如果服务器的运维端口和数据库服务端口暴露在互联网上，则存在被黑客扫描发现和暴力破解的风险。您可以使用防火墙或者安全组减小服务端口的暴露面，仅将端口开放给有业务需要的服务器访问。

## 三、常见系统及服务口令修改方法

以下表格介绍修改Linux服务器、MySQL数据库、Redis数据库等常见系统的登录弱口令的操作方法。

| 系统名称                                                                                                                                          | 修改登录口令操作步骤                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 说明                                                                                                                                                                     |
| --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Linux系统                                                                                                                                       | 在Linux系统服务器中，执行passwd \[\<user>]命令修改用户登录口令。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 其中`<user>`为登录用户名，如果不输入则修改的是当前用户的口令。执行完命令后请根据提示输入新口令。                                                                                                                   |
| Windows系统                                                                                                                                     | <p>本处以Windows 10为例，说明修改用户登录口令的方法。</p><ol><li>登录Windows服务器后，在左下角单击<a href="https://static-aliyun-doc.oss-accelerate.aliyuncs.com/assets/img/zh-CN/1182590061/p170023.png"><img src="https://static-aliyun-doc.oss-accelerate.aliyuncs.com/assets/img/zh-CN/1182590061/p170023.png" alt="开始图标"></a>图标。</li><li>单击<a href="https://static-aliyun-doc.oss-accelerate.aliyuncs.com/assets/img/zh-CN/1182590061/p170024.png"><img src="https://static-aliyun-doc.oss-accelerate.aliyuncs.com/assets/img/zh-CN/1182590061/p170024.png" alt="设置图标"></a>图标。</li><li>在Windows设置页面，单击帐户。</li><li>在左侧导航栏单击登录选项。</li><li>根据页面提示更改服务器密码。</li></ol>                                                                                                                                                                                                                                                                                                                                                                    | 无。                                                                                                                                                                     |
| MySQL数据库                                                                                                                                      | <ol><li>登录MySQL数据库。</li><li><p>执行以下命令查看数据库用户密码信息。</p><pre><code>SELECT user, host, authentication\_string FROM user;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |                                                                                                                                                                        |
| </code></pre><p><strong>说明</strong> 部分MySQL数据库版本可能不支持上述查询命令。如果您执行上述命令未获得用户密码信息，请您执行以下命令。</p><pre><code>SELECT user, host, password FROM user; |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |                                                                                                                                                                        |
| </code></pre></li><li><p>执行以下命令，根据查询结果及弱密码告警信息修改用户的密码。</p><pre><code>SET PASSWORD FOR '用户名'@'主机' = PASSWORD('新密码');                           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |                                                                                                                                                                        |
| </code></pre></li><li>执行刷新命令<code>flush privileges;</code>。</li></ol>                                                                         | 无。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |                                                                                                                                                                        |
| Redis数据库                                                                                                                                      | <ol><li>打开Redis数据库的配置文件redis.conf。</li><li><p>执行以下命令修改或增加口令。</p><pre><code>requirepass \<password>；                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |                                                                                                                                                                        |
| </code></pre></li><li>重启Redis服务。</li></ol>                                                                                                    | 其中`<password>`为登录口令。如果已存在登录口令，则将其修改为复杂口令；如果不存在登录口令，则添加新口令。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |                                                                                                                                                                        |
| SQL Server数据库                                                                                                                                 | <ul><li><p>Linux系统登录登录SQL Server数据库，执行以下命令修改登录口令。</p><pre><code> exec sp\_password '\<oldpassword>','\<newpassword>','\<user>'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                                                                                        |
| </code></pre></li><li><p>Windows认证登录</p><p>在SQL Server数据库客户端，依次选择安全性 > 登录名 ，选中用户后将弱口令修改为复杂口令。</p></li></ul>                                   | 其中`<oldpassword>`为旧口令，`<newpassword>`为新口令，`<user>`为用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                                                                                                                        |
| MongoDB数据库                                                                                                                                    | <ol><li>登录MongoDB数据库。</li><li>执行<code>use admin</code>命令切换到admin用户。</li><li>执行<code>use \<db\_name></code>命令切换到需要修改登录口令的数据库。</li><li>执行<code>db.updateUser('\<username>',{pwd:'\<newpassword>'})</code>命令修改数据库的登录名和口令。</li></ol>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | <ul><li><code>db\_name</code>为需要修改登录口令的数据库名称。</li><li><code>username</code>为待修改口令的用户名，<code>newpassword</code>为新口令。</li><li>修改口令完成后，需等待15分钟才能检测修改后的口令是否为弱口令。</li></ul> |
| PostgreSQL数据库                                                                                                                                 | <ol><li>登录PostgreSQL数据库。</li><li><p>执行以下命令修改弱口令。</p><pre><code>ALTER USER \<user> WITH PASSWORD '\<newpassword>';                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                                                                                                                        |
| </code></pre></li></ol>                                                                                                                       | 其中`<user>`为用户名，`<newpassword>`为新口令。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |                                                                                                                                                                        |
| Tomcat                                                                                                                                        | <ol><li>打开Tomcat根目录下的配置文件conf/tomcat-user.xml。</li><li>修改user节点的password属性值为复杂口令。</li></ol>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 无。                                                                                                                                                                     |
| Rsync                                                                                                                                         | <ol><li>打开Rsync的配置文件rsyncd.conf。</li><li>找到<code>secrets file</code>配置项，并在该配置项中找到<code>rsyncd.secret</code>文件的路径。</li><li>将rsyncd.secret文件按<code>用户名:口令</code>的形式编辑，修改对应用户的口令为新的复杂口令。</li><li>重启Rsync服务。</li></ol>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 无。                                                                                                                                                                     |
| SVN                                                                                                                                           | <ol><li>打开版本库目录。</li><li>在配置文件\<path>/conf/svnserve.conf中找到<code>password-db</code>。</li><li>根据password-db配置找到口令配置文件路径，将该文件中的口令修改为指定的口令（默认为passwd文件）。</li><li>重启SVN服务。</li></ol>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 无。                                                                                                                                                                     |
| vsftpd服务器软件                                                                                                                                   | <ul><li><p>本地用户</p><ol><li>打开配置文件vsftpd.conf。</li><li><p>增加或修改配置项<code>anonymous\_enable</code>的值为NO。</p><p><code>anonymous\_enable</code>的值为NO表示禁止匿名登录。</p></li><li><p>执行<code>passwd \<ftpuser></code>命令修改FTP用户的口令。</p><p><code>\<ftpuser></code>为ftp用户的用户名。</p></li><li>根据提示设置符合要求的新的复杂口令。</li></ol></li><li><p>虚拟用户</p><ol><li>打开文件/etc/vsftpd/login.txt。</li><li><p>修改用户名对应的口令并保存。</p><p>该文件格式为：第1行是用户A的用户名，第2行是用户A的口令，第3行是用户B的用户名，第4行是用户B的口令，以此类推。</p></li><li>执行<code>db\_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db</code>命令。</li><li>修改/etc/pam.d/vsftpd文件。在存在<code>auth pam\_userdb.so</code>和<code>account pam\_userdb.so</code>的行后分别添加语句<code>db=/etc/vsftpd/login</code>，修改完成后保存。具体位置见下图。<a href="https://static-aliyun-doc.oss-accelerate.aliyuncs.com/assets/img/zh-CN/1182590061/p170046.png"><img src="https://static-aliyun-doc.oss-accelerate.aliyuncs.com/assets/img/zh-CN/1182590061/p170046.png" alt="vsftpd文件修改位置"></a></li><li>重启vsftpd。</li></ol></li></ul> |                                                                                                                                                                        |
