0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过几个简单的命令让你的Linux固若金汤

马哥Linux运维 来源:未知 作者:胡薇 2018-11-19 14:46 次阅读

在最开始,我们需要问的一个问题是:Linux是已经足够被安全加固了吗?答案当然是否定的。那些娴熟的攻击者所带来的危险是与日俱增的。每天、甚至是每小时都有新的漏洞被发现。对这些漏洞的利用方法通常建立在它们被发现后的数小时之内。一些漏洞甚至直到有人将其利用到攻击的主机上才被发现。可见,安全应该是我们所有人需要关心的。因此,我想在本文中用一些实际的例子来展示如何增强系统的安全性。

没有一个帖子或是一本书能够回答Linux所有的安全问题或是涉及所有可能的威胁。因此,本文理所当然地也不可能包括所有,但是我们希望你一定会发现到其“用武之处”。

我们的主要议题包括:

控制台安全密码生命周期Sudo的通知SSH调优使用Tripwire进行入侵检测使用Firewalld回归iptable限制编译器不可修改文件用Aureport来管理SELinux使用sealert工具

一、控制台安全

你可以通过限制能够登录的一组特定终端来限制root用户的访问。为了实现该目的,请编辑/etc/下安全文件的内容。该文件列出的是允许root用户登录的所有设备。

我建议你只允许root用户去登录到一个终端之上,且强制所有其他用户都使用非root用户的身份进行登录。而如果确实需要root用户权限的时候,请使用su命令来获取。

二、密码生命周期

密码的生命周期就是允许你为密码指定一个有效的时间周期。时间到期后,系统将强制要求用户输入一个新的密码。这样有效地确保了密码的定期更换,以及密码在被偷盗、破解或为人所知的情况下能够迅速过期。

有两种方法可以实现这个效果。第一种方法是通过命令行使用如下的改变命令:

$chage-M20likegeeks

我们使用- M选项为likegeeks用户设置了有效期限为20天的密码。

你也可以输入不带任何选项的chage命令,它会自动提示你选项:

$chagelikegeeks

第二种方法是在/etc/login.defs中为所有用户设置默认值。你可以参照下面,按需改变其数值:

PASS_MAX_DAYS20PASS_MIN_DAYS0PASS_WARN_AGE5

三、Sudo的通知

Sudo命令虽然可以使得你的“生活”更为轻松,但是它们也会因为Linux的安全问题而毁了你的“生活”。

我们都知道,sudo命令允许非root用户以root身份运行各种命令。你可以在/etc/sudoers文件中查到所有的sudo配置。

你可以禁止用户去运行那些root才能运行的命令。

当sudo命令被使用的时侯,你可以通过在文件中添加如下一行语句,以配置其向外发送电子邮件。

mailtoyourname@yourdomain.com

当然你也可以用如下语句改变sudo的发邮件状态:

mail_alwayson

四、SSH调优

只要说到Linux安全,我们必然会讨论到SSH服务。SSH应该是你系统中重要的一种服务,它使你能够轻松地连接到自己的系统。而且这可能是在出现各种状况的时候,唯一能让你的系统“幸存”的途径。所以对SSH的调优是非常重要的。

由于我们在本文所使用的是CentOS 7,那么其SSH的配置文件就存放在:

/etc/ssh/sshd_config

让我们来深入了解一下吧。

攻击者所使用的扫描器或自动工具一般尝试运用默认端口22来连接SSH。因此通常情况下,你应该改变SSH的原有端口到另一个未使用的端口上,比如说5555。

Port5555

你也可以通过更新PermitRootLogin的值为no来限制root的登录,例如:

PermitRootLoginno

并禁用无密码的通道,且改用公钥登录的方式。

PasswordAuthenticationnoPermitEmptyPasswordsno

其实还有另外一种可能阻止攻击的调整,但它要求SSH通过正向和反向DNS查询远程的主机名,这将在系统日志文件中生成一些适当的警告。你只需启用UseDNS的值便可实现。

UseDNSyes

此外,当GSSAPI服务器被要求验证相关用户的身份时,SSH会调用一个不常用的功能来实现GSSAPI的认证方式。为了避免这种情况可能会引起的某种麻烦,请按照如下将GSSAPIAuthentication设为no:

GSSAPIAuthenticationno

考虑到SSH通常会出现的超时问题,你可以通过正确地配置ServerAliveInterval、ServerAliveCountMax和TCPKeepAlive的值来进行管控。

例如下面的规则就意味着每隔60秒就产生一个数据包。

ServerAliveInterval15ServerAliveCountMax3TCPKeepAliveyes

通过调整这些值,你可以提供一个更长的连接。

ClientAliveInterval30ClientAliveCountMax5

你可以通过指定那些被允许用来使用SSH的用户名,从而使得SSH服务更为安全。

AllowUsersuser1user2

或者指定允许的组:

AllowGroupgroup1group2

除此之外,你还可以为SSH启用诸如Google Authenticator这样的双因素认证方式:

$yuminstallgoogle-authenticator

然后运行之,以验证是否成功安装:

$google-authenticator

你的移动手机上应该已经安装了Google authenticator的应用,那么请将下面一行添加到/etc/pam.d/sshd之中。

authrequiredpam_google_authenticator.so

最后的事情就是通过添加下面一行到/etc/ssh/sshd_config中,以通知SSH。

ChallengeResponseAuthenticationyes

然后重启你的SSH:

$systemctlrestartsshd

之后,当你使用SSH登录的时候,它将会询问一个验证码。这便意味着你的SSH已经能够应对暴力破解的攻击,且更为稳固了。

五、使用Tripwire进行入侵检测

Tripwire是Linux安全里的重要工具之一。这是一种基于主机的入侵检测系统(HIDS)。它通过收集配置和文件系统的细节,并使用这些信息来提供系统先前与当前状态之间的参考点等方式进行工作。该过程监测文件或目录的属性包括:进去哪些被添加或修改了、谁修改的、修改了什么、何时修改的。因此它就是你文件系统的“看门狗”。

你需要访问EPEL存储库来获取Tripwire。你可以按如下方法轻松地添加该库:

wgethttp://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm$rpm-ivhepel-release-7-9.noarch.rpm

一旦成功安装了EPEL库,你就可以安装Tripwire了:

$sudoyuminstalltripwire

在使用Tripwire之前,你需要用如下命令来创建本地和网站密钥:

$tripwire-setup-keyfiles

它会提示你输入一个用于网站和本地密钥文件的密码。Tripwire也会建议你使用大写字母、小写字母、数字和标点符号的组合。

你可以通过更改如下文件来定制Tripwire:

/etc/tripwire/twpol.txt

因为每一行都有注释,且描述也很到位,因此该文件还是比较容易阅读和修改的。

你可以用如下的方式更新自己的Tripwire策略。

$tripwire--update-policy--secure-modelow/etc/tripwire/twpol.txt

Tripwire将通过参考你的更改,在屏幕上持续刷新显示各个阶段的步骤。当这些完成之后,你就应该能够以如下方式初始化Tripwire数据库了:

$tripwire--init

然后Tripwire将开始扫描系统。它所需要的时长取决于系统的总体规模。

任何对文件系统更改将被认为是一种系统的入侵,因此管理员会被通知到,而且他需要使用受信任的文件予以系统恢复。正是出于这个原因,Tripwire必须去验证任何的系统更改。你可以通过如下命令来验证你的现有的策略文件:

$tripwire--check

关于Tripwire,我的最后一点建议是:请额外去加固twpol.txt和twcfg.txt文件的安全。

更多有关Tripwire的选项和设置,你可以通过man tripwire查阅到。

六、使用Firewalld

Firewalld替代了iptables,并且通过在不停止当前连接的情况下启用各种配置的更改,从而改善了Linux的安全管理。

Firewalld作为守护进程形式运行着。它允许各种规则被即时地添加和更改,而且它使用各种网络区域来为任何以及所有与网络相关的连接定义一种信任级别。

要想知道Firewalld的当前运行状态,你可以输入如下命令:

$firewall-cmd--state

你可以用如下命令罗列出预定义的区域:

$firewall-cmd--get-zones

其值也可以如下方式进行更新:

$firewall-cmd--set-default-zone=

你可以用以下命令获取任何特定区域的所有相关信息:

$firewall-cmd--zone=--list-all

你也能列出所有支持的服务:

$firewall-cmd--get-services

而且你可以添加或删除额外的服务。

$firewall-cmd--zone=--add-service=$firewall-cmd--zone=--remove-service=

你能通过如下命令列出任何特定区域中所有开放的端口:

$firewall-cmd--zone=--list-ports

你可用如下方式管理TCP/UDP端口的增加与删除:

$firewall-cmd--zone=--add-port=$firewall-cmd--zone=--remove-port=

你可以如下命令添加或删除端口的转发:

$firewall-cmd--zone=--add-forward-port=$firewall-cmd--zone=--remove-forward-port=

Firewalld是非常全面的。其中Firewalld最棒的地方当数:你可以在不需要停止或重新启动防火墙服务的情况下,管理该防火墙的体系结构。而这正是运用IPtables所无法实现的。

七、回归iptable

有一些人仍然还是喜欢IP tables 胜过Firewalld。那么如果你正好处于这种想舍去Firewalld而回归IP tables的话,请首先禁用Firewalld:

$systemctldisablefirewalld$systemctlstopfirewalld

然后来安装IP tables:

$yuminstalliptables-services$touch/etc/sysconfig/iptables$touch/etc/sysconfig/ip6tables

现在你就可以启动IP tables的服务了:

$systemctlstartiptables$systemctlstartip6tables$systemctlenableiptables$systemctlenableip6tables

为了能让内核采用新的配置,你必须重新启动系统。

八、限制编译器

如果你的系统被黑掉了,那么攻击者会对系统使用的是哪种编译器很感兴趣。为什么呢?因为他们可以去下载一个简单的C文件(POC),并且在你的系统上进行编译,从而在几秒钟之内就成为了root用户。如果编译器是开启的话,他们还可以在你的系统上做一些严重的破坏。

首先,你需要检查单个的数据包以确定其包含有哪些二进制文件。然后你需要限制这些二进制文件的权限。

$rpm-q--filesbypkggcc|grep'bin'

现在我们需要创建一个可以访问二进制文件的编译器的组名称了:

$groupaddcompilerGroup

然后,你可以赋予这个组能够改变任何二进制文件的所有权:

$chownroot:compilerGroup/usr/bin/gcc

最后重要的是:仅编译器组才有改变该二进制文件的权限:

$chmod0750/usr/bin/gcc

至此,任何试图使用gcc的用户将会看到权限被拒绝的信息了。

我知道有些人可能会说,如果攻击者发现编译器被关闭了的话,他会去下载编译器本身。这就是另外一个故事了,我们会在未来的文章中涉及到的。

九、不可修改文件

不可修改文件是Linux系统中一种最为强大的安全特性。任何用户(即使是root用户),无论他们的文件权限是怎样的,都无法对不可修改文件进行写入、删除、重命名甚至是创建硬链接等操作。这真是太棒了!

它们是保护配置文件或防止你的文件被修改的理想选择。请使用chattr命令来将任何文件变得不修改:

$chattr+i/myscript

你也可以如下方法去除其不可修改属性:

$chattr-i/myscript

/sbin 和/usr/lib两个目录内容能被设置为不可改变,以防止攻击者替换关键的二进制文件或库文件成为恶意软件版本。我将其他有关使用不可改变文件的例子,留给你去想象。

十、用Aureport来管理SELinux

通常情况下,如果你使用的是主机控制面板,或者当有一个或多个特定的应用程序可能会碰到一些问题的时候,他们是不会运行在SELinux已启用的模式下的,也就是说你会发现SELinux是禁用掉的。

但是禁用SELinux确实会将系统暴露于风险之中。我的观点是:由于SELinux有一定的复杂性,对于我们这些仍想获益于安全性的人来说,完全可以通过运行aureport的选项来使得工作轻松些。

aureport工具被设计为创建一些基于列特征的报告,以显示在审计日志文件中所记录的那些事件。

$aureport--avc

你也可以运用同样的工具来创建一个可执行文件的列表:

$aureport-x

你也可以使用aureport来产生一个认证的全量报告:

$aureport-au-i

或者你还可以列出那些认证失败的事件:

$aureport-au--summary-i--failed

或者你也需要一个认证成功的事件的摘要:

$aureport-au--summary-i--success

可见,当你使用一个运行着SELinux的系统来进行系统的故障诊断的时侯,你作为系统管理员首要考虑的应该就是使用aureport的各种好处了。

十一、使用Sealert工具

除了aureport工具你也可以使用一个很好的Linux安全工具—sealert。你可以用以下的命令来进行安装:

$yuminstallsetools

那么现在我们就有了一个工具,它将积极地从/var/log/audit/audit.log这一日志文件中返回各种警告,并将其转换得更为“人性化”且可读。

这个称为sealert的工具,其目的是能报告出任何与SELinux有关联的问题。你可以这样来使用它:

$sealert-a/var/log/audit/audit.log

关于所生成的报告,其最好之处是:在每个被发现的问题的警报末尾,系统都会给出如何去解决该问题的相关解释。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206735
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849

原文标题:如何用几个简单的命令改善你的Linux安全

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分享几个有趣的Linux命令

    Linux当中有很多比较有趣的命令,可以动手看看,很简单的。
    发表于 07-10 14:22 288次阅读
    分享<b class='flag-5'>几个</b>有趣的<b class='flag-5'>Linux</b><b class='flag-5'>命令</b>

    教你几个AD小技巧,菜鸟变高手

    现在大多数人在选择画板软件时选择使用AD 因为其强大的兼容性,这里给你们分享一些技巧,你们成为别人眼中的高手。AD设计小技巧--快捷的操作,重要的注意事项变成严谨的工程师AD快捷键--不用鼠标点击,
    发表于 07-19 08:00

    Linux关机命令详解

    Linux关机命令详解 在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都 可以达到重启系统的目的,但每个
    发表于 01-18 12:52 3515次阅读

    根据一些简单的实例来讨论 Linux rmdir 命令

    Linux 命令行上删除文件和目录,我们已经讨论过 rm 命令 的使用。然而,这里有另一个相关的命令行工具,专门针对目录的删除。这是所指的工具就是 rmdir,本教程中,我们将根据
    的头像 发表于 02-23 09:42 3979次阅读
    根据一些<b class='flag-5'>简单</b>的实例来讨论 <b class='flag-5'>Linux</b> rmdir <b class='flag-5'>命令</b>

    浅析Linux命令链接操作符的十个最佳实例

    Linux命令中链接的意思是,通过操作符的行为将几个命令组合执行。
    的头像 发表于 08-10 15:51 2728次阅读

    Linux关于系统状态的命令简单介绍

    Linux 常用命令中,有些命令可以用于查看系统的状态,通过了解系统当前的状态,能够帮助我们更好地维护系统或定位问题。本文就简单介绍一下这些
    的头像 发表于 02-02 17:50 2049次阅读
    <b class='flag-5'>Linux</b>关于系统状态的<b class='flag-5'>命令</b><b class='flag-5'>简单</b>介绍

    Linux命令链接操作符的实际应用

    Linux命令中的链接的意思是,通过操作符的行为将几个命令组合执行。Linux中的链接
    发表于 05-06 17:44 740次阅读

    如何去使用这几个Linux命令

    使用 Linux 系统的开发者,很多人都有自己喜欢的系统命令,下面这个几个命令令是我平常用的比较多的,分享一下。
    的头像 发表于 06-15 16:06 1354次阅读

    C语言_Linux基本命令与C语言基础

    这篇文章介绍在Linux环境下学习C语言搭建基本的环境过程,了解基础的几个命令使用方法,了解Linux下用户权限配置,标准main函数传参方式等等。
    的头像 发表于 08-14 09:45 916次阅读

    如何在Linux中使用progress命令

    progress 命令是一个简单但功能强大的 Linux/Unix 命令行工具,可让用户查看文件操作的进度。
    的头像 发表于 04-08 15:51 1529次阅读

    Linux bash中的printf命令详解

    Linux 命令行中最简单的打印方法是使用 echo 命令
    的头像 发表于 04-13 16:22 2166次阅读
    <b class='flag-5'>Linux</b> bash中的printf<b class='flag-5'>命令</b>详解

    Linux系统维护命令的用法

    Linux有很多命令,每个命令基本可以用一篇文章介绍,本文仅简单总结一些常用系统维护命令的用法
    的头像 发表于 04-17 14:57 650次阅读
    <b class='flag-5'>Linux</b>系统维护<b class='flag-5'>命令</b>的用法

    浅析Linux精致的命令

    这只是一小部分常用的Linux命令Linux有很多命令可以使用。建议通过man命令来查看
    的头像 发表于 04-24 16:28 1336次阅读

    恒讯科技分享:如何使用linux删除目录命令

    学习如何使用Linux命令行对于所有Linux用户和系统管理员来说都是必不可少的。创建文件、导航到文件夹或移动文件等简单的维护任务都可以通过
    的头像 发表于 06-20 17:27 1361次阅读

    shell命令linux命令一样吗

    Shell命令Linux命令并不完全一样。 首先,Shell是一种命令行解释器,它是用来解释和执行用户输入的命令的。Shell既是一种
    的头像 发表于 11-08 10:51 1377次阅读