我运行几个 Linux 服务器;在家里的一个作为文件服务器,还有三个实时服务器分别用作站点、邮件、云储存。虽然我不用担心家里的服务器的安全问题,因为它不和外面的世界对话,但是另外三个服务器始终需要维护。对于那些 Linux 新手并且他们想运行自己的服务器,那么他们必须将一些观念牢记在心,这就是本文所专注的方面。
安装你需要的
如果你计划运行一个服务器,你也许会想“我在 Linode 有40GB的固态硬盘存储空间,所以我能够安装我想要的任何服务。”的确如此:你的服务器、软件等都可以安装在上面。但是也不要太想当然了。即使是最“坚硬”的服务器也能够被劫持,由于在它上面使用未打补丁或者易受攻击的组件。
所以第一个规则是保持你服务器的精简,让它吝啬一点。只安装那些你真正需要的软件。如果存在不想要的软件,就清除它们。软件越少,未打补丁的代码也会少些。在你安装任何软件和依赖包之前(比方说:私有云),你应该阅读私有云的文档并只安装那些你需要的包。
运行你需要的
第二个规则是只运行那些你需要的服务。许多发行版或者软件包也许在不同的端口开启了特定的服务。那会造成一些安全风险,请先打开终端并运行下面这条命令:
netstat -npl
输出结果将会告诉你在哪些端口正在运行哪些服务。如果你发现任何你没有打算运行的服务,停止这些服务。你也应该注意一下那些随系统启动就启动并运行的服务。你能够通过在系统上运行systemd来检查这些服务,输入以下命令:
systemctl list-unit-files –type=service | grep enabled
根据你自己的系统,你将会得到一个如图1所示的输出结果。如果你发先任何不想要的服务,你可以运行systemctl命令关闭它:
systemctl disable service_name
服务器入口限制
就像你不会把你家门的钥匙给你认识的每一个人,你也不应该让你认识的人随便进入你的服务器。一旦明确了这一规则,你就要限制服务器的进入。记住一件事:做这些并不能阻止那些执着于使你服务器瘫痪的人。我们做的只是增加服务器的安全级别以应对攻击者的偶然攻击。
从不以Root权限登陆
以超级用户远程登陆到你的服务器可不是什么好习惯。我们将会禁用以root用户远程登陆服务器,但在做这之前,让我们先创建一个拥有sudo权限的用户以便你能够远程登陆服务器并执行管理员任务。一旦你用这个用户身份登陆服务器,你总是能够在你需要时随时切换到root权限。如果你在系统上已经有了一个用户,请跳过这些步骤;否则的话,还是跟着我做下去。
不同的发行版增加新用户的方式有所不同;Red Hat/ CentOS 使用useradd命令, Ubuntu / Debian 使用adduser命令。
在Fedora/ CentOS 上创建一个新用户:
useradd swapnil
接着为这个用户创建一个密码:
passwd swapnil
命令会让你给这个用户提供一个新密码。现在你要做的是赋予该用户sudo权限。运行以下命令:
EDITOR=nano visudo
并找到下面这一行(图2):
# %wheel ALL=(ALL) ALL
取消这一行注释(#表示注释;删除#表示取消注释)就像下面这个样子:
%wheel ALL=(ALL) ALL