如何用几个简单的命令改善你的Linux安全
nanshan 2024-10-15 11:28 14 浏览 0 评论
本文中,我们将讨论如何通过一些Linux的安全命令,加固你的Linux系统。
在最开始,我们需要问的一个问题是:Linux是已经足够被安全加固了吗?答案当然是否定的。那些娴熟的攻击者所带来的危险是与日俱增的。每天、甚至是每小时都有新的漏洞被发现。对这些漏洞的利用方法通常建立在它们被发现后的数小时之内。一些漏洞甚至直到有人将其利用到攻击的主机上才被发现。可见,安全应该是我们所有人需要关心的。因此,我想在本文中用一些实际的例子来展示如何增强系统的安全性。
没有一个帖子或是一本书能够回答Linux所有的安全问题或是涉及所有可能的威胁。因此,本文理所当然地也不可能包括所有,但是我们希望你一定会发现到其“用武之处”。
我们的主要议题包括:
控制台安全 密码生命周期 Sudo的通知 SSH调优 使用Tripwire进行入侵检测 使用Firewalld 回归iptable 限制编译器 不可修改文件 用Aureport来管理SELinux 使用sealert工具
一、控制台安全
你可以通过限制能够登录的一组特定终端来限制root用户的访问。为了实现该目的,请编辑/etc/下安全文件的内容。该文件列出的是允许root用户登录的所有设备。
我建议你只允许root用户去登录到一个终端之上,且强制所有其他用户都使用非root用户的身份进行登录。而如果确实需要root用户权限的时候,请使用su命令来获取。
二、密码生命周期
密码的生命周期就是允许你为密码指定一个有效的时间周期。时间到期后,系统将强制要求用户输入一个新的密码。这样有效地确保了密码的定期更换,以及密码在被偷盗、破解或为人所知的情况下能够迅速过期。
有两种方法可以实现这个效果。第一种方法是通过命令行使用如下的改变命令:
$ 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
三、Sudo的通知
Sudo命令虽然可以使得你的“生活”更为轻松,但是它们也会因为Linux的安全问题而毁了你的“生活”。
我们都知道,sudo命令允许非root用户以root身份运行各种命令。你可以在/etc/sudoers文件中查到所有的sudo配置。
你可以禁止用户去运行那些root才能运行的命令。
当sudo命令被使用的时侯,你可以通过在文件中添加如下一行语句,以配置其向外发送电子邮件。
mailto yourname@yourdomain.com
当然你也可以用如下语句改变sudo的发邮件状态:
mail_always on
四、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已经能够应对暴力破解的攻击,且更为稳固了。
五、使用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查阅到。
六、使用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:
$ 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
为了能让内核采用新的配置,你必须重新启动系统。
八、限制编译器
如果你的系统被黑掉了,那么攻击者会对系统使用的是哪种编译器很感兴趣。为什么呢?因为他们可以去下载一个简单的C文件(POC),并且在你的系统上进行编译,从而在几秒钟之内就成为了root用户。如果编译器是开启的话,他们还可以在你的系统上做一些严重的破坏。
首先,你需要检查单个的数据包以确定其包含有哪些二进制文件。然后你需要限制这些二进制文件的权限。
$ rpm -q --filesbypkg gcc | grep 'bin'
现在我们需要创建一个可以访问二进制文件的编译器的组名称了:
$ groupadd compilerGroup
然后,你可以赋予这个组能够改变任何二进制文件的所有权:
$ chown root:compilerGroup /usr/bin/gcc
最后重要的是:仅编译器组才有改变该二进制文件的权限:
$ chmod 0750 /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。你可以用以下的命令来进行安装:
$ yum install setools
那么现在我们就有了一个工具,它将积极地从/var/log/audit/audit.log这一日志文件中返回各种警告,并将其转换得更为“人性化”且可读。
这个称为sealert的工具,其目的是能报告出任何与SELinux有关联的问题。你可以这样来使用它:
$ sealert -a /var/log/audit/audit.log
关于所生成的报告,其最好之处是:在每个被发现的问题的警报末尾,系统都会给出如何去解决该问题的相关解释。
在这篇文章中,我们讨论了一些可以帮助你加固Linux系统的安全技巧。当然,对于各种运行的服务而言,仍有许多值得加固的Linux安全技巧有待发掘。我希望你能从本文中找到对你有用和有趣的内容。
关注微信公众号:安徽思恒信息科技有限公司,了解更多技术内容……
相关推荐
- 服务器数据恢复—Raid5数据灾难不用愁,Raid5数据恢复原理了解下
-
Raid5数据恢复算法原理:分布式奇偶校验的独立磁盘结构(被称之为raid5)的数据恢复有一个“奇偶校验”的概念。可以简单的理解为二进制运算中的“异或运算”,通常使用的标识是xor。运算规则:若二者值...
- 服务器数据恢复—多次异常断电导致服务器raid不可用的数据恢复
-
服务器数据恢复环境&故障:由于机房多次断电导致一台服务器中raid阵列信息丢失。该阵列中存放的是文档,上层安装的是Windowsserver操作系统,没有配置ups。因为服务器异常断电重启后,rai...
- 服务器数据恢复-V7000存储更换磁盘数据同步失败的数据恢复案例
-
服务器数据恢复环境:P740+AIX+Sybase+V7000存储,存储阵列柜上共12块SAS机械硬盘(其中一块为热备盘)。服务器故障:存储阵列柜中有磁盘出现故障,工作人员发现后更换磁盘,新更换的磁盘...
- 「服务器数据恢复」重装系统导致XFS文件系统分区丢失的数据恢复
-
服务器数据恢复环境:DellPowerVault系列磁盘柜;用RAID卡创建的一组RAID5;分配一个LUN。服务器故障:在Linux系统层面对LUN进行分区,划分sdc1和sdc2两个分区。将sd...
- 服务器数据恢复-ESXi虚拟机被误删的数据恢复案例
-
服务器数据恢复环境:一台服务器安装的ESXi虚拟化系统,该虚拟化系统连接了多个LUN,其中一个LUN上运行了数台虚拟机,虚拟机安装WindowsServer操作系统。服务器故障&分析:管理员因误操作...
- 「服务器数据恢复」Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例
-
服务器数据恢复环境:HPStorageWorks某型号存储;虚拟化平台为vmwareexsi;10块磁盘组成raid5(有1块热备盘)。服务器故障:raid5阵列中两块硬盘指示灯变黄掉线,无法读取...
- 服务器数据恢复—基于oracle数据库的SAP数据恢复案例
-
服务器存储数据恢复环境:某品牌服务器存储中有一组由6块SAS硬盘组建的RAID5阵列,其中有1块硬盘作为热备盘使用。上层划分若干lun,存放Oracle数据库数据。服务器存储故障&分析:该RAID5阵...
- 「服务器虚拟化数据恢复」Xen Server环境下数据库数据恢复案例
-
服务器虚拟化数据恢复环境:Dell某型号服务器;数块STAT硬盘通过raid卡组建的RAID10;XenServer服务器虚拟化系统;故障虚拟机操作系统:WindowsServer,部署Web服务...
- 服务器数据恢复—RAID故障导致oracle无法启动的数据恢复案例
-
服务器数据恢复环境:某品牌服务器中有一组由4块SAS磁盘做的RAID5磁盘阵列。该服务器操作系统为windowsserver,运行了一个单节点Oracle,数据存储为文件系统,无归档。该oracle...
- 服务器数据恢复—服务器磁盘阵列常见故障表现&解决方案
-
RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对...
- 「服务器数据恢复」IBM某型号服务器RAID5磁盘阵列数据恢复案例
-
服务器数据恢复环境:IBM某型号服务器;5块SAS硬盘组成RAID5磁盘阵列;存储划分为1个LUN和3个分区:第一个分区存放windowsserver系统,第二个分区存放SQLServer数据库,...
- 服务器数据恢复—Zfs文件系统下误删除文件如何恢复数据?
-
服务器故障:一台zfs文件系统服务器,管理员误操作删除服务器上的数据。服务器数据恢复过程:1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做...
- 服务器数据恢复—Linux+raid5服务器数据恢复案例
-
服务器数据恢复环境:某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。服务器故障&检测:服务器在运行过程中突然瘫痪,...
- 服务器数据恢复—Sql Server数据库数据恢复案例
-
服务器数据恢复环境:一台安装windowsserver操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。在windows服务器内装有SqlServer数据库。存储空间LU...
- 服务器数据恢复—阿里云ECS网站服务器数据恢复案例
-
云服务器数据恢复环境:阿里云ECS网站服务器,linux操作系统+mysql数据库。云服务器故障:在执行数据库版本更新测试时,在生产库误执行了本来应该在测试库执行的sql脚本,导致生产库部分表被tru...
你 发表评论:
欢迎- 一周热门
-
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
WindowsServer2022|配置NTP服务器的命令
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
- 最近发表
-
- 服务器数据恢复—Raid5数据灾难不用愁,Raid5数据恢复原理了解下
- 服务器数据恢复—多次异常断电导致服务器raid不可用的数据恢复
- 服务器数据恢复-V7000存储更换磁盘数据同步失败的数据恢复案例
- 「服务器数据恢复」重装系统导致XFS文件系统分区丢失的数据恢复
- 服务器数据恢复-ESXi虚拟机被误删的数据恢复案例
- 「服务器数据恢复」Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例
- 服务器数据恢复—基于oracle数据库的SAP数据恢复案例
- 「服务器虚拟化数据恢复」Xen Server环境下数据库数据恢复案例
- 服务器数据恢复—RAID故障导致oracle无法启动的数据恢复案例
- 服务器数据恢复—服务器磁盘阵列常见故障表现&解决方案
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)