信息安全

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

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

只安装你需要的

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

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

运行你需要的

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

[alert style="green"] netstat -npl [/alert]

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

[alert style="green"] systemctl list-unit-files --type=service | grep enabled [/alert]

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

[alert style="green"] systemctl disable service_name [/alert]

running-services-1

增加进入服务器的限制

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

不要以Root权限登陆

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

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

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

[alert style="green"] useradd swapnil [/alert]

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

[alert style="green"] passwd swapnil [/alert]

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

[alert style="green"] EDITOR=nano visudo [/alert]

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

[alert style="green"] # %wheel ALL=(ALL) ALL [/alert]

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

[alert style="green"] %wheel ALL=(ALL) ALL [/alert]

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

[alert style="green"] # usermod -aG wheel swapnil [/alert]

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

[alert style="green"] adduser swapnil [/alert]

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

[alert style="green"] gpasswd -a swapnil sudo [/alert]

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

禁止root登陆

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

[alert style="green"] nano /etc/ssh/sshd_conf [/alert]

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

[alert style="green"] #PermitRootLogin no [/alert]

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

[alert style="green"] service ssh restart [/alert]

另一个命令也可以:

[alert style="green"] systemctl restart sshd [/alert]

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

改变端口

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

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

[alert style="green"] sudo nano /etc/ssh/sshd_conf [/alert]

找到下面注释行:

[alert style="green"] #Port 22 [/alert]

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

[alert style="green"] Port 1977 [/alert]

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

[alert style="green"] ssh -p{port_number}@server_IP [/alert]

具体如下:

[alert style="green"] ssh -p1977 swapnil@10.14.190.118 [/alert]

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

无密码登陆

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

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

[alert style="green"] ssh-keygen - t rsa [/alert]

ssh-key-3

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

[alert style="green"] cat ~/.ssh/id_rsa.pub | ssh -p 1977 swapnil@remote-server ";mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" [/alert]

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

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

[alert style="green"] #PasswordAuthentication yes [/alert]

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

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

结语

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

原文链接:http://www.linux.com/learn/tutorials/843903-how-to-make-your-linux-server-more-secure/

译文链接:http://www.linuxstory.org/four-ways-to-make-your-linux-server-more-security/

对这篇文章感觉如何?

太棒了
0
不错
0
爱死了
0
不太好
0
感觉很糟
0

You may also like

1 Comment

回复 ddd 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

More in:信息安全

信息安全

深度解析shellcode原理及编码技术

本篇文章深度探讨了Shellcode的原理,同时对64位和32位系统下的shellcode进行了详细解读。并详细介绍了Shellcode的编码技术,其中包括手写Shellcode的两种思路。对于编码Shellcode,本文列举了几种常见的解码器的实现,如FNSTENV XOR解码器和JMP/CALL解码器。最后,本文列举了几种常见的字符集以及Shellcode编码工具,并推荐了两个可查找现成Shellcode的数据库。
信息安全

安卓逆向:去广告和弹窗

安卓应用中常见有三种广告:启动广告、弹窗广告以及横幅广告。启动广告一般是单独的一个 Activity,对于这种广告可以通过 Activity 切换定位来加以去除。弹窗广告一般是在 Activity 方法中通过 Dialog->show() 方法调用的,这种广告可以通过 Hook、定位并修改代码方法去除。横幅广告是出现在 UI 布局中的广告,在 xml 中定位到之后可以通过修改宽高和可见性的方法去除。
信息安全

安全能力交换协同应对DDoS

安全形势的急剧恶化也催生出了海量的安全需求,大量安全厂商及网络运营商都投身到这场全球性的安全对抗战役中,但是随着网络攻击在规模、复杂性及量级方面的不断扩大,越来越多的网络安全厂商及运营商感觉到“力不从心”,大家都意识到应对现今的网络攻击已不是一家公司或单一组织可以解决的。协作,必将成为未来网络安全领域最重要的发展方向。