496 0 1linux
本文中,咱们将讨论如何经过一些Linux的安全命令,加固你的Linux系统。数据库
在最开始,咱们须要问的一个问题是:Linux是已经足够被安全加固了吗?答案固然是否认的。那些娴熟的攻击者所带来的危险是与日俱增的。天天、甚至是每小时都有新的漏洞被发现。对这些漏洞的利用方法一般创建在它们被发现后的数小时以内。一些漏洞甚至直到有人将其利用到攻击的主机上才被发现。可见,安全应该是咱们全部人须要关心的。所以,我想在本文中用一些实际的例子来展现如何加强系统的安全性。centos
没有一个帖子或是一本书可以回答Linux全部的安全问题或是涉及全部可能的威胁。所以,本文理所固然地也不可能包括全部,可是咱们但愿你必定会发现到其“用武之处”。安全
咱们的主要议题包括:服务器
控制台安全密码生命周期Sudo的通知SSH调优使用Tripwire进行入侵检测使用Firewalld回归iptable限制编译器不可修改文件太棒了用Aureport来管理SELinux使用sealert工具
1、控制台安全网络
你能够经过限制可以登陆的一组特定终端来限制root用户的访问。为了实现该目的,请编辑/etc/下安全文件的内容。该文件列出的是容许root用户登陆的全部设备。dom
我建议你只容许root用户去登陆到一个终端之上,且强制全部其余用户都使用非root用户的身份进行登陆。而若是确实须要root用户权限的时候,请使用su命令来获取。ssh
2、密码生命周期工具
密码的生命周期就是容许你为密码指定一个有效的时间周期。时间到期后,系统将强制要求用户输入一个新的密码。这样有效地确保了密码的按期更换,以及密码在被偷盗、破解或为人所知的状况下可以迅速过时。
有两种方法能够实现这个效果。第一种方法是经过命令行使用以下的改变命令:
$ chage -M 20 likegeeks
咱们使用- M选项为likegeeks用户设置了有效期限为20天的密码。
你也能够输入不带任何选项的chage命令,它会自动提示你选项:
$ chage likegeeks
第二种方法是在/etc/login.defs中为全部用户设置默认值。你能够参照下面,按需改变其数值:
PASS_MAX_DAYS 20 PASS_MIN_DAYS 0 PASS_WARN_AGE 5
3、Sudo的通知
Sudo命令虽然可使得你的“生活”更为轻松,可是它们也会由于Linux的安全问题而毁了你的“生活”。
咱们都知道,sudo命令容许非root用户以root身份运行各类命令。你能够在/etc/sudoers文件中查到全部的sudo配置。
你能够禁止用户去运行那些root才能运行的命令。
当sudo命令被使用的时侯,你能够经过在文件中添加以下一行语句,以配置其向外发送电子邮件。
mailto yourname@yourdomain.com
固然你也能够用以下语句改变sudo的发邮件状态:
mail_always on
4、SSH调优
只要说到Linux安全,咱们必然会讨论到SSH服务。SSH应该是你系统中重要的一种服务,它使你可以轻松地链接到本身的系统。并且这多是在出现各类情况的时候,惟一能让你的系统“幸存”的途径。因此对SSH的调优是很是重要的。
因为咱们在本文所使用的是CentOS 7,那么其SSH的配置文件就存放在:
/etc/ssh/sshd_config
让咱们来深刻了解一下吧。
攻击者所使用的扫描器或自动工具通常尝试运用默认端口22来链接SSH。所以一般状况下,你应该改变SSH的原有端口到另外一个未使用的端口上,好比说5555。
Port 5555
你也能够经过更新PermitRootLogin的值为no来限制root的登陆,例如:
PermitRootLogin no
并禁用无密码的通道,且改用公钥登陆的方式。
PasswordAuthentication no PermitEmptyPasswords no
其实还有另一种可能阻止攻击的调整,但它要求SSH经过正向和反向DNS查询远程的主机名,这将在系统日志文件中生成一些适当的警告。你只需启用UseDNS的值即可实现。
UseDNS yes
此外,当GSSAPI服务器被要求验证相关用户的身份时,SSH会调用一个不经常使用的功能来实现GSSAPI的认证方式。为了不这种状况可能会引发的某种麻烦,请按照以下将GSSAPIAuthentication设为no:
GSSAPIAuthentication no
考虑到SSH一般会出现的超时问题,你能够经过正确地配置ServerAliveInterval、ServerAliveCountMax和TCPKeepAlive的值来进行管控。
例以下面的规则就意味着每隔60秒就产生一个数据包。
ServerAliveInterval 15 ServerAliveCountMax 3 TCPKeepAlive yes
经过调整这些值,你能够提供一个更长的链接。
ClientAliveInterval 30 ClientAliveCountMax 5
你能够经过指定那些被容许用来使用SSH的用户名,从而使得SSH服务更为安全。
AllowUsers user1 user2
或者指定容许的组:
AllowGroup group1 group2
除此以外,你还能够为SSH启用诸如Google Authenticator这样的双因素认证方式:
$ yum install google-authenticator
而后运行之,以验证是否成功安装:
$ google-authenticator
你的移动手机上应该已经安装了Google authenticator的应用,那么请将下面一行添加到/etc/pam.d/sshd之中。
auth required pam_google_authenticator.so
最后的事情就是经过添加下面一行到/etc/ssh/sshd_config中,以通知SSH。
ChallengeResponseAuthentication yes
而后重启你的SSH:
$ systemctl restart sshd
以后,当你使用SSH登陆的时候,它将会询问一个验证码。这便意味着你的SSH已经可以应对暴力破解的攻击,且更为稳固了。
5、使用Tripwire进行入侵检测
Tripwire是Linux安全里的重要工具之一。这是一种基于主机的入侵检测系统(HIDS)。它经过收集配置和文件系统的细节,并使用这些信息来提供系统先前与当前状态之间的参考点等方式进行工做。该过程监测文件或目录的属性包括:进去哪些被添加或修改了、谁修改的、修改了什么、什么时候修改的。所以它就是你文件系统的“看门狗”。
你须要访问EPEL存储库来获取Tripwire。你能够按以下方法轻松地添加该库:
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm $ rpm -ivh epel-release-7-9.noarch.rpm
一旦成功安装了EPEL库,你就能够安装Tripwire了:
$ sudo yum install tripwire
在使用Tripwire以前,你须要用以下命令来建立本地和网站密钥:
$ tripwire-setup-keyfiles
它会提示你输入一个用于网站和本地密钥文件的密码。Tripwire也会建议你使用大写字母、小写字母、数字和标点符号的组合。
你能够经过更改以下文件来定制Tripwire:
/etc/tripwire/twpol.txt
由于每一行都有注释,且描述也很到位,所以该文件仍是比较容易阅读和修改的。
你能够用以下的方式更新本身的Tripwire策略。
$ tripwire --update-policy --secure-mode low /etc/tripwire/twpol.txt
Tripwire将经过参考你的更改,在屏幕上持续刷新显示各个阶段的步骤。当这些完成以后,你就应该可以以以下方式初始化Tripwire数据库了:
$ tripwire --init
而后Tripwire将开始扫描系统。它所须要的时长取决于系统的整体规模。
任何对文件系统更改将被认为是一种系统的入侵,所以管理员会被通知到,并且他须要使用受信任的文件予以系统恢复。正是出于这个缘由,Tripwire必须去验证任何的系统更改。你能够经过以下命令来验证你的现有的策略文件:
$ tripwire --check
关于Tripwire,个人最后一点建议是:请额外去加固twpol.txt和twcfg.txt文件的安全。
更多有关Tripwire的选项和设置,你能够经过man tripwire查阅到。
6、使用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所没法实现的。
7、回归iptable
有一些人仍然仍是喜欢IP tables 赛过Firewalld。那么若是你正好处于这种想舍去Firewalld而回归IP tables的话,请首先禁用Firewalld:
$ systemctl disable firewalld $ systemctlstop firewalld
而后来安装IP tables:
$ yum install iptables-services $ touch /etc/sysconfig/iptables $ touch /etc/sysconfig/ip6tables
如今你就能够启动IP tables的服务了:
$ systemctlstart iptables $ systemctlstart ip6tables $ systemctl enable iptables $ systemctl enable ip6tables
为了能让内核采用新的配置,你必须从新启动系统。
8、限制编译器
若是你的系统被黑掉了,那么攻击者会对系统使用的是哪一种编译器很感兴趣。为何呢?由于他们能够去下载一个简单的C文件(POC),而且在你的系统上进行编译,从而在几秒钟以内就成为了root用户。若是编译器是开启的话,他们还能够在你的系统上作一些严重的破坏。
首先,你须要检查单个的数据包以肯定其包含有哪些二进制文件。而后你须要限制这些二进制文件的权限。
$ rpm -q --filesbypkg gcc | grep 'bin'
如今咱们须要建立一个能够访问二进制文件的编译器的组名称了:
$ groupadd compilerGroup
而后,你能够赋予这个组可以改变任何二进制文件的全部权:
$ chown root:compilerGroup /usr/bin/gcc
最后重要的是:仅编译器组才有改变该二进制文件的权限:
$ chmod 0750 /usr/bin/gcc
至此,任何试图使用gcc的用户将会看到权限被拒绝的信息了。
我知道有些人可能会说,若是攻击者发现编译器被关闭了的话,他会去下载编译器自己。这就是另一个故事了,咱们会在将来的文章中涉及到的。
9、不可修改文件太棒了
不可修改文件是Linux系统中一种最为强大的安全特性。任何用户(即便是root用户),不管他们的文件权限是怎样的,都没法对不可修改文件进行写入、删除、重命名甚至是建立硬连接等操做。这真是太棒了!
它们是保护配置文件或防止你的文件被修改的理想选择。请使用chattr命令来将任何文件变得不修改:
$ chattr +i /myscript
你也能够以下方法去除其不可修改属性:
$ chattr -i /myscript
/sbin 和/usr/lib两个目录内容能被设置为不可改变,以防止攻击者替换关键的二进制文件或库文件成为恶意软件版本。我将其余有关使用不可改变文件的例子,留给你去想象。
10、用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的各类好处了。
11、使用Sealert工具
除了aureport工具你也可使用一个很好的Linux安全工具—sealert。你能够用如下的命令来进行安装:
$ yum install setools
那么如今咱们就有了一个工具,它将积极地从/var/log/audit/audit.log这一日志文件中返回各类警告,并将其转换得更为“人性化”且可读。
这个称为sealert的工具,其目的是能报告出任何与SELinux有关联的问题。你能够这样来使用它:
$ sealert -a /var/log/audit/audit.log
关于所生成的报告,其最好之处是:在每一个被发现的问题的警报末尾,系统都会给出如何去解决该问题的相关解释。
在这篇文章中,咱们讨论了一些能够帮助你加固Linux系统的安全技巧。固然,对于各类运行的服务而言,仍有许多值得加固的Linux安全技巧有待发掘。我但愿你能从本文中找到对你有用和有趣的内容。
原文标题:Useful Linux Security Tricks To Harden Your System,做者: Seco Max
yhttp://netsecurity.51cto.com/art/201704/536512.htm
本文由 CentOS中文站 - 专一Linux技术 做者:centos 发表,其版权均为 CentOS中文站 - 专一Linux技术 全部,文章内容系做者我的观点,不表明 CentOS中文站 - 专一Linux技术 对观点赞同或支持。如需转载,请注明文章来源。