这个章节介绍的是基本的服务器安全措施,我们可以根据个人需要进行个性化设置。不过有两项是必须要做的,一个是修改SSH服务的默认端口号;另外一个则是使用密钥对登录服务器,至于加不加密码,依据个人想法进行设置。如果对权限把控很严,建议添加一个新用户并分享root权限给它(建议每一个用户配一个相对应的密钥对),然后再把root禁用,需要时就临时恢复权限。
12.1 初始化设置
12.1.1
添加新用户并分配root权限
超级管理员root可以在服务器里做任何事情,为了安全起见,我们一般不直接使用它来管理服务器。我们可以使用超级管理员来创建一个新的用户,然后再给这个新用户分享超级管理员的权限——也就是说,需要使用root的时候才会有这个权限。
在正式操作以前,先按照前文中所写的方法,使用超级管理员root登录服务器。
先使用adduser添加新用户,比如我们添加一个名为“ipc”的新用户。然后再输入passwd
ipc,给这个新用户设置一个密码,强度必须够好,具体设置方案将在第十七章给出。输入的密码中,如果有字段与用户名相似或相同,会提示这个密码不够好,不过系统还是会让我们重新确认一次这个密码。如果重新确认时错误,会告诉我们两次输入的密码不相同,并让我们重新输入并确认一次,成功后会提示口令更新成功。删除这个新用户则是使用deluser命令;其实使用useradd和userdel命令也能达到同样的效果,只不过在不同的Linux系统会有些许差异,这里不多做探讨。如图12-1所示。
图12-1 添加新用户并为其设置密码
接着给这个新添加的用户分享root用户的权限,当需要使用这种权限时,在需要操作的命令前添加sudo就可以了。我们输入gpasswd -a ipc wheel,将我们新创建的用户ipc加入到wheel管理员用户组(用户组的普通成员在大多数情况下拥有与root用户一样的权限)。然后使用su ipc,将正在操作的root用户切换到新创建的用户ipc。如图12-2所示。
然后我们使用cat /etc/sudoers尝试输出根目录下/etc/sudoers这个文件,系统会告诉我们这个文件的拥有者是root用户,当前用户的权限不够,所以被拒绝操作。于是,我们输入sudo cat /etc/sudoers,来暂时获取root用户的权限,来输出这个文件。系统会要求我们输入当前用户的密码,输入后回车执行一下,我们就会看到,系统这次会输出的文件里的内容了。如图12-2所示。
图12-2 为新用户分配root权限
我们输入exit命令,系统会退回到root用户,然后再输入一个同样的命令,我们会退出系统,与服务器失去连接。如图12-3所示。
图12-3 退出系统
拓展知识:
更安全的做法:只允许非root,非wheel用户组登陆。不过这种限制只能使用在不需要超级管理员权限的服务中,使用范围有限,在不清楚业务需求的情况下,不太建议使用这种做法。
12.1.2
Windows下使用密钥加密码登录服务器
1. 生成密钥
1)通过阿里云自带的创建密钥对功能生成密钥。登录阿里云用户管理后台,点击进入云服务管理控制台,然后点击“网络和安全”下的“密钥对”,如图12-4所示。如图12-5所示,点击“创建密钥对”,然后在“密钥对名称”后的输入框中输入一个与我们购买的服务器相关的方便管理的好记的名称,点击确定,阿里云将自动为我们生成一个密钥对,并自动将对应的.pem后缀的私钥下载到我们的电脑中,这个私钥请记得妥善保管(阿里云目前只有I/O优化实例能使用密钥对)。
图12-4 “创建密钥对”相关页面
图12-5 “创建密钥对”操作界面
2)使用开源软件PuTTY生成密钥。第二种方法,则相对复杂也更实用一些,如果我们购买的是阿里云的非I/O优化实例,只能用这种办法来使用密钥对了。
登陆开源软件PuTTY的官网,其英文国际官网的网址链接为http://www.putty.org/,点击进入其下载页面https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html,如图12-6所示,选择合适的puttygen.exe进行下载(Windows系统是32位的只能选32位版本使用,64位的则可以同时使用32位和64位的版本,这个工具无需安装即可使用)。这个密钥对生成工具被内置在了一款
Windows环境下使用的SSH的开源图形化SFTP客户端——WinSCP中,如果想同时使用这两款开源软件,则只需要下载WinSCP即可,其中文官网地址为https://winscp.net/eng/docs/lang:chs,此软件在前文展示的作者我的个人电脑桌面的截图中有露脸。
图12-6 puttygen.exe下载页面
点击下载下来的PuTTY密钥对生成工具,点击“Generate”,并随意移动鼠标,开始生成密钥,生成过程完成后停止移动鼠标。点击“Save
public key”和“Save private key”,将公钥和私钥分别对应命名,并妥善保存。如图12-7所示。
图12-7 使用puttygen.exe生成密钥对
2. 把密钥保存在服务器里
1)通过阿里云自带的绑定密钥对功能将密钥导入服务器。第一种方式,与前面的生成密钥的第一种方法相关联。我们在创建密钥对时,在“创建类型”选择“导入已有密钥对”选项,然后将公钥里的文本内容复制粘贴到相应的输入框中,确认后即创建成功。然后,将新创建的密钥对与服务器进行绑定,点击确认后密钥就被保存到了服务器里,如图12-8所示。
图12-8 将新创建的密钥对与服务器进行绑定
2)使用开源软件WinSCP将密钥导入服务器。第二种方式,与前面的生成密钥的第二种方法相关联。先使用WinSCP登录服务器,登录服务器后默认情况下是看不到相关的目录以及文件的。我们点击WinSCP主界面上的“选项”菜单,然后在“界面”下的“通用”里勾选“显示隐藏文件Ctrl+Alt+H”,我们就可以看到根目录下root目录里的隐藏文件夹和文件了,如图12-9和图12-10所示。如果没有在里面发现.ssh目录以及相应的authorized_keys文件,我们就手动创建,创建完成后,将目录的权限设置为700,文件的权限设置为600。,如图12-11所示,我们将存放公钥的文件authorized_keys打开,把公钥的文本内容复制粘贴进去,并点击保存。
图12-9
更改WinSCP选项中的设置以使隐藏文件夹和文件可见
图12-10
设置更改完成以后可见的隐藏文件夹和文件
图12-11
存放公钥的文件authorized_keys
我们找到/etc/ssh/路径下的sshd_config文件,将“#AuthorizedKeysFile
.ssh/authorized_keys”前的#号注释掉,如图12-12和图12-13所示。如果不想在登录时输入密码,将“#RSAAuthentication
yes”和“#PubkeyAuthentication yes”前的#号也注释掉就行了。以上步骤完成后退出服务器,使用Xshell登录服务器,输入命令service
sshd restart或systemctl restart sshd.service回车确认(将restart替换成reload也可以使配置生效,不过两者之间有细小差别),使配置生效,然后输入exit命令退出服务器。
图12-12
/etc/ssh/路径下的sshd_config文件
图12-13
注释配置中的#号
3. 配置Xshell
打开Xshell,点击“工具”下的“用户密钥管理者”,将所生成的密钥对的私钥导入到其中,如图12-14和图12-15所示。
图12-14
点击“工具”下的“用户密钥管理者”
图12-15 “用户密钥管理者”操作界面
然后点击“文件”下的“打开”,如图12-16所示,选中之前保存的相应的服务器会话,右键点击打开属性设置。如图12-17所示,选择“连接”下的“用户身份验证”,方法选择“Public Key”,用户密钥选择刚才导入到用户密钥管理者中的私钥,如果有密码就输入相应密码保存、没有就留空,最后点击确定即可。至此,一键快捷登录服务器的设置方案就完成了。
图12-16
打开Xshell会话
图12-17
设置“用户身份验证”连接属性
12.1.3
修改SSH服务的端口号
1. 自动修改SSH服务端口号
第一种方法,我们在第十一章节的快速创建网站运行环境这部分说到过,具体方法是在一开始就用OneinStack自动把端口修改掉。
2. 手动修改SSH服务端口号
第二种方法,则比较通用,具体方法是手动修改配置文件。首先,我们使用WinSCP登录服务器,找到/etc/ssh这个路径下的sshd_config配置文件。
打开这个文件,搜索关键字“Port”找到如图12-18所示位置。可以直接在“#Port 22”下方添加我们想指定的端口号,不过最好是在10000至65536的范围之内。我们也可以直接注释#号,修改默认端口号22为其他数字。修改完成后保存退出。然后我们使用Xshell登录服务器,输入命令service sshd restart或systemctl restart
sshd.service回车确认,使配置生效,然后退出服务器。
图12-18
搜索关键字“Port”找到并修改相关配置
12.1.4
使用fail2ban阻止SSH暴力破解
fail2ban是由Python语言开发的一款开源监控软件,它通过监控系统日志的登录信息来调用iptables屏蔽相应登录IP,以阻止某个IP(fail2ban读取对应日志文件,Debian/Ubuntu系统下:/var/log/auth.log、CentOS/Redhat系统下:/var/log/secure)不停尝试密码。fail2ban在防御对SSH服务的暴力密码破解上非常有用。经过大量用户的强烈要求,开发者yeho已经将其集成到了 OneinStack。
如果我们想一键安装使用fail2ban,建议先安装OneinStack。安装好之后我们登录服务器,输入cd oneinstack进入相应目录,然后输入./addons.sh并回车,进入组件选择过程,如图12-19所示。安装好按q退出组件选择过程,然后退出服务器即可。
图12-19
选择fail2ban组件进行安装
12.1.5
禁止SSH使用密码登录服务器
首先,我们使用WinSCP登录服务器,找到/etc/ssh这个路径下的sshd_config配置文件。然后打开这个配置文件,搜索关键字“PasswordAuthentication”和“ChallengeResponseAuthentication”,找到如图12-20所示位置。我们可以直接注释掉#号,将“yes”改为“no”,修改完成后保存退出。
图12-20 搜索关键字找到后修改相关配置
我们使用Xshell登录服务器,输入命令service sshd restart或systemctl restart
sshd.service回车确认,使配置生效,然后退出服务器。
12.1.6
禁止root用户远程登录
首先,我们使用WinSCP登录服务器,找到/etc/ssh这个路径下的sshd_config配置文件。我们打开这个配置文件,搜索关键字“PermitRootLogin”,找到如图12-21所示所示位置。我们可以直接注释掉#号,将“yes”改为“no”,修改完成后保存退出。
图12-21 搜索关键字“PermitRootLogin”找到并修改相关配置
我们使用Xshell登录服务器,输入命令service sshd restart或systemctl restart
sshd.service回车确认,使配置生效,然后退出服务器。配置生效后,我们尝试使用root用户登录服务器,会发现我们的操作被系统拒绝。
禁用root用户之后,我们使用之前自己创建的具有root权限的新用户,来作为等同于超级管理员的存在使用,需要更高权限时则用sudo命令提权。如果以后有需要使用到root用户的时候,再对此配置文件进行反向操作即可。
如果对系统权限有更高的要求,可以使用chroot监狱来达到这个目的,具体请访问参考链接https://linux.cn/article-8313-1.html。不过这个操作对于新手来说要求很高,而且不是非做不可。
12.2 快照与镜像
12.2.1
实例快照
实例的快照,就是服务器在某一个时间点的状态。我们可以对实例的系统盘或者数据盘创建一些快照,每一个快照都保存着服务器当时的状态,我们也可以把它当作是服务器数据的备份。当我们碰到一些特殊原因,比如数据被破坏或者丢失了,我们就可以使用快照,把服务器上的数据恢复成当时的状态。
首先我们登录阿里云的用户管理后台,点击“云服务器ECS”,打开服务器所在的区域。找到想要创建快照的服务器实例并点击查看详情,点击边栏上的“本实例磁盘”,在这里会列出服务器所使用的磁盘,大致分成两种:系统盘和数据盘。
如图12-22所示,如果我们想给这个磁盘创建一个快照,则点击后面的“创建快照”,然后再给快照命名一个相对应的名字,点击确定,快照工作将开始进行,具体的进度可以点击“本实例快照”进行查看。快照完成以后,我们可以基于这个快照回滚数据,把服务器恢复到创建快照的时候的状态。由于这个磁盘是一个系统盘,我们也可以用它创建一个自定义的镜像,这样我们在购买了其他服务器后,可以基于这个镜像快速部署系统。
图12-22 为实例磁盘创建快照
如果我们想偷懒,不想天天手工进行,创建快照的流程可以“设置自动快照策略”来指定相关的时间和频率等,设置完成后将按照策略自动进行。
12.2.2
自定义系统镜像
如图12-23所示,由于我们刚才创建了一个系统盘的快照,所以我们现在可以点击后面的“创建自定义镜像”,来创建一个包含完整网站运行环境的已经部署好的系统镜像,以方便我们快速部署服务器。
图12-23 使用系统快照创建自定义镜像
创建完成后,我们可以返回实例列表,在“快照和镜像”下的“镜像”中,我们可以找到刚才创建的自定义系统镜像,如图12-24所示。如图12-25所示,这样我们以后在快速部署服务器时,就可以在购买服务器时选择自己创建的自定义镜像,从而节省时间。
图12-24 创建完成的自定义系统镜像
图12-25 重新购买服务器时可选个人自行创建的自定义镜像
拓展知识:
更多详细信息,请访问:
创建快照 https://help.aliyun.com/document_detail/25455.html
使用快照策略和镜像备份数据 https://help.aliyun.com/document_detail/52134.html
使用快照创建自定义镜像 https://help.aliyun.com/document_detail/25460.html
12.3 安全组
12.3.1
安全组介绍
安全组,其实就是一个防火墙,它与我们后面要介绍的iptables的功能差不多,只不过要比iptables简单易用许多。它主要负责管理流量的进出:公网流进服务器,以及服务器流出到公网。换句话说,就是流量的上行和下行。
我们可以在云服务器管理控制台下“网络与安全”的“安全组”来查看安全组的详情。
12.3.2
创建安全组
我们找到位于云服务器控制台下“网络与安全”下的“安全组”,会看到系统给我们的服务器创建了一个默认的安全组,如图12-26所示。这个默认的安全组的规则是十分宽容的,基本不会对进进出出服务器的流量作出限制。我们可以修改系统默认的安全组;如图12-27所示,我们也可以自定义安全组,点击右上角的“创建安全组”,在“安全组名称”后的输入框中输入一个有意义的名字,接着输入一段大致描述,然后在网络类型中选择专有网络(根据自己服务器的网络类型选择),接着选定与服务器相关的专有网络,点击确定后一个新的安全组就创建成功了。
图12-26 系统为服务器创建的默认安全组
图12-27 个人为服务器创建自定义安全组
如图12-28所示,创建完成后,我们点击实例详情下的“安全组配置”,将我们的新创建的安全组添加进去,然后将默认的安全组移出即可。
图12-28 配置个人创建的自定义安全组
12.3.3
安全组规则配置
接下来我们配置安全组的具体规则,以保证服务器的流量安全。一般来说,只需要在公网入方向配置规则行了,如果有更高要求,则可以限制下行的流量。
点击进入云服务器管理控制台,找到安全组列表。点击相应的安全组后的“配置规则”,进入安全组规则列表。点击“添加安全组规则”,弹出如图12-29所示的窗口。一般情况,“协议类型”选择“自定义TCP”,如果需要用到如ICMP协议下的Ping命令,则选择“全部ICMP”;“端口范围”后的输入框中,假设我们这里定义的是SSH服务的端口,就填写默认端口22/22,端口修改后添加新规则,同时把原来的规则删除掉;“优先级”处可不管,一般情况下下,数字越小级别越高;“授权类型”处,大多数情况下选择“地址段访问”;“授权对象”后的输入框中,如果我们没有固定的IP地址,则填写0.0.0.0/0即可,这里代表的所有IP地址。如果有固定的公网IP,则填写固定的公网IP。当然大多数情况下,我们的家用宽带是没有固定公网IP 的,不过在拨号上网的一段时间内,我们的公网IP地址是固定或者在一定范围内的,这时我们可以百度搜索“IP”这个关键词,如图12-30所示,得知我们此时上网的IP地址,然后填入183.240.195.0/24这个地址段,这个地址段代表183.240.195.0至183.240.195.255这之间的256个IP地址(实际上,0和255这两个数字即183.240.195.0和183.240.195.255都不可直接使用,能直接使用的只有183.240.195.1~183.240.195.254这254个IP地址)。最后在“描述”后的输入框中填写“默认SSH/SFTP端口为22”或者其他的提示文字。
图12-29 “添加安全组规则”操作界面
图12-30 百度搜索关键词“IP”查询本机IP
如图12-31所示,如果我们想偷懒,则可以点击“快速创建规则”来创建我们需要的具体规则,以下是我们经常用到的一些规则的例子。这些例子不必全部照抄,按照自己配置设置具体规则即可,如图12-32所示,图中的默认SSH服务端口为22的规则,可以在端口号修改完成后删除。
图12-31 “快速创建规则”操作界面
图12-32 常用的安全组规则
12.4 服务器管理
12.4.1
修改主机名
有时候为了管理方便,我们需要对服务器默认的名字修改一下,改成一个有一定意义的名字。
如图12-33所示,我们使用Xshell登录服务器,输入命令hostname,可以查看服务器的当前主机名。然后我们使用WinSCP登录服务器,找到位于/etc/sysconfig/目录下的network文件,将主机名修改为我们想改的名字,如图12-34所示,保存好后退出服务器,然后在管理控制台重启服务器,使该配置生效。
图12-33 查看服务器当前主机名
图12-34 修改network文件中的主机名
不过这种方法只在CentOS 7之前的系统中生效,而且有的云服务商如腾讯云不支持修改主机名,修改后其用户管理后台会出现报警信息,所以我们在修改以前可以先咨询一下客服。
12.4.2
挂载数据盘
我们在为服务器购买一个额外的数据盘后,需要将数据盘格式化并挂载上去。
在阿里云购买的服务器里面,内置了一个挂载数据盘的脚本auto_fdisk.sh,可以直接使用;但是如果没有这个脚本,则需要下载后再使用了。
如图12-35所示,我们使用 Xshell 登录服务器,输入如下代码块,可以快速挂载数据盘。此工具也内置到了一键工具OneinStack中。
图12-35
使用挂载数据盘的快速脚本
wget
http://mirrors.linuxeye.com/scripts/auto_fdisk.sh
chmod +x ./auto_fdisk.sh
./auto_fdisk.sh
如果显示结果如图12-36所示,则表示挂载成功。
图12-36
使用快速脚本挂载数据盘成功后的显示结果
12.4.3
重要数据定时备份
一般来说,我们有了快照基本上可以不用进行数据备份了,但是有时候快照可能会不起作用,作者我就碰到过这种事。万幸的是,那次快照出问题前,作者我把网站和对应的数据库的数据备份了。所以,我们接下来将教大家如何手动备份重要数据。
我们使用Xshell登录服务器,使用命令cd oneinstack进入一键工具OneinStack的目录里,执行命令./backup_setup.sh进入备份设置程序,如图12-37所示。
图12-37
使用OneinStack内置的备份设置程序
首先,第一个选项是让我们选择备份的目标,一共有五个选项,我们选择第一个来备份本地机器即可;第二个选项是选择备份内容,我们选择第三个选项来备份所有的关键数据;接下来是让我们选择备份的文件的默认存放目录,我们选择默认的即可;然后选择数据库备份后的保存时间,我们这里将它设置为了7天,也就是一个月大概备份四次;接下来的两个选项是让我们选择需要备份的数据库和网站,由于整个服务器只有一个数据库和一个网站,所以我们选择默认即可。
自动备份程序设置好以后,我们测试一下备份效率,检查是否工作良好。我们输入命令./backup.sh,稍等几秒,如果数据不是特别庞大,一般能马上备份完成。数据备份完成以后,我们使用WinSCP登录服务器,找到默认的备份目录——/data/backup/目录,如图12-38所示。我们将这些备份文件下载到本地进行妥善保存,然后与服务器上的文件进行比对,确认这次的备份效果。
图12-38
找到并下载相关目录中的备份文件