Linux 企业级安全原理和防范技巧以及网络和安全-Linux安全架构、安全威胁模型、以及加密、解密等原理,常见攻击和防范⼿段
1. 企业级Linux系统防护概述
1.1 企业级Linux系统安全威胁
企业级Linux系统安全威胁列表
分类 | 解决的主要安全威胁 | 安全威胁牵涉到的人员及操作 |
---|---|---|
文件系统防护 | 避免有意/无意的文件篡改、越权访问,根用户(root)权限泛滥 | 企业内部用户误操作、外部黑客的恶意删除 |
进程安全防护 | 避免非法进程运行、正常进程非法终止 | 外部黑客的后门注入及非法进程运行 |
用户安全管理 | 避免弱密码被攻破 | 外部黑客使用暴力破解等方式获取密码 |
日志管理 | 通过对企业内部用户及外部黑客在系统中行动产生相应的日志进行审计,发现安全问题和蛛丝马迹 | 用户、黑客在系统中的行动产生日志记录 |
1.2 企业级Linux系统安全立体式防范体系
1.2.1 Linux文件系统访问安全
Linux系统中所有的设备都是通过文件进行操作和管理。
文件系统一致性检查
工具:tripwire 百度百科
请参考:tripwire安装与使用
四种操作模式:
- 数据库生成:产生基准数据库,为未来的比较打下基础
- 完整性检查:主要模式,把文件签名和基准数据库进行比较来进行检查
- 数据库更新
- 交互性更新
根用户安全管理,sudo权限
1.2.2 Linux进程安全
进程是现代操作系统的一个核心概念,很多攻击的发动、黑客的入侵都是通过进程来实现的。
1. 进程的种类
每个进程都有其自己的特点和属性
- 交互进程:由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行
- 批处理进程:这种进程和终端没有联系,是一个进程序列。
- 守护进程:Linux系统在启动时启动的进程,并在后台运行
2. 进程管理方法
- 命令行管理方法:
who,w,ps,top
查看进程信息的系统调用。 - 进程文件系统管理进程:proc文件系统是一个虚拟的文件系统,通过文件系统的接口实现,用于输出系统的运行状态
文件路径 | 说明 | 应用建议 |
---|---|---|
/proc | 存放的是各种内存中的进程信息,linux内核配置,系统信息。这个是虚拟目录,不会占用磁盘空间 | |
/proc/cpuinfo | cpu信息 | 未来监控使用,获取cpu指标 |
/proc/meminfo | 内存信息 | 未来监控使用,获取内存指标 |
/proc/loadavg | 系统负载信息,衡量系统繁忙程度 | |
/proc/mounts | 系统挂载信息 | |
/proc/x | 这里的x表示进程号,每个进程在proc下有一个名为其进程号的目录 | |
/proc/devices | 当前运行的核心配置的设备驱动的列表 | |
/proc/dma | 显示当前使用的dma通道 | |
/proc/filesystems | 核心配置的文件系统 | |
/proc/interrupts | 显示使用的中断 | |
/proc/ioports | 当前使用的I/O端口 | |
/proc/kcore | 系统物理内存映象 | |
/proc/kmsg | 核心输出的消息,也被送到syslog | |
/proc/ksyms | 核心符号表 | |
/proc/modules | 当前加载了哪些核心模块 | |
/proc/net | 网络协议状态信息 | |
/proc/stat | 系统的不同状态 | |
/proc/version | 核心版本 | |
/proc/uptime | 系统启动的时间长度 | |
/proc/cmdline | 命令行参数 |
1.2.3 Linux用户管理安全
Linux作为一个多任务、多用户的操作系统,在同一时段可能为众多用户使用,且用户的管理直接关系到整个系统的安全。
1. 管理用户及组文件安全
- /etc/passwd :全局可读,用于用户登录时校验用户的登录名、加密的口令数据项(使用不可逆的加密算法)、用户ID(UID)、默认的用户分组ID(GID)、用户信息、用户登录子目录以及登录后使用的shell
- /etc/shadow: 只为root超级用户可读,文件的每行是8个冒号分隔的个域
- /etc/group:含有关于小组的信息
- /etc/gshadow:和用户账号文件一样,为了加强组口令的安全性,防止黑客对其实行的暴力攻击,采取的口令和其他信息分离的安全机制。
- /etc/skel:一般是存放用户启动文件的目录,由root权限控制。当创建新的用户时,该目录下的文件复制到新添加的用户的主目录下。这个目录下的文件都是隐藏文件
- /etc/login.defs 配置文件:创建用户时的一些规划,比如创建用户时,是否需要主目录;UID和GID的范围;用户的期限等等,这个文件是可以通过root来定义的
- /etc/default/useradd文件:通过useradd添加用户时的规则文件
2. 用户密码管理
入侵者大多是通过各种系统和设置漏洞,获得管理员密码来获得管理员权限的,然后,再实现对系统的恶意攻击
密码破解软件一般使用3种方法进行破解:字典猜解、组合猜解和暴力猜解。
-
密码的设置原则
不可让账号与密码相同
不可使用自己的姓名
不可使用英文词组
不可使用特定意义的日期
不可使用简单的密码:一个密码暴力猜解软件每秒钟可以尝试10万次之多。字数越少,字符越简单化,排列组合的结果就越少,也就越容易被攻破 -
若要保证密码的安全,应当遵循以下规则:
用户密码应包含英文字母的大小写、数字、可打印字符,甚至是非打印字符。建议将这些符号排列组合使用,以期达到最好的保密效果
用户密码不要太规则,不要使用用户姓名、生日、电话号码以及常用单词作为密码
根据Windows系统密码的散列算法原理,密码长度设置应超过7位,最好为14位
密码不得以明文方式存放在系统中,确保密码以加密的形式写在硬盘上并包含密码的文件是只读的
密码应定期修改,应避免重复使用旧密码,并采用多套密码的命名规则
建立账号锁定机制。一旦同一账号密码校验错误若干次,即断开连接并锁定该账号,经过一段时间才解锁。 -
密码策略包含以下6个策略。
密码必须符合复杂性要求
密码长度最小值
密码最长使用期限
密码最短使用期限
强制密码历史
用可还原的加密来储存密码
3. 使用密码攻击工具检查密码安全性
John the Ripper 用于在已知密文的情况下尝试破解出明文的破解密码软件:主要支持对DES、MD5两种加密方式的密文进行破解工作
https://www.openwall.com/john/
1.2.4 Linux日志管理安全
Linux系统历来以强大、丰富和完整文档日志系统著称。通过管理日志,可以清晰地了解系统的运行状况,也能从各种蛛丝马迹中国发现入侵和快速阻止入侵。
日志主要功能:审计和监测。实行地监测系统状态,监测和追踪侵入者。
1. Linux系统下的日志分类
可参考:CentOS的日志系统(日志文件)
- 连接时间日志:由多个程序执行
- 把记录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统
- 进程统计:由系统内核执行
- 当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个记录。
- 进程统计的目的是为系统中的基本服务提供命令使用统计
- 错误日志:由syslogd(8)守护程序执行
- 各种系统守护进程、用户程序和内核通过syslogd(3)守护程序向文件/var/log/messages报告值得注意的事件。
- 另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志
- 使用程序日志:许多程序通过维护日志来反映系统的安全状态
- su命令允许用户获得另一个用户的权限,所以它的安全很重要,它的文件为sulog。同样的还有sudolog。
- 另外,诸如Apache等HTTP的服务器都有两个日志:access_log(客户端访问日志)以及error_log(服务出错日志)。
- FTP服务的日志记录在xferlog文件当中
- Linux下邮件传送服务(sendmail)的日志一般存放在maillog文件当中
2. 企业数据保护
2.1 企业数据防护技术分析
造成很多用户账号泄露、机密数据泄密等安全事件的原因:
- 数据未加密:导数据通过USB、邮箱、即时消息等媒体和途径进行传播后,无法确保其仅能被有权限的人访问
- 未做好数据放泄密工作
2.2 数据加密技术原理
1. 对称加密、解密
对称加密、解密是加密和解密使用相同的密码,有代表性的有DES、Blowfish、TEA、Base64。
对称加密、解密的特点是运算相对非对称加密、解密简单,速度快
主要应用于需要加密大量数据的场合
2. 非对称加密、解密
非对称加密、解密是加密和解密使用不同的密码,有代表性的有RSA、DSA、ElGamal和ECDSA。
非对称加密、解密的安全性是基于复杂数学难题,特点是运算复杂、速度慢
主要应用于金融、军事等重大机密系统
3. 对称与非对称加密、解密的区别
- 区别1
- 对称加密、解密使用分组加密、解密方法对一段明文按固定长度划分成多组,然后分别对每组使用可变长度的密码迭代编码,最后将每组编码后的密文重新组合在一起,解密时也一样,先对密文按固定长度划分成多组,然后使用密码解密每一组,最后重新组合明文
- 非对称加密、解密算法使用几乎不可逆的算法来加密、解密,加密和解密使用不同的密码
- 区别2
- 对称加密、解密算法和非对称加密、解密算法都是公开的,对称加密、解密算法的安全性依赖于密码的强度和密码的保存
- 非对称加密、解密算法只需公开一对密码中的其中一个,另外一个无须公开,所以非对称加密、解解密算法的安全性比较强
2.3 加密技术的应用
1. GnuPG
下载地址 https://www.gnupg.org/download/index.html
2. GnuPG概述
GnuPG(GNU Privacy Guard)就是用来加密数据与制作证书的一套工具,其作用与PGP类似。
PGP使用了许多专利算法,属于“臭名昭著”的美国加密出口限制之列。GnuPG是GPL软件,并且没有使用任何专利加密算法,所以使用起来有着更多的自由
GnuPG使用非对称加密算法,安全程度比较高。所谓非对称加密算法,就是每一个用户都拥有一对密钥:公钥和私钥。其中,密钥由用户保存,公钥则由用户尽可能地散发给其他人,以便用户之间的通信
3. GnuPG的基本命令
GnuPG支持的算法如下:
- 公钥:RSA、RSA-E、RSA-S、ELG-E、DSA。
- 对称加密:3DES、CAST5、BLOWFISH、AES、AES192、AES256、TWOFISH。
- 散列:MD5、SHA1、RIPEMD160、SHA256、SHA384、SHA512。
- 压缩:不压缩、ZIP、ZLIB、BZIP2。
其使用的基本语法为:
gpg [选项] [文件名]
其实现的功能包括签名、检查、加密或解密,默认的操作依输入数据而定
3. 发现企业网络漏洞
3.1 发现企业网络漏洞的大致思路
安全扫描技术是一类重要的网络安全技术。安全扫描技术与防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。通过对网络的扫描,网络管理员可以了解网络的安全配置和运行的应用服务,及时发现安全漏洞,客观评估网络风险等级。网络管理员可以根据扫描的结果更正网络安全漏洞和系统中的错误配置,在黑客攻击前进行防范
1. 基本思路
安全扫描技术分类
- 主机安全扫描技术:通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞
- 网络安全扫描技术:主要针对系统中不合适的设置、脆弱的口令以及针对其他同安全规则抵触的对象进行检查等
2. 采用网络安全扫描
网络安全扫描技术是一种基于Internet远程检测目标网络或本地主机安全性脆弱点的技术。
通过网络安全扫描,系统管理员能够发现所维护的Web服务器的各种TCP/IP端口的分配、开放的服务、Web服务软件版本和这些服务及软件呈现在Internet上的安全漏洞。
网络安全扫描技术也是采用积极的、非破坏性的办法来检验系统是否有可能被攻击崩溃。它利用了一系列的脚本模拟对系统进行攻击的行为,并对结果进行分析。这种技术通常被用来进行模拟攻击实验和安全审计。网络安全扫描技术与防火墙、安全监控系统互相配合就能够为网络提供很高的安全性。
- 完整的网络安全扫描三个阶段:
- 发现目标主机或网络
- 发现目标后进一步搜集目标信息,包括操作系统类型、运行的服务以及服务软件的版本等。如果目标是一个网络,还可以进一步发现该网络的拓扑结构、路由设备以及各主机的信息
- 根据搜集到的信息判断或者进一步测试系统是否存在安全漏洞
- 网络安全扫描技术
-
包括PING扫射(Ping sweep):用于网络安全扫描的第1阶段,可以帮助我们识别系统是否处于活动状态
-
操作系统探测(Operating system identification):第2阶段,对目标主机运行的操作系统进行识别
-
如何探测访问控制规则(firewalking):第2阶段,用于获取被防火墙保护的远端网络的资料
-
端口扫描(Port scan):第2阶段,通过与目标系统的TCP/IP端口连接,并查看该系统处于监听或运行状态的服务
-
漏洞扫描(vulnerability scan):第3阶段,在端口扫描的基础上,对得到的信息进行相关处理,进而检测出目标系统存在的安全漏洞
端口扫描技术和漏洞扫描技术是网络安全扫描技术中的两种核心技术,并且广泛运用于当前较成熟的网络扫描器中,如著名的Nmap
和Nessus
3.2 端口扫描
1. 端口扫描的原理
端口扫描向目标主机的TCP/UDP服务端口发送探测数据包,并记录目标主机的响应。通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。
端口扫描也可以通过捕获本地主机或服务器的流入、流出IP数据包来监视本地主机的运行情况,不仅能对接收到的数据进行分析,而且能够帮助用户发现目标主机的某些内在的弱点,而不会提供进入一个系统的详细步骤。
2. 端口扫描的目的
- 发现开放端口:发现目标系统上开放的TCP或UDP端口
- 了解主机操作系统信息:端口扫描可以通过操作系统的“指纹”来推测被扫描操作系统或者应用程序的版本等信息
- 了解软件或者服务版本:软件或服务版本可以通过标志获取或者应用程序的指纹来识别获得
- 发现脆弱的软件版本:识别软件和服务的缺陷,从而有助于发起针对漏洞的攻击
3. 端口扫描技术的主要分类
-
全连接扫描
全连接扫描是TCP端口扫描的基础,现有的全连接扫描有TCP connect()扫描
和TCP反向ident扫描
等TCP connect()扫描的实现原理如下:扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接。连接由系统调用connect开始。如果端口开放,则连接将建立成功;否则,若返回-1,则表示端口关闭。如果建立连接成功,则响应扫描主机的SYN/ACK连接请求,这一响应表明目标端口处于监听(打开)的状态。
-
TCP半连接(SYN)扫描
TCP半连接(SYN)扫描:若端口扫描没有完成一个完整的TCP连接,在扫描主机和目标主机的一指定端口建立连接的时候只完成了前两次握手,在第三步时,扫描主机中断了本次连接,使连接没有完全建立起来,这样的端口扫描称为半连接扫描,也称为间接扫描。现有的半连接扫描有TCP SYN扫描
和IP ID头dumb扫描
等SYN扫描的优缺点:
- 优点在于即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多。
- 缺点是在大部分操作系统下,发送主机需要构造适用于这种扫描的IP包,通常情况下,构造SYN数据包需要超级用户或者授权用户访问专门的系统调用
-
UDP扫描
UDP扫描中不使用工具来设定特定的状态标志。如果源UDP包的响应(即ICMP端口不可达消息)说明端口已经“关闭”,UDP扫描的过程比较长,速度比较慢 -
标志获取扫描
标志获取扫描是指连接到系统的特定端口,检查监听该端口的应用软件标志的过程。它可以利用TCP端口连接来获得特定系统上运行的软件和程序版本信息。在实际的应用过程中,系统管理员可能会更改或者删除相关标志,从而隐藏被监听的应用程序。 -
包分片
许多端口扫描器都支持包分片功能。这个功能有助于包穿透、包过滤设备并逃避入侵检测系统的监测。包分片技术将TCP或者UDP包头分成多个包,增加访问控制设备检测端口扫描信息的难度 -
欺骗扫描
Nmap和其他一些端口扫描工具都有“欺骗”功能,能够在直接扫描的同时进行一个或者多个欺骗性的扫描 -
标识扫描
标识扫描能够用来识别与特定TCP连接绑定的用户账户,它可以通过与113号TCP端口进行通信来完成,该端口会返回该连接所有者的身份信息。这种扫描仅仅对于运行ident服务的系统有效,也可以用于识别使用特权账号(例如root)的服务 -
FTP反弹扫描
FTP反弹扫描利用FTP服务器进行欺骗扫描,它利用的是FTP协议对代理FTP连接的支持这一特性。利用FTP服务器作为反弹“代理”,黑客能够隐藏源扫描器的原始地址 -
源端口扫描
端口扫描工具中的源端口扫描允许扫描者设置静态的TCP或者UDP源扫描端口,以避开包过滤访问控制设备。用于扫描的源端口通常与常用服务的端口相关联(比如HTTP、DNS、SMTP、FTP等),这些端口经常处于访问控制设备的许可范围之内 -
主机扫描
主机扫描的目的是确定在目标网络上的主机是否可达。这是信息收集的初级阶段,其效果直接影响到后续的扫描
3.3 漏洞扫描
漏洞扫描就是对计算机系统或者其他网络设备进行安全相关的检测,以找出安全隐患和可被黑客利用的漏洞。显然,漏洞扫描软件是把双刃剑,黑客利用它入侵系统,而系统管理员掌握它以后又可以有效地防范黑客入侵。因此,漏洞扫描是保证系统和网络安全必不可少的手段,必须仔细研究和利用
漏洞扫描通常采用两种策略,第一种是被动式策略
,第二种是主动式策略
。
- 被动式策略是基于主机之上,对系统中不合适的设置、脆弱的口令以及其他同安全规则抵触的对象进行检查;
- 主动式策略是基于网络的,它通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。利用被动式策略扫描称为系统安全扫描,利用主动式策略扫描称为网络安全扫描
Nessus
Nessus是一个功能强大而又易于使用的远程安扫描器,它不仅免费而且更新极快。安全扫描器的功能是对指定网络进行安全检查,找出该网络是否存在导致对手攻击的安全漏洞。
Nessus的优点如下:
- Nessus采用了基于多种安全漏洞的扫描,避免了扫描不完整的情况。
- Nessus是免费的,比起商业的安全扫描工具如ISS具有价格优势。
- Nessus扩展性强、容易使用、功能强大,可以扫描出多种安全漏洞
4. STRIDE 模型
微软的 STRIDE 模型是常用的威胁模型之一。STRIDE 的6个字母分别代表着
- 身份欺骗(Spoofing identity)
- 篡改数据(Tampering with data)
- 否认性(Repudiation)
- 信息泄露(Information disclosure)
- 拒绝服务(Denial of service)
- 提权(Elevation of privilege)
STRIDE 模型针对的属性、定义和例子参考
针对的属性 | 威胁 | 定义 | 例子 |
---|---|---|---|
认证 | 身份欺骗 | 冒充他人或者他物 | A用户使用B用户的账号和密码登录使用系统 |
完整性 | 篡改数据 | 修改数据或者代码 | 未授权的情况下,恶意修改了数据库中的字段数值 |
不可否认性 | 否认性 | 抵赖,声称没有做 | 我没有发送那封邮件 |
机密性 | 信息泄露 | 把信息展示给未授权去看的人 | 航空旅客的身份信息被传播在互联网上 |
可用性 | 拒绝服务 | 使服务对已授权的用户不可用 | 使网站瘫痪,让已授权用户无法进行线上交易 |
授权 | 提权 | 在未授权的情况下,把自己的权限提升到更高的水平 | Linux普通用户利用系统漏洞变成了root用户 |
在分析面对的威胁时,我们应该利用 STRIDE 模型来进行分门别类的总结梳理,这样才能更完整清晰的整理出所有的潜在威胁,并制定出相应的解决方案。
常见的安全威胁来源
在实际的安全工作中,我们常常见到的信息安全所面对的威胁来自于多个方面
- 地震、雷雨、失火、供电中断、网络通信故障都属于破坏物理安全的例子,它们直接破坏了信息的可用性,导致业务中断无法继续向合法授权用户提供服务。
- 系统漏洞和 Bug 可能会同时破坏机密性、完整性和可用性。
- 内部人员威胁往往是很多组织在安全体系建设中未加以足够重视的部分,而事实表明,内部人员因误操作或者恶意利用职权而导致的信息泄露和破坏的案例不计其数。IBM调查报告中指出,在 2015 年,60%的攻击是由内部人直接或者间接发起的。内部人员造成威胁的个人因素主要有:出于贪婪或经济利益的需要;因工作原因对公司和上级领导心怀不满;即将跳槽到另一个组织;希望取悦他人;个人生活不得意导致工作行为异常。
- 黑客渗透是显而易见的威胁,他们可能会利用系统漏洞和 Bug 进行攻击,也可能会辅助以社会工程(Social Engineering)的方式进行攻击;在渗透完成后,黑客往往通过在系统中植入木马后门(包括 Rootkit 等)进行隐秘的长期控制。
- 病毒和蠕虫的散播让信息基础设施的资源被恶意利用,还可能导致信息的非法泄露和被恶意篡改。
- 计算机中的“应用逻辑炸弹”是指在特定逻辑条件满足时,实施破坏的计算机程序,该程序触发后造成计算机数据丢失、计算机不能从硬盘或者软盘引导,甚至会使整个系统瘫痪,并出现物理损坏的虚假现象。
- 实施拒绝服务(Denial of Service)攻击,包括其高级形式–分布式拒绝服务(Distributed Denial of Service)攻击,黑客的目标是让信息系统无法正常工作提供服务,以达到其背后不可告人的目的(例如商业或者政治目的)。
5. Linux操作系统的安全机制
Linux系统安全机制包括:
- 硬件机制
- 操作系统机制(包括访问控制、文件系统安全等)
- 安全应用程序(如杀毒软件、入侵检测系统)。
-
硬件机制是一种通过物理上的“钥匙”来控制访问的机制,例如使用身份验证硬件令牌,它可以授予唯一的权限,提高系统的安全性。
-
操作系统机制是通过操作系统的访问控制来防止未认证的用户访问系统资源的安全策略。例如,Linux系统的权限控制采用的是Unix的访问控制模型,它允许管理员通过文件或目录的访问权限来控制用户,进程,文件等系统资源的访问权限。
此外,Linux系统采用了
PAM
(Linux提供的认证模块)和SELinux
(安全监督),可以针对各种网络攻击(如拒绝服务攻击,信息泄露攻击,身份欺诈攻击等)实施有效的防护控制。例如,PAM(Pluggable Authentication Module)可以控制用户认证,SELinux可以控制内存访问,并可以根据规则设置安全响应,从而有效地防范黑客的网络攻击。 -
Linux还可以利用安全应用程序来提高安全性。主要的安全应用程序有
杀毒软件、入侵检测系统
,用于防范不断发展的新型病毒和木马攻击。例如,使用入侵检测系统可以有效地检测和报告网络的安全事件,并可以查找潜在的安全问题。
Linux系统也可以利用安全工具脚本来提高系统安全。比如:
- 1.Linux安全报告工具,可以自动扫描和分析系统的安全漏洞,修复它们。
- 2.SSH安全审计工具,可以检查SSH配置文件和日志以检测异常行为。
- 3.Nmap扫描工具,它可以自动发现网络漏洞和安全漏洞方面的信息。
以上是Linux操作系统的安全机制,它们可以帮助加强系统的安全性以抵御不断发展的网络攻击。
6. 系统性能安全检查
6.1 Accounts检查
# less /etc/passwd
# grep :0: /etc/passwd
注意新的用户,和UID/GID是0的用户。
6.2 Log检查
注意“entered promiscuous mode”
(进入混杂模式)
混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包。默认情况下,网卡只把发给本机的包(包括广播包)传递给上层程序,其他的包一律丢弃。
一般会出现在/var/log/messages中
6.3 Processes检查
# ps -aux
注意UID是0的进程
lsof -p [可疑的进程号]
察看该进程所打开端口和文件
6.4 Files检查
# find / -uid 0 -perm -4000 -print #-perm:匹配特殊权限 -4000表示SUID
# find / -size +10000k -print
# find / -name '…' -print
# find / -iname ' ' -print
# find / -name '。' –print
注意SUID文件
,可疑大于10M,…,。
和空格
文件
当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。
如果所有者是 root 的话,那么执行人就有超级用户的特权了
用八进制数4000表示setuid权限位,2000表示sgid权限位。
6.5 rpm检查
校验所有的RPM软件包,查找丢失的文件
[root@node-251 yurq]# rpm -Va
S.5....T. c /etc/elasticsearch/elasticsearch.yml
S.5....T. c /etc/profile
输出格式:
S 表示文件长度发生了变化
M 表示文件的访问权限或文件类型发生了变化
5 表示MD5校验和发生了变化
D 表示设备节点的属性发生了变化
L 表示文件的符号链接发生了变化
U 表示文件/子目录/ 设备节点的owner 发生了变化
G 表示文件/子目录/ 设备节点的group 发生了变化
T 表示文件最后一次的修改时间是发生了变化
注意和这些相关的 /sbin, /bin, /usr/sbin, and /usr/bin
平时养成安装第三方文件时check MD5
的习惯,要不太恐怖了
运行的时候会出很多5或者missing的提示,如果不是上面及格目录的,不用太注意
6.6 Network检查
# ip link | grep PROMISC
正常网卡不该进入promisc模式,当然安全server除外,否则可能是有人入侵在sniffer
# lsof -i
# netstat -nap
察看不正常打开的TCP/UDP端口,需要平时注意
arp -a
6.7 Schedule检查
注意root和UID是0的schedule
# crontab -u root -l
# cat /etc/crontab
# ls /etc/cron.*
7. Linux服务器企业级安全加固
7.1 锁定不必要的用户
使用passwd -l
锁定不必要的账号,这里是把除了root以外所有的账号都锁定,可通过passwd -u
解锁
#!/bin/bash
for temp in cut -d ":" -f 1 /etc/passwd | grep -v "root"
do
passwd -l $temp
done
7.2 修改密码过期时间
新建用户的默认设置
[root@localhost ~]# vim /etc/login.defs
PASS_MAX_DAYS 90 # 新建用户密码最长使用天数
PASS_MIN_DAYS 0 # 新建用户密码最短使用天数
PASS_MIN_LEN 7 # 新建用户密码到期提示天数
PASS_WARN_AGE 10 # 最小密码长度
7.3 设置密码复杂度
复杂程度至少一个大写字母一个小写字母一个数字一个特殊符号,且长度至少为10位
[root@localhost ~]# vim /etc/pam.d/system-auth
password required pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=10
7.4 限制登陆超时
超时时间为5分钟,5分钟没有动作自动注销登陆
[root@localhost ~]# vim /etc/profile
TMOUT=300
export TMOUT
7.5 限制错误登陆次数
限制错误登陆次数防止暴力破解
[root@localhost ~]# vim /etc/pam.d/login
#%PAM-1.0
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=10
#查询远程登录次数
pam_tally2 --user lyshark
7.6 禁止root用户远程登陆
1. 创建普通用户,并且授予sudo权限
[root@localhost ~]# useradd lyshark
[root@localhost ~]# passwd lyshark
[root@localhost ~]# vim /etc/sudoers
##The COMMANDS section may have other options added to it.
##Allow root to run any commands anywhere
root ALL=(ALL) ALL
lyshark ALL=(ALL) ALL
#--------------------------------------------------------------------------------------------
2. 禁止ROOT远程登录系统
[root@localhost ~]# vim /etc/ssh/sshd_config
PermitRootLogin no
[root@localhost ~]# systemctl restart sshd
7.7 修改默认ssh连接端口
[root@localhost ~]# vim /etc/ssh/sshd_config
Port 65534 # 登录端口改为65534
MaxAuthTries=3 # 密码最大尝试次数3
[root@localhost ~]# systemctl restart sshd
[C:\Users]$ ssh root@192.168.1.30 65534
7.8 限制允许ssh远程连接的IP
vi /etc/hosts.allow
sshd:192.168.220.1 #允许单个IP
sshd:192.168.220. #允许地址段
vi /etc/hosts.deny
sshd:ALL #除了上面允许的其他都拒绝
7.9 使用密钥登陆
使用xshell等工具自带的公钥向导生成公钥,然后将公钥内容复制到服务器的/root/.ssh/ authorized_keys
7.10 锁定系统文件
将二进制文件进行锁定可以防止被修改
[root@localhost sbin]# chattr +i /sbin/
[root@localhost sbin]# chattr +i /usr/sbin/
[root@localhost sbin]# chattr +i /bin/
[root@localhost sbin]# chattr +i /sbin/
[root@localhost sbin]# chattr +i /usr/lib
[root@localhost sbin]# chattr +i /usr/lib64
[root@localhost sbin]# chattr +i /usr/libexec
7.11 修改默认Umask值
系统默认的umask值为0022,将umask值改为0777的时候,用户默认创建的文件不具有可执行权限,防止被上传木马
[root@localhost ~]# echo “umask 0777” >> /etc/bashrc
[root@localhost ~]# touch test1
[root@localhost ~]# mkdir test2
[root@localhost ~]#
[root@localhost ~]# ls -lh
total 0
----------. 1 root root 0 Aug 25 05:46 test1
d---------. 2 root root 6 Aug 25 05:46 test2
7.12 限制GCC编译
限制编译可以防止黑客编译生成可执行文件用来提权
[root@node-251 yurq]# rpm -q --filesbypkg gcc | grep 'bin'
gcc /usr/bin/c89
gcc /usr/bin/c99
gcc /usr/bin/cc
gcc /usr/bin/gcc
gcc /usr/bin/gcc-ar
gcc /usr/bin/gcc-nm
gcc /usr/bin/gcc-ranlib
gcc /usr/bin/gcov
gcc /usr/bin/x86_64-redhat-linux-gcc
[root@localhost ~]# chmod 000 /usr/bin/c89
[root@localhost ~]# chmod 000 /usr/bin/c99
[root@localhost ~]# chmod 000 /usr/bin/cc
[root@localhost ~]# chmod 000 /usr/bin/gcc
[root@localhost ~]# chmod 000 /usr/bin/gcc-*
[root@localhost ~]# chmod 000 /usr/bin/gcc-*
7.13 限制日志文件
黑客入侵后大都会对日志文件进行清空或删除,所以要将日志文件进行不能删除只能增加限制
[root@localhost ~]# cd /var/log/
[root@localhost log]# chattr +a dmesg cron lastlog messages secure wtmp
[root@localhost log]# lsattr secure
7.14 最小化防火墙规则
最小化防火墙规则只开放http和https等对外提供服务的端口和ssh远程连接服务
vim /etc/firewalld/zones/public.xml
<service name=“ssh”/>
<port protocol=“tcp” port=“80”/>
<port protocol=“tcp” port=“443”/>
firewall-cmd –reload
7.15 开启selinux
1. 配置selinux允许ssh服务
默认selinux也是开放的,但是经常会有一些未知的问题,如果没有出现未知问题可以继续开放,下面是selinux允许ssh服务
[root@localhost ~]# yum install -y policycoreutils-python-2.5-29.el7.x86_64
[root@localhost ~]# semanage port -l | grep ssh
ssh_port_t tcp 22
[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 6553
[root@localhost ~]# semanage port -l | grep ssh
ssh_port_t tcp 6553, 22
2. 通过semanage命令设置目录权限
[root@localhost html]# semanage fcontext -a -t httpd_sys_content_t /var/www/html/index.html
[root@localhost html]# ls -Z
-rw-r–r–. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
7.16 设置history命令显示时间
vi /etc/profile
#在文件的末尾添加参数
export HISTTIMEFORMAT="%F %T whoami "
7.17 禁止Control-Alt-Delete 键盘重启系统命令
1. 备份配置文件
cp -a /usr/lib/systemd/system/ctrl-alt-del.target /usr/lib/systemd/system/ctrl-alt-del.target.default
2. 移除该原源文件
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
7.18 设置grub密码
1. 备份配置文件
cp -a /etc/grub.d/00_header /etc/grub.d/00_header.default
2. 使用grub2-mkpasswd-pbkdf2 加密密码
密码自己定义,但是一定得保存好否则最后连自己都登录不进去文章来源:https://www.toymoban.com/news/detail-466075.html
[root@localhost ~]# grub2-mkpasswd-pbkdf2
Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.B157F42E96462AB239C03000F113D32EB18FD48073F1FC7D8F87A8F3B3F89F662424ECCAB901F3A812A997E547FD520F3E99D0E080F4FE8B05E019757E34F75B.29C83F87B4B6C086FC9A81E046CC3623CC5CF2F82128EDC3A0364894E429D4993B28563F82D71BF346188108CBD4341FC4A71B90E543581646B4E7EAE920C54A
3. 修/boot/grub2/grub.cfg
添加以下配置到该文件的最后面(特别需要注意 用户名root和密文之间是空格分隔,而不是换行)文章来源地址https://www.toymoban.com/news/detail-466075.html
cat <<EOF
set superusers=‘root’
password_pbkdf2 root grub.pbkdf2.sha512.10000.B157F42E96462AB239C03000F113D32EB18FD48073F1FC7D8F87A8F3B3F89F662424ECCAB901F3A812A997E547FD520F3E99D0E080F4FE8B05E019757E34F75B.29C83F87B4B6C086FC9A81E046CC3623CC5CF2F82128EDC3A0364894E429D4993B28563F82D71BF346188108CBD4341FC4A71B90E543581646B4E7EAE920C54A
E0F
4. 执行命令重新编译生成grub.cfg文件
grub2-mkconfig -o /boot/grub2/grub.cfg
7.19 其他
- 及时更新漏洞补丁及使用稳定安全版的服务器应用软件
- 有条件使用堡垒机登陆服务器
- 将生产服务器和办公网物理隔离
到了这里,关于Linux 企业级安全原理和防范技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!