15步战略轻松提升Linux服务器安全水平

很多人认为Linux天然安全——这显然是种荒谬的误解。想象一下,如果我们的笔记本设备未经安全保护且被他人盗取,那么对方往往能够轻松猜到我们的用户名为“root”而密码为“toor”——因为这是大多数人都在无脑使用的默认组合。如果是这样,Linux的安全性体现在哪里?

为了避免上述问题的出现,我们将通过本篇文章共享15项重要心得,帮助大家在多种Linux发行版当中利用其中的通用逻辑实现安全性强化。

1-记录主机信息

在进行系统保护之前,我们首先需要创建一份文档,其中包含全部待检查条目。另外,在文档开头,大家还需要包含以下Linux主机信息:

设备名称

IP地址

Mac地址

实施安全强化工作的人员姓名

日期

资产编号(如果在企业当中,则需要包含用于标记主机的资产编号)

2-BIOS保护

需要利用密码保护主机BIOS,避免最终用户变更或者覆盖其中的安全设定。每一家计算机制造商都会提供不同的BIOS模式进入方式,接下来则是设定理想的管理密码。

之后,大家需要禁用外部介质启动(USB/CD/DVD)。如果不变更此配置,那么任何人都能够利用U盘启动系统并访问其中的数据。

最新的服务器主板内包含一套内部Web服务器,大家可以对其进行远程访问。确保变更管理页面中的默认密码或者在可行时加以禁用。

3-硬盘加密(保密)

大多数Linux发行版允许大家在安装前对磁盘进行加密。磁盘加密非常重要,特别是考虑到设备失窃这种可能性的存在。

如下图所示,大家可以从列表中选择第三个选项:Guided-use entire disk and set up encrypted LVM(LVM代表逻辑分卷管理器)。

  如果您的Linux发行版不支持加密,则可选择TrueCrypt等软件方案。

  4-磁盘保护(可用性)

备份对于系统受损以及系统更新bug等问题拥有良好的解决效果。对于重要服务器,我们可以考虑将备份数据传输至异地以实现灾难恢复。在设计备份方案时,大家需要考虑几项重要问题,包括旧备份需要保留多久、何时需要进行系统备份(每天一次抑或每周一次)等。

关键性系统应分为多个不同分区:

/

/boot

/usr

/home

/tmp

/var

/opt

磁盘分区允许大家在遭遇系统错误时保持其性能与安全性。如下图所示,大家可以看到该选项如何在Kali Linux的安装过程中进行分区划分。

  5-锁定引导目录

引导目录中包含有与Linux内核密切相关的重要文件,因此大家需要确保此目录被锁定为只读模式。首先,打开“fstab”文件。

  此后,在末尾添加最后的高亮行。

  完成文件编辑后,大家需要执行以下命令设定其拥有者:

#chown root:root /etc/fstab

此后,我设置了几项权限用以保护引导设置:

将拥有者与/etc/grub.conf组设定为root用户:

#chown root:root /etc/grub.conf

在/etc/grub.conf文件上将权限设定为仅root可读写:

#chmod og-rwx /etc/grub.conf

单用户模式要求使用验证:

#sed -i "/SINGLE/s/sushell/sulogin/" /etc/sysconfig/init

#sed -i "/PROMPT/s/yes/no/" /etc/sysconfig/init

6-禁用USB

某些高重要度系统需要禁用U盘使用。我们可以通过多种方式拒绝U盘存储介质的接入,以下介绍一种较为普遍的作法:

利用文本编辑器打开 “blacklist.conf” 文件:

#nano /etc/modprobe.d/blacklist.conf

打开后,将以下行添加至文件内容末尾(而后保存并退出):

blacklist usb_storage

此后,打开rc.local文件:

#nano /etc/rc.local

最后,添加以下两行:

modprobe -r usb_storage

exit 0

7-系统更新

在首次引导完成后,我们必须马上进行系统更新。总体来讲,大家只需要打开终端窗口并执行对应命令即可。在Kali Linux中,大家可以执行如下图所示的命令:

  8-检查已安装软件包

列出Linux系统中已经安装的全部软件包,并将其中不必要的部分移除。大家需要以严格的方式进行筛选,这对于Linux服务器的安全保障非常重要。下面来看如何在Kali Linux中列出全部已有软件包:

请注意,禁用不必要的服务能够有效削减攻击面,因此如果大家在自己的Linux服务器中找到了以下服务,请马上将其移除:

Telnet server

RSH server

NIS server

TFTP server

TALK server

9-检查开放端口

正确识别指向互联网的开放端口非常重要。在Kali Linux中,可使用以下命令以找到任意隐藏的开放端口:

  10-保护SSH

是的,SSH确实很安全,但大家仍然需要对其加以保护。首先,如果大家能够禁用SSH,那这本身就是个问题。另外,如果要切实加以使用,大家还需要调整SSH的默认配置。前往/etc/ssh并打开sshd_config文件。

  将默认端口数22变更为其它,例如99。

确保root无法通过SSH进行远程登录:

PermitRootLogin no

允许部分特定用户接入:

AllowUsers [username]

当然,需要调整的内容远不止如此。例如,某些企业会添加屏蔽机制以避免攻击者的进一步深入。我建议大家查看SSH手册以了解此文件中全部配置的含义。

以下为大家需要确保sshd_config文件中存在的部分其它选项:

Protocol2

IgnoreRhosts to yes

HostbasedAuthentication no

PermitEmptyPasswords no

X11Forwarding no

MaxAuthTries 5

Ciphers aes128-ctr,aes192-ctr,aes256-ctr

ClientAliveInterval 900

ClientAliveCountMax 0

UsePAM yes

最后,在sshd_config上设置权限以确保只有root用户能够对其内容进行变更:

#chown root:root /etc/ssh/sshd_config

#chmod 600 /etc/ssh/sshd_config

11- 启用SELinux

安全强化Linux,即SELinux,是一项内核安全保护机制,用于支持访问控制安全策略。SELinux拥有以下三种配置模式:

Disabled: 关闭

Permissive: 输出警告

Enforcing: 执行策略

使用文本编辑器打开config文件:

#nano /etc/selinux/config

确保其中的策略得到执行:

SELINUX=enforcing

  12- 网络参数

保护Linux主机网络活动同样非常重要。不要假定防火墙能够搞定一切问题。下面来看在保护主机网络时需要认真考虑的几项核心问题:

- 禁用IP转发:在“/etc/sysctl.conf”中将net.ipv4.ip_forward参数设定为0。

- 禁用发送包重新定向:在“/etc/sysctl.conf”中将net.ipv4.conf.all.send_redirects与net.ipv4.conf.default.send_redirects参数设定为0。

- 禁用ICMP重新定向接受:在“/etc/sysctl.conf”中net.ipv4.conf.all.accept_redirects将与net.ipv4.conf.default.accept_redirects参数设定为0。

- 启用恶性错误消息保护:在“/etc/sysctl.conf”中将net.ipv4.icmp_ignore_bogus_error_responses参数设定为1。

我强烈建议大家在Linux防火墙中应用iptable规则并过滤全部输入、输出以及转发数据包。配置适合自身需求的iptable需要耗费一定时间,但这一切都是值得的。

13- 密码策略

人们常常会重复使用密码,而这显然是一种糟糕的安全实践。原有密码会被存储在/etc/security/opasswd文件当中。我们将利用PAM模块以管理Linux主机的安全策略。在debian发行版中,打开/etc/pam.d/common-password文件并添加以下两行:

auth sufficient pam_unix.so likeauth nullok

password sufficient pam_unix.so remember=4 (意味着用户无法重复使用以往使用过的最后四条密码。)

另一项需要强制执行的策略为强密码要求。PAM模块提供的pam_cracklib能够保护服务器免受词典及暴力破解攻击的危害。要完成这项任务,打开/etc/pam.d/system-auth文件并添加以下行:

/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1

Linux会对密码进行散列处理,以避免其被保存为明文形式。因此,我们需要确保将安全密码定义中的散列算法设定为SHA512。

另一项有趣的功能是在五次失败尝试后锁定该账户。要实现这一效果,大家需要打开/etc/pam.d/password-auth文件并添加以下行:

auth required pam_env.so

auth required pam_faillock.so preauth audit silent deny=5 unlock_time=604800

auth [success=1 default=bad] pam_unix.so

auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=604800

auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=604800

auth required pam_deny.so

到这里还没有完成,我们还需要额外一项步骤。打开/etc/pam.d/system-auth文件并确保添加以下内容:

auth required pam_env.so

auth required pam_faillock.so preauth audit silent deny=5 unlock_time=604800

auth [success=1 default=bad] pam_unix.so

auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=604800

auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=604800

auth required pam_deny.so

在五次失败尝试后,只有管理员能够使用以下命令解锁该账户:

# /usr/sbin/faillock --user --reset

另外,我们也可以为密码设置为期90天的过期时长:

在“/etc/login.defs”中将PASS_MAX_DAYS参数设定为90

执行以下命令以变更活动用户:

#chage --maxdays 90

下面这项提示用于强化密码策略,即在/etc/pam.d/su文件内设置参数以限制指向su命令的访问:

auth required pam_wheel.so use_uid

最后一项密码策略相关提示在于面向非root用户禁用系统账户,具体请使用以下脚本:

#!/bin/bash

for user in `awk -F: '($3 < 500) {print $1 }' /etc/passwd`; do

if [ $user != "root" ]

then

/usr/sbin/usermod -L $user

if [ $user != "sync" ] && [ $user != "shutdown" ] && [ $user != "halt" ]

then /usr/sbin/usermod -s /sbin/nologin $user

fi

fi

done

14-权限与验证

请保持耐心,因为以下列表内容较长。不过权限正是实现Linux主机安全保护目标的一大重要因素,因此值得我们多花点时间与精力。

执行以下命令以在/etc/anacrontab、/etc/crontab与/etc/cron.*上设定用户/组拥有者及权限:

#chown root:root /etc/anacrontab

#chmod og-rwx /etc/anacrontab

#chown root:root /etc/crontab

#chmod og-rwx /etc/crontab

#chown root:root /etc/cron.hourly

#chmod og-rwx /etc/cron.hourly

#chown root:root /etc/cron.daily

#chmod og-rwx /etc/cron.daily

#chown root:root /etc/cron.weekly

#chmod og-rwx /etc/cron.weekly

#chown root:root /etc/cron.monthly

#chmod og-rwx /etc/cron.monthly

#chown root:root /etc/cron.d

#chmod og-rwx /etc/cron.d

在/var/spool/cron上为root crontab设定权利与权限:

#chown root:root

#chmod og-rwx

在passwd文件上设置用户/组拥有者与权限:

#chmod 644 /etc/passwd

#chown root:root /etc/passwd

在group文件上设置用户/组拥有者与权限:

#chmod 644 /etc/group

#chown root:root /etc/group

在shadow文件上设置用户/组拥有者与权限:

#chmod 600 /etc/shadow

#chown root:root /etc/shadow

在gshadow文件上设置用户/组拥有者与权限:

#chmod 600 /etc/gshadow

#chown root:root /etc/gshadow

15-其它安全强行举措

作为最后一项建议,我将与大家分享其它几项重要选项。

首先,限制核心转储:

向“/etc/security/limits.conf”文件添加hard core 0。

向“/etc/sysctl.conf”文件添加fs.suid_dumpable = 0。

第二,配置Exec Shield:

向“/etc/sysctl.conf”文件添加kernel.exec-shield = 1。

第三,启用随机虚拟内存区域放置:

向“/etc/sysctl.conf”文件添加kernel.randomize_va_space = 2。

原文标题: Linux hardening: a 15-step checklist for a secure Linux server,作者: Gus Khawaja

本文转自d1net(转载)

时间: 2024-08-31 00:53:52

15步战略轻松提升Linux服务器安全水平的相关文章

15步打造一个安全的Linux服务器

可能大多数人都觉得Linux是安全的吧?但我要告诉你,这种想法绝对是错误的!假设你的笔记本电脑在没有增强安全保护的情况下被盗了,小偷首先就会尝试用"root"(用户名)和"toor"(密码)来登录你的电脑,因为这是KaliLinux的默认用户名和密码,而大多数人仍然会继续使用它们.你是否也是这样?我希望你不是! 在这篇文章中,我将会与大家分享一些能够让你的Linux主机更加安全的方法,其中还会包括一些渗透测试技巧.需要注意的是,目前市面上有很多不同的Linux发行版

转 用十条命令在一分钟内检查Linux服务器性能

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top 其

用十条命令在一分钟内检查 Linux 服务器性能

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top 其

用十条命令在一分钟内检查Linux服务器性能

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?Netflix性能工程团队的Brendan Gregg写下了这篇博文,来看他们是怎样通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime  dmesg | tail  vmstat 1  mpstat -P ALL 1  pidstat 1  iostat -xz 1  free -m  sar -n DEV 

如何用十条命令在一分钟内检查 Linux 服务器性能

如果你的Linux服务器突然负载暴增,报警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top 其

Linux服务器反向代理软件varnish

 Varnish作为反向代理软件,应用于Web 前端,其良好的Cache性能使得网站承载能力有很大提升,下面记录下最近使用在Varnish学习与应用中的实践体会,本篇主要内容:安装 配置 监控. 一.varnish安装 通常有两种方法: 1.下载安装文件,本地编译安装 2.连到官网,自动安装(比较简单) https://www.varnish-cache.org/installation/redhat 二.配置文件 1.配置Varnish 启动运行参数,如指定对应执行脚本,即vcl文件Varni

如何使Linux服务器变得更安全

  牢记以下这七点会让你的Linux服务器变得更安全 图1:运行中的服务. 安装所需的服务 如果你打算运行一台服务器,可能会想"我有来自Linode的40GB固态硬盘(SSD)存储系统,于是我可以安装想要安装的任何服务."没错,你的地盘你作主:可以在服务器上安装任意软件.不过,别犯想当然的毛病.连最固若金汤的服务器也会因有人钻了在该服务器上运行的任何未打补丁或易受攻击的软件组件的空子而被劫持. 所以,头一条规则就是让你的服务器尽量精简.只安装你确实需要的那些程序包.要是有不需要的程序包

Linux服务器上用iScanner删除网页恶意代码的方法

  Linux服务器上怎么用iScanner删除网页恶意代码?这篇文章主要介绍了Linux服务器上用iScanner删除网页恶意代码的方法,iScanner为Ruby编写,所以服务器上要首先安装Ruby解释器,需要的朋友可以参考下 第一步:安装 首先要确保服务器上已经安装了Ruby 代码如下: #ruby -v //查看ruby的版本信息 如果服务器上没有安装,可以通过yum或者apt-get安装ruby(根据自己服务器系统选择对应的方法安装) 代码如下: #yum install ruby /

《构建高可用Linux服务器 第3版》—— 1.2 全面了解Linux服务器

1.3 Linux服务器的网络配置 Linux服务器的系统安装好后,就要在机房或公司内网环境中配置它的IP了,这是最重要的一个环节,下面我就以CentOS 5.8 x86_64服务器为例来说明如何通过命令或图形来配置Linux服务器的IP.网关.DNS,以及如何用命令查看Linux的进程或网络连接等. 1.3.1 配置Linux服务器的网络 1.手动修改配置网卡文件 手动配置网卡是最直接的方式,熟练的系统管理员在平时维护系统的时候更喜欢使用这种方式,因为手工配置有很多优点: 熟悉命令之后,手工配