加强Linux服务器安全的20项建议

2017-10-19 22:15:01作者:Linux编辑稿源:系统极客
https://ywnz.com/linuxyffq/99.html

一般情况下用 Linux 做桌面在默认配置下是很安全的,我在一定程度上同意这个说法(很值得商榷的话题)。不过 Linux 内置的安全模型和工具做得确实很到位,用户只需进行简单的调整和自定义就可以加强 Linux 服务器安全。

与恶意用户做斗争对于所有 Linux 系统管理员来说都是一项艰巨的任务,本文我们将介绍如何加强 Linux 服务器安全的 20 项建议,希望对保护你的系统有所帮助。

1.物理安全

在服务器 BIOS 中禁用光驱、软驱、U盘等可引导的外部设备,并启用 BIOS 密码及 GRUB 密码来限制对系统的物理访问。

2.磁盘分区

我们可以通过使用不同的分区来分散存储数据以获得更高的数据安全性,当发生任何灾难时,由于数据是隔离存储的,会将数据损失的几率降到最低。

3.尽量减少软件包以减少漏洞

建议管理员尽量避免在 Linux 中安装非必要的软件包,而且不要使用来源不明的包,以尽可能的避免程序漏洞。当一个服务出问题时,很可能会波及到其它服务甚至整个系统,所以「非必要的服务就不运行」这是一个铁则。

对于 CentOS 系统可以使用 chkconfig 来查看运行在 runlevel 3 的服务:

/sbin/chkconfig --list |grep '3:on'

一旦发现有不需要的服务正常运行,可以使用如下命令禁用:

chkconfig serviceName off

对于使用 RPM 包或 DEB 安装的服务可以使用 yum 或 apt-get 找出包名称并用如下命令移除:

yum -y remove package-name

sudo apt-get remove package-name

4.查看网络侦听端口

使用 netstat 命令可以看到什么样的网络应用正在侦听哪些端口,找出不必要的程序之后再用上面的方面来处理。

netstat –tulpn

5.使用安全的远程连接(SSH)

Telnet 和 rlogin 都使用明文的协议,而且已被证实存在多种已经安全漏洞,SSH 是一种安全的协议,它可以使用加密技术与服务器进行通讯。

非必要时,不要使用 root 账户登录 SSH,要习惯使用 sudo 来切换身份。

SSH 22 端口目标过于明显,建议大家改成一个不常用的高端口并在 vi /etc/ssh/sshd_config 配置文件中至少配置如下选项:

#禁用root登录

PermitRootLogin no

#仅允许特定用户

AllowUsers username

#SSH协议版本

Protocol 2

6.保持系统更新

尽量始终保持系统内核、应用补丁及安全修复处在最新状态:

yum updates

yum check-update

7.锁定定时任务

cron 可以指定哪些用户可以使用,只需将允许的用户添加到 /etc/cron.allow 或将禁用的用户添加到 /etc/cron.deny 中即可。如果希望禁用所有用户使用任务计划,只需将ALL添加到cron.deny文件当中。

echo ALL >>/etc/cron.deny

8.禁用USB存储设备检测

很多时候我们都需要禁用 USB 存储设备以防数据拷出,此时可以创建一个/etc/modprobe.d/no-usb文件并填入如下内容即可禁用 USB 存储设备检测:

install usb-storage /bin/true

9.启用SELinux

安全增强型 Linux(SELinux)是在内核中提供的强制访问控制的安全机制。很多网络文章为了方便配置都建议大家禁用 SELinux 功能,我在这里到是建议大家在考虑关闭 SELinux 前应该三思。

SELinux 提供用户三种基本操作模式:

Enforcing:启用和执行机器上的 SELinux 策略(默认配置)

Permissive:在此种模式下,SELinux 不会强制执行系统上的安全策略,只会产生相应日志和警告。Permissive 模式在 SELinux 排错时经常会乃至。

Disabled:禁用 SELinux 功能

如果你想查看当前系统 SELinux 的状态可以使用:

sestatus

如果要从禁用状态启用 SELinux 可以使用:

setenforce enforcing

以上配置只对当前系统状态有用,重启会失效。要一劳永逸开关 SELinux 可以更改其配置文件/etc/selinux/config。

10.移除KDE/GNOME桌面

不论你是运行 LAMP 的专属服务器还是其它类型服务器,KDE 或 GNOME 这样 X Window 桌面环境是没多大必要使用的,禁用之后可以提高服务器性能和增强安全性。使用如下命令即可完全卸载:

yum groupremove "X Window System"

11.禁用IPv6

IPv6 目前还没有大规模普及,如果你不使用 IPv6 协议,可以在 /etc/sysconfig/network 配置文件中将其禁用。

NETWORKING_IPV6=no

IPV6INIT=no

12.限制用户重复使用旧密码

很多用户习惯在强制定期更换密码时重复循环使用以前的密码,这对于服务器管理员来说是一种非常不好的习惯。因此建议大家限制用户重复使用旧密码,该功能可以通过 PAM 来实现。

RHEL/CentOS/Fedora:/etc/pam.d/system-auth

Ubuntu/Debian/Linux Mint:/etc/pam.d/common-password

在上述配置文件中的auth区块添加一行:

auth        sufficient    pam_unix.so likeauth nullok

在password区块添加一行:

password   sufficient    pam_unix.so nullok use_authtok md5 shadow remember=5

配置好后,服务器会禁止使用最近 5 个被使用过的用户密码。

13.配置密码过期策略

Linux 中,用户密码是被加密存储到/etc/shadow文件当中的,要配置密码过期的详细信息需要用到change命令。例如要查看某个账户的密码过期日期和时间,可以使用如下命令:

chage -l username

要更改密码过期策略可以使用类似如下命令:

chage -M 60 username

chage -M 60 -m 7 -W 7 username

-M 密码使用最长天数

-m 密码使用最短天数

-W 密码过期提示天数

14.手动锁定或解锁账户

在不从系统中移除账户的情况下,对账户进行锁定和解锁是非常有用的一个安全手段。需要锁定一个账户时,可以使用如下命令:

passwd -l accountname

账户锁定同样适用于 root 账户,当某账户被锁定时会增加 (!) 字串,账户解锁时移除 (!) 字串。需要解锁时使用如下命令:

passwd -u accountname

15.强制使用强密码

弱密码或用生日密码之类的密码太容易被字典和社会工程学攻破了,所以建议大家打开强密码要求。Linux 中的强密码要求还是使用 PAM 模块,只需编辑/etc/pam.d/system-auth文件:

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

16.启用Iptables

强烈建议大家使用 Iptables 来保护 Linux 服务器安全,Iptables 可以在不同的链上配置不同的规则来处理数据包。

17.在Inittab中禁用Ctrl+Alt+Delete

大多数 Linux 发行版中按下「Ctrl+Alt+Delete」时都会重启系统,对于 Linux 生产服务器来说,这几乎是一个白痴设计。如果你希望关闭这个默认重启功能,可以将/etc/inittab配置文件中的如下两千注释掉:

# Trap CTRL-ALT-DELETE

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

18.查看空密码账户

如果系统中存在有权限的空密码账户,就相当于开了一扇门。所以建议大家仔细清查一下:

cat /etc/shadow | awk -F: '($2==""){print $1}'

19.忽略ICMP或广播请求

要忽略 ICMP 或广播请求我们可以编辑/etc/sysctl.conf配置文件:

net.ipv4.icmp_echo_ignore_all = 1

net.ipv4.icmp_echo_ignore_broadcasts = 1

配置文件改好之后使用如下命令载入生效:

sysctl –p

20.定期审查日志

建议大家将日志文件进行专门的集中存放和处理,这样可以比较有效避免入侵者对日志进行篡改,下面是 Linux 常见的默认日志路径:

/var/log/message – 系统日志或当前活动日志

/var/log/auth.log – 验证日志

/var/log/kern.log – 内核日志

/var/log/cron.log – 任务计划日志

/var/log/maillog – 邮件服务器日志

/var/log/boot.log – 系统启动日志

/var/log/mysqld.log – MySQL 服务器日志

/var/log/secure – 包含验证和授权方面信息

/var/log/utmp或/var/log/wtmp – 登录记录文件

[转帖]加强Linux服务器安全的20项建议的更多相关文章

  1. Linux服务器安全加固10条建议

    以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过. 设置复杂密码 服务器设置大写.小写.特殊字符.数字组成的12-16位的复杂 ...

  2. 20个Linux服务器安全强化建议(一)

    Linux服务器安全对于保护用户数据.知识产权非常重要,同时还能减少你面对黑客的时间.在工作中,通常由系统管理员对Linux的安全负责,在这篇文章中,介绍了20条对Linux系统进行强化的建议.本文所 ...

  3. 20个Linux服务器性能调优技巧

    Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要 ...

  4. [转]20个你不得不知的Linux服务器性能调优技巧

    Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要 ...

  5. [转帖]如何用十条命令在一分钟内检查 Linux 服务器性能

    如何用十条命令在一分钟内检查 Linux 服务器性能 时间:2016-09-28   作者:admin 分类:新手入门 阅读:246次 http://embeddedlinux.org.cn/emb- ...

  6. 20个Linux服务器安全强化建议(二)

    接上文,继续介绍一些Linux服务器的安全配置. #6.强密码策略.   当我们使用 useradd.usermod 命令创建或维护用户账号时,确保始终应用强密码策略.例如,一个好的密码至少包括8个字 ...

  7. Linux命令(20)linux服务器之间复制文件和目录

    linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们需要获得远程服务器上 ...

  8. [转帖]windows+xshell+xming访问非桌面版Linux服务器

    windows+xshell+xming访问非桌面版Linux服务器 2016年06月05日 00:09:11 jxxiaohou 阅读数:11996 标签: Linux 更多 个人分类: Linux ...

  9. Linux服务器安全配置

    众所周知,网络安全是一个非常重要的课题,而服务器是网络安全中最关键的环节.Linux被认为是一个比较安全的Internet服务器,作为一种开放源代码操作系统,一旦Linux系统中发现有安全漏洞,Int ...

随机推荐

  1. HDU 5734 Acperience ( 数学公式推导、一元二次方程 )

    题目链接 题意 : 给出 n 维向量 W.要你构造一个 n 维向量 B = ( b1.b2.b3 ..... ) ( bi ∈ { +1, -1 } ) .然后求出对于一个常数 α > 0 使得 ...

  2. 【线性代数】3-6:四个子空间的维度(Dimensions of the Four Subspaces)

    title: [线性代数]3-6:四个子空间的维度(Dimensions of the Four Subspaces) categories: Mathematic Linear Algebra ke ...

  3. 作为新手对于初次接触matlab的一些感受。

    使用matlab时的个人感受:1.建立一个matlab的M文件函数function xxx=aaa(b,c,d) 其中返回值为xxx,函数名为aaa,函数变量为b,c,d 要将其写在一个M文件之中,并 ...

  4. Spring Cloud Eureka(三):认识Eureka Server 与 Eureka Client

    Spring Cloud Netflix 是什么 This project provides Netflix OSS integrations for Spring Boot apps through ...

  5. centos7下面安装tomcat

    前言 对于一个新安装的 centos 系统来说,是没有 tomcat 服务器的.用下面的命令可以查看 tomcat 服务的状态. systemctl status tomcat.service//或者 ...

  6. Leetcode题目160.相交链表(简单)

    题目描述 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = ...

  7. Golang使用RabbitMQ消息中间件amqp协议

    "github.com/streadway/amqp" Publish发布 // amqp://<user>:<password>@<ip>:& ...

  8. javascript实现集合Set、字典Dictionary、HashTable

    集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中. function Set() { this.items = {}; } S ...

  9. 1.Json的学习--JSON.stringfy()

    1.JSON.parse() JSON.parse() JSON 通常用于与服务端交换数据. 在接收服务器数据时一般是字符串. 我们可以使用 JSON.parse() 方法将数据转换为 JavaScr ...

  10. PHP md5() 函数

    PHP String 函数 实例 计算字符串 "Hello" 的 MD5 散列: <?php $str = "Shanghai"; echo md5($s ...