设为首页收藏本站

亚洲数据论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1228|回复: 0

【教程】 让你的 Linux 服务器更安全的方法

[复制链接]

577

主题

765

帖子

15

精华

Rank: 7Rank: 7Rank: 7

积分
3869
1869 枚
0 枚
2 枚
发表于 2016-1-13 18:34:47 | 显示全部楼层 |阅读模式
本帖最后由 勇敢的心 于 2016-1-17 17:15 编辑

我运行几个Linux服务器;在家里的一个作为文件服务器,还有三个实时服务器分别用作站点、邮件、云储存。虽然我不用担心家里的服务器的安全问题,因为它不和外界对话,但是另外三个服务器始终需要维护。对于那些想运行自己的服务器的Linux新手,他们应该将一些观点牢记在心,就是本文将要给出的几个方法。


只安装你需要的


如果你准备运维一个服务器,你也许会这样想“我在 Linode有40GB的固态硬盘存储空间,所以我可以安装我想要的任何服务。”好吧,的确是这样:你的服务器的系统、软件什么的都可以安装在上面。但是也不能太想当然了。要知道即使是最“坚固”的服务器也能够被攻击的,往往是由于在服务器上使用未打补丁或者易受攻击的组件。


所以第一个原则是尽量精简你服务器,让它轻快些。只安装那些你真正需要的软件。如果存在不想要的软件,就要清除它们。软件少了,未打补丁的代码也会少的。在你安装任何软件包和依赖包之前,你应该阅读该软件的文档并只安装那些你需要的组件。


运行你需要的


第二个原则是只开启那些你需要的服务。许多发行版或者软件包也许已经在不同的端口开启了相应的服务。其实这会有一些安全风险,先打开终端运行下面这行命令:


  1. netstat -npl
复制代码

输出的结果将会告诉你系统正在哪些端口运行哪些服务。如果你发现有你不想运行的服务,关闭这些服务吧。你也应该注意那些随系统启动运行的服务。你可以运行systemd来查看这些服务:


  1. systemctl list-unit-files -type=service | grep enabled
复制代码

根据各自的系统,你会得到一个类似下图所示的输出。如果你发现任何不想运行的服务,可以运行systemctl命令来关闭:


  1. systemctl disable service_name
复制代码

让你的 Linux 服务器更安全的方法 -1

让你的 Linux 服务器更安全的方法 -1


增加进入服务器的限制


就像你不会把自家门的钥匙给你认识的每一个人,你也不应该让你认识的人可以随便进入你的服务器。既然明确了这一原则,你就要对服务器增加一些进入的限制。然而请记住:做这些并不能阻止那些一门心思使你服务器瘫痪的人。我们做的只不过是增加服务器的安全级别以应对偶然的攻击。


不要以Root权限登陆


以root用户远程登陆服务器可不是什么好的习惯。我们将要禁止以root用户远程登陆服务器,在做这之前,我们要先创建一个有sudo权限的普通用户以便能够远程登陆服务器并且执行管理员权限。只要你用这个用户登陆服务器,你总能够在你需要时切换为root权限。如果你在系统上已经有了一个这样的用户,跳过下面这些步骤;否则,继续跟着我做。


不同发行版新建用户的方式有所不同,Red Hat/CentOS使用useradd命令,Ubuntu/Debian使用adduser命令。


在Fedora/CentOS上新建一个用户:


  1. useradd swapnil
复制代码

接着为这个用户创建一个密码:


  1. passwd swapnil
复制代码

然后会让你给该用户提供一个新密码。接着是赋予该用户sudo权限,运行命令:


  1. EDITOR=nano visudo
复制代码

找到下面这一行(如下图):


  1. # %wheel ALL=(ALL) ALL
复制代码

让你的 Linux 服务器更安全的方法 -2

让你的 Linux 服务器更安全的方法 -2


取消这一行的注释(#表示注释,删除#表示取消注释):


  1. %wheel ALL=(ALL) ALL
复制代码

保存关闭文件。如果该用户不属于wheel组,你可以运行命令把其加入该组:


  1. # usermod -aG wheel swapnil
复制代码

在Ubuntu上,你可以通过以下命令新建一个用户:


  1. adduser swapnil
复制代码

然后系统会有一些问题,根据情况回答就可以了,比如为该用户创建新密码等。接着是赋予该用户sudo权限:


  1. gpasswd -a swapnil sudo
复制代码

开启另一个终端并尝试用新建的用户登陆服务器,可以试着切换sudo权限去执行一些管理员权限。如果没什么问题,继续下一步。


禁止root登陆远程登陆


我们将禁止root登陆,这意味着将没有人能以root用户远程登陆服务器。先打开sshd配置文件:


  1. nano /etc/ssh/sshd_conf
复制代码

找到下面的注释行并取消注释:


  1. #PermitRootLogin no
复制代码

保存关闭文件并重启服务:


  1. service ssh restart
复制代码

另一个命令也可以:


  1. systemctl restart sshd
复制代码

注意:先不要登出服务器。你需要先测试一下能否用新建用户成功地远程登陆服务器。开启另一个终端尝试用新建用户远程登陆服务器。这样做的目的是防止你被服务器“锁”在了外面。如果一切都正常,你可以安全地登出root身份了。


改变端口


另一个改动是改变sshd文件中的默认端口。这只不过好像是增加一些烟雾来保护你的服务器安全,并不是对服务器真的做了什么。就像是用很多一模一样的车去运送重要人物一样,这可以让意图不轨之人不知道他乘的是哪辆车。


打开sshd_config文件(这次用sudo权限,因为你已经不能再以root用户登陆服务器了,其实这样做也很方便。):


  1. sudo nano /etc/ssh/sshd_conf
复制代码

找到下面注释行:


  1. #Port 22
复制代码

取消注释并选择一个端口,要确保选择的端口没有被系统的其它服务占用。你可以从Wikipedia介绍中了解到哪些是常用端口,并且应避免使用这些端口。我选择的端口是1977:


  1. Port 1977
复制代码

接着保存关闭文件并重启sshd服务。再次提醒,在登出服务器前,开启另一个终端并用以下命令尝试登陆服务器:


  1. ssh -p{port_number}@server_IP
复制代码

具体如下:


  1. ssh -p1977 swapnil@10.14.190.118
复制代码

如果你成功登陆,说明已经设置好了。


无密码登陆


你能够通过无密码方式更简单地远程登陆服务器,并且通过关闭密码验证也可以增加一点安全级别。不过你也只能在生成ssh密钥的机器上登陆服务器了。


在个人机器上生成ssh密钥(如下图),使用如下命令:


  1. ssh-keygen - t rsa
复制代码

让你的 Linux 服务器更安全的方法 -3

让你的 Linux 服务器更安全的方法 -3


通常会有一些问题,比如你可以默认密钥的位置,然后想一个难猜的密码口令。接着,你需要把生成的密钥复制到服务器上,使两个机器可以通过密钥进行交流。


  1. cat ~/.ssh/id_rsa.pub | ssh -p 1977 swapnil@remote-server “;mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys”
复制代码

现在试着开启另一个终端远程登陆服务器,如果一切顺利的话,你就不用再输入密码了。


这一步与其说是增加安全性倒不如说是为了方便,但你可以关闭服务器的密码验证服务来增加一点安全性。只需打开sshd_config文件,找到下面的注释行:


  1. #PasswordAuthentication yes
复制代码

取消注释并把值设为no,保存并关闭,然后重启sshd服务。记住,不要关闭当前的连接终端,开启另一个终端测试登陆(再次确定登陆不需要密码)。


这个设置会使得你只能在生成ssh密钥的机器上远程登陆服务器。如果你需要经常从不同的机器登陆服务器,就不必使用这种方法了。


结语


有一些基本概念告诉那些尝试运行自己服务器的新人,牢记骇客始终比我们想得深想得远,他们以寻找系统漏洞并攻击服务器为乐。因此,最好养成定期备份服务器的习惯,我建议你在服务器变动前后做备份。万一你的服务器哪天瘫痪了,你还可以从备份中重新恢复起来。


*原文链接:《How To Make Your Linux Server More Secure》




亚洲数据论坛 - 作者版权声明分割线

Respect for the original creation of the hard, the author of : lijunlhc/LinuxStory  In this thanks!




是失败让我乐观;
是快乐让我冷静.
因为我有一颗和你一样勇敢的心!
支持支持 高兴高兴 淡定淡定 惊呆了惊呆了 给力给力 回帖回帖 生气生气 感谢感谢 路过路过
自动排版 | 高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|站点地图|亚洲数据论坛   

GMT+8, 2017-11-22 20:15

©2009-Infinity  Data Forum Asia

快速回复 返回顶部 返回列表