网络安全加固手册-防火墙 - SSH - 权限 - 漏洞扫描_第1页
网络安全加固手册-防火墙 - SSH - 权限 - 漏洞扫描_第2页
网络安全加固手册-防火墙 - SSH - 权限 - 漏洞扫描_第3页
网络安全加固手册-防火墙 - SSH - 权限 - 漏洞扫描_第4页
网络安全加固手册-防火墙 - SSH - 权限 - 漏洞扫描_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络安全加固手册

防火墙·SSH·权限·漏洞扫描

从基线配置到实战加固的完整操作指南

10大章节·100+加固命令·80条安全要点

安全运维实战系列

目录

第一章安全加固的基本思路与威胁模型

第二章防火墙配置与网络访问控制

第三章SSH服务深度加固

第四章用户与权限管理

第五章文件系统与敏感数据保护

第六章漏洞扫描与补丁管理

第七章日志审计与入侵检测

第八章Web服务与应用安全加固

第九章安全基线检查与自动化脚本

第十章应急响应与安全事件处置

网络安全加固手册·防火墙/SSH/权限/漏洞扫描

第一章安全加固的基本思路与威胁模型

1.1安全加固的本质

安全加固的本质不是安装某一款工具、也不是背诵某一份检查清单,而是系统性地减少攻击面、提升攻击成

本、增加检测能力。任何一次成功的入侵,都必然经过"信息收集→边界突破→权限提升→横向移动→数据窃

取"这条链条中的若干环节。加固的目标就是在这条链条的每个环节上设置障碍。

很多人误以为加固就是"把服务关掉、把端口封掉"。这只是最浅层的工作。真正的加固需要理解每个配置项背

后的攻防逻辑:为什么禁用密码登录能防住暴力破解?为什么最小权限原则能限制横向移动?为什么文件完整性监

控能发现后门?只有理解了原理,才能在面对新威胁时做出正确的判断,而不是机械地执行过时的检查清单。

1.2威胁模型:先搞清楚敌人是谁

不同的威胁主体有不同的能力和动机,对应的防御策略完全不同。安全加固的第一步是建立威胁模型。

威胁主体典型能力主要动机防御重点

自动化扫描器端口扫描、弱口令爆破、已知漏洞利撒网式攻击,无特定目关闭非必要端口、强密码、及时打补

用标丁

脚本小子使用现成工具、公开EXP炫技、勒索、挖矿基础加固即可防住大部分

有组织犯罪团定制化攻击、社工、供应链渗透勒索、数据贩卖纵深防御、日志审计、应急响应

APT组织0day、长期潜伏、定向渗透情报窃取、战略破坏流量分析、行为检测、威胁情报

内部人员合法权限滥用、数据外带利益驱动、报复、失误最小权限、职责分离、行为审计

对于大多数中小企业,主要威胁来自前两类:自动化扫描和脚本小子。做好基础加固就能防住95%以上的攻

击。但这不意味着可以忽视后三类威胁——一旦成为定向攻击目标,基础加固远远不够。

1.3纵深防御:不依赖任何单一措施

纵深防御(DefenseinDepth)是安全领域的核心原则:不把所有鸡蛋放在一个篮子里。即便某一层防护被突

破,后续层次仍能提供保护。

一个完整的纵深防御体系包括以下层次:

网络层:防火墙、网络分段、DDoS防护、VPN接入

主机层:操作系统加固、账户管理、服务最小化

应用层:输入验证、身份认证、访问控制、加密传输

数据层:加密存储、访问审计、备份隔离

监控层:日志采集、异常检测、告警响应

管理层:安全策略、人员培训、应急演练

很多安全事故的根源不是某一层被突破,而是多层同时失效。比如密码泄露(认证层失效)+未启用MFA(第

二因素缺失)+未限制登录IP(网络层缺失)+未监控异常登录(监控层缺失),四层叠加才导致入侵成功。纵深防

御的思想就是让攻击者必须同时突破多层才能成功。

1.4最小权限原则

最小权限原则(PrincipleofLeastPrivilege)是权限管理的黄金准则:任何主体(用户、进程、服务)只应拥

有完成其职责所必需的最小权限,且权限的持续时间应尽可能短。

这个原则在实践中的具体体现包括:

普通用户不使用root登录,需要时通过sudo提权

每个服务使用独立的系统账户运行,不用root或共用账户

数据库账户按应用分配,不用超级管理员账户连接

云平台IAM用户只授予完成工作所需的策略

临时权限设置过期时间,避免长期持有

敏感操作需要二次认证或双人复核

最常见的权限错误:为了让程序"能跑起来",直接给root权限;为了方便,所有人共用同一个管理员账户;

为了省事,把云平台主账号的AccessKey写死在代码里。这些做法在当时看起来节省了时间,但一旦发生泄

露,攻击者获得的权限就是全系统的,损失无法估量。

1.5加固工作的优先级

安全加固的工作量很大,不可能一次做完。按ROI(投入产出比)排序,优先做以下事项:

优先级加固项投入收益

P0修改默认密码、关闭默认账户极低极高(防住绝大部分自动化攻击)

P0及时安装安全补丁低极高(防住已知漏洞利用)

P0配置防火墙,关闭非必要端口低极高(减少攻击面)

P1SSH密钥登录+禁用密码低高(防住暴力破解)

P1限制管理端口访问来源IP低高(阻断大量扫描)

P1开启日志审计中高(事后追溯能力)

P2最小权限配置中中(限制横向移动)

P2文件完整性监控中中(发现后门)

P3入侵检测系统高中(高级威胁检测)

P3安全信息和事件管理(SIEM)极高高(大规模环境)

建议按P0→P1→P2→P3的顺序推进。不要一上来就搭建复杂的监控体系,先做好基础加固,把P0和P1的

项目做扎实,安全水位就会有质的提升。

第二章防火墙配置与网络访问控制

2.1防火墙的核心作用

防火墙是网络安全的第一道防线,它决定哪些流量可以进入系统、哪些流量可以离开系统。很多服务器被入侵

的第一步就是暴露了不该暴露的端口(比如把数据库端口3306、Redis端口6379直接暴露到公网),攻击者只需要

一个弱密码或一个已知漏洞就能拿下整个系统。

Linux平台上有多种防火墙方案:传统的iptables、更现代的nftables、以及上层的管理工具firewalld和ufw。它

们各有优缺点,选择哪一种取决于系统发行版和运维习惯。

方案适用系统特点推荐场景

iptables通用成熟稳定、规则灵活、学习曲线陡需要精细控制的场景

nftablesLinux3.13+iptables的继任者、性能更好、语法更简洁新系统推荐

firewalldRHEL/CentOS/Fedora基于区域的动态管理、支持运行时修改红帽系系统默认

ufwUbuntu/Debian简洁易用、适合快速配置个人服务器、开发环境

2.2基础防火墙策略设计

一个合理的防火墙策略应该遵循"默认拒绝、明确允许"的白名单原则。核心思想是:除非明确允许,否则一

律拒绝。这比"默认允许、明确拒绝"的黑名单方式安全得多,因为黑名单永远无法穷举所有威胁,而白名单只需要

管理已知的合法流量。

典型的服务器应该开放的端口只有以下几个:SSH(22或自定义端口)、HTTP(80)、HTTPS(443)。其他

的端口(数据库、缓存、管理后台等)应该只允许内网访问,或通过VPN访问。

2.3ufw配置实战(Ubuntu/Debian)

ufw是Ubuntu和Debian系统上最易用的防火墙管理工具。它本质上是对iptables的封装,但大大简化了配置流

程。

#1.设置默认策略:拒绝所有入站,允许所有出站

sudoufwdefaultdenyincoming

sudoufwdefaultallowoutgoing

#2.允许SSH(修改端口前确保SSH已可用,避免把自己锁在外面)

#如果SSH使用默认22端口

sudoufwallow22/tcp

#如果已经改为自定义端口,比如2222

sudoufwallow2222/tcp

#3.允许HTTP和HTTPS

sudoufwallow80/tcp

sudoufwallow443/tcp

#4.允许特定IP访问管理端口

#例如只允许公司办公网段访问8080管理后台

sudoufwallowfrom/24toanyport8080

#5.允许特定IP段的全部访问(谨慎使用)

sudoufwallowfrom/8

#6.开启防火墙

sudoufwenable

#7.查看当前规则

sudoufwstatusverbose

#8.查看规则编号(删除规则时需要)

sudoufwstatusnumbered

#9.删除规则(按编号)

sudoufwdelete3

#10.删除规则(按规则内容)

sudoufwdeleteallow8080/tcp

#11.限制SSH连接频率(防暴力破解)

sudoufwlimit22/tcp

#12.临时禁用(调试时用)

sudoufwdisable

#13.重置所有规则

sudoufwreset

开启防火墙前务必确认SSH端口已放行:这是新手最容易踩的坑。如果先执行ufwenable而没放行SSH

端口,当前的SSH连接会在下次重连时断开,如果是云服务器且没有VNC控制台,就只能通过救援模式恢复

了。正确的顺序是:先添加SSH规则,再开启防火墙。

2.4firewalld配置实战(RHEL/CentOS)

firewalld引入了"区域(zone)"的概念,每个区域定义了一组规则,网卡可以绑定到不同的区域。这种设计让复

杂的网络策略更容易管理。

#1.查看firewalld状态

sudosystemctlstatusfirewalld

sudofirewall-cmd--state

#2.查看默认区域

sudofirewall-cmd--get-default-zone

#3.查看所有区域的配置

sudofirewall-cmd--list-all-zones

#4.查看当前区域的规则

sudofirewall-cmd--list-all

#5.查看已开放的端口

sudofirewall-cmd--list-ports

#6.开放端口(运行时生效,重启后失效)

sudofirewall-cmd--add-port=80/tcp

sudofirewall-cmd--add-port=443/tcp

#7.开放端口(永久生效,需reload)

sudofirewall-cmd--permanent--add-port=80/tcp

sudofirewall-cmd--permanent--add-port=443/tcp

sudofirewall-cmd--reload

#8.移除端口

sudofirewall-cmd--permanent--remove-port=8080/tcp

sudofirewall-cmd--reload

#9.开放服务(firewalld预定义的服务)

sudofirewall-cmd--permanent--add-service=http

sudofirewall-cmd--permanent--add-service=https

sudofirewall-cmd--permanent--add-service=ssh

sudofirewall-cmd--reload

#10.允许特定IP段的访问

sudofirewall-cmd--permanent--add-rich-rule='rulefamily="ipv4"source

address="/24"portport="8080"protocol="tcp"accept'

sudofirewall-cmd--reload

#11.拒绝特定IP(封禁恶意IP)

sudofirewall-cmd--permanent--add-rich-rule='rulefamily="ipv4"source

address="00"reject'

sudofirewall-cmd--reload

#12.端口转发(将80转发到8080)

sudofirewall-cmd--permanent--add-forward-port=port=80:proto=tcp:toport=8080

sudofirewall-cmd--reload

#13.查看所有富规则

sudofirewall-cmd--list-rich-rules

2.5iptables配置实战

iptables是底层工具,配置更灵活但更复杂。以下是一个生产环境可用的基础配置脚本。

#!/bin/bash

#/opt/scripts/iptables-setup.sh

#iptables基础防火墙配置

set-e

#清空所有规则

iptables-F

iptables-X

iptables-tnat-F

iptables-tnat-X

iptables-tmangle-F

iptables-tmangle-X

#设置默认策略

iptables-PINPUTDROP

iptables-PFORWARDDROP

iptables-POUTPUTACCEPT

#允许本地回环接口的所有流量

iptables-AINPUT-ilo-jACCEPT

iptables-AOUTPUT-olo-jACCEPT

#允许已建立的连接和相关连接

iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT

#允许SSH(默认22端口,建议改成自定义端口)

iptables-AINPUT-ptcp--dport22-jACCEPT

#允许HTTP和HTTPS

iptables-AINPUT-ptcp--dport80-jACCEPT

iptables-AINPUT-ptcp--dport443-jACCEPT

#允许ICMP(ping)

iptables-AINPUT-picmp--icmp-typeecho-request-jACCEPT

#允许特定IP访问管理端口

iptables-AINPUT-ptcp-s/24--dport8080-jACCEPT

#防SYNFlood攻击

iptables-AINPUT-ptcp--syn-mlimit--limit100/s--limit-burst200-jACCEPT

#防止端口扫描

iptables-NPORTSCAN

iptables-APORTSCAN-ptcp--tcp-flagsSYN,ACK,FIN,RSTRST-mlimit--limit1/s-j

RETURN

iptables-APORTSCAN-jDROP

iptables-AINPUT-ptcp-jPORTSCAN

#记录被拒绝的包(便于审计)

iptables-AINPUT-jLOG--log-prefix"iptables-dropped:"--log-level4

iptables-AINPUT-jDROP

#保存规则(Debian/Ubuntu)

iptables-save>/etc/iptables/rules.v4

#保存规则(RHEL/CentOS)

#serviceiptablessave

echo"iptables规则配置完成"

iptables与firewalld的关系:firewalld底层使用的仍然是iptables或nftables。如果系统上启用了firewalld,手

动添加的iptables规则会在firewalldreload时被覆盖。两者不要同时使用,选择一种即可。红帽系系统推荐

firewalld,Debian系推荐ufw,需要精细控制时直接用iptables或nftables。

2.6云平台安全组

在云服务器上,安全组(SecurityGroup)是最外层、也是最有效的访问控制手段。安全组的规则在虚拟化层生

效,流量根本到不了服务器,比操作系统层的防火墙更高效。安全组和操作系统防火墙应该配合使用,形成双重保

护。

安全组配置的核心原则:

只开放业务必需的端口,其他一律不开放

管理端口(SSH、RDP)只允许来自固定IP的访问

数据库、缓存等服务的端口只允许来自内网网段

出站规则也要收敛,避免服务器被入侵后成为攻击跳板

定期审计安全组规则,删除不再使用的规则

2.7网络分段与隔离

对于有一定规模的系统,网络分段是提升安全性的重要手段。通过VPC、子网、安全组等机制,将不同功能、

不同敏感级别的服务隔离开,即便某一台服务器被攻陷,攻击者也难以直接访问其他服务。

典型的分段方案包括:Web层(对外暴露)、应用层(只允许Web层访问)、数据层(只允许应用层访问)。

每一层只能访问下一层,不能反向访问。这种"漏斗"结构极大地限制了攻击者的横向移动空间。

第三章SSH服务深度加固

3.1SSH攻击面分析

SSH是Linux服务器最重要的管理入口,也是攻击者最常尝试突破的目标。针对SSH的攻击主要有以下几种:

暴力破解:使用字典对root或常见用户名进行密码猜测

弱口令:直接尝试admin/123456这类常见弱密码

默认账户:尝试test、guest等系统自带的默认账户

协议漏洞:利用旧版本SSH的漏洞(如CVE-2018-15473用户枚举)

密钥窃取:拿到未加密的私钥后直接登录

中间人攻击:在首次连接时接受伪造的主机密钥

配置一个暴露在公网的SSH服务,平均几分钟内就会收到第一次扫描,几小时内就会收到上千次暴力破解尝

试。这是常态,不必惊慌,但必须做好加固。

3.2基础加固配置

以下配置写入/etc/ssh/sshd_config,修改后使用sudosystemctlreloadsshd生效。修改前务必保留一个

已连接的SSH会话,避免配置错误导致自己被锁在外面。

#/etc/ssh/sshd_config安全加固配置

#==========基础设置==========

#修改默认端口(可有效减少扫描和暴力破解)

Port2222

#只监听特定地址(如果服务器有多个IP)

#ListenAddress0

#使用SSH协议2(现代版本默认,显式设置更明确)

Protocol2

#==========认证设置==========

#禁止root直接登录

PermitRootLoginno

#禁用密码认证,只允许密钥登录

PasswordAuthenticationno

ChallengeResponseAuthenticationno

KbdInteractiveAuthenticationno

#启用公钥认证

PubkeyAuthenticationyes

AuthorizedKeysFile.ssh/authorized_keys

#禁止空密码

PermitEmptyPasswordsno

#限制登录尝试次数

MaxAuthTries3

#认证超时(秒)

LoginGraceTime30

#==========会话设置==========

#客户端保活检测

ClientAliveInterval300

ClientAliveCountMax2

#禁用不必要的功能

AllowAgentForwardingno

AllowTcpForwardingno

X11Forwardingno

PermitTunnelno

#禁止.rhosts认证

IgnoreRhostsyes

HostbasedAuthenticationno

#==========访问控制==========

#只允许特定用户登录

AllowUsersdeployadmin

#或只允许特定用户组

#AllowGroupssshusers

#拒绝特定用户

#DenyUserstestguest

#==========日志==========

#日志级别

LogLevelVERBOSE

#记录登录日志

SyslogFacilityAUTH

修改SSH配置的安全流程:第一,保留当前已连接的SSH会话;第二,修改配置文件后先用sshd-t检查

语法;第三,新开一个终端测试连接;第四,确认新连接可用后再关闭旧会话。如果配置错误导致无法登录,

云服务器可以通过VNC控制台恢复,物理服务器则需要重启进入救援模式。

3.3密钥登录配置

密钥登录比密码登录安全得多。密码是"你知道什么"(可以被暴力破解、可以被钓鱼、可以被偷看),而密钥

是"你拥有什么"(破解需要极长的时间和算力)。启用密钥登录后可以彻底关闭密码认证,让暴力破解完全失效。

#==========客户端生成密钥对==========

#使用Ed25519算法(比RSA更安全、更短)

ssh-keygen-ted25519-C"your_email@"

#如果想用RSA(某些旧系统需要)

ssh-keygen-trsa-b4096-C"your_email@"

#密钥生成过程中会提示:

#1.保存路径(默认~/.ssh/id_ed25519)

#2.设置密钥密码(强烈建议设置,即使密钥泄露也无法直接使用)

#==========上传公钥到服务器==========

#方式一:使用ssh-copy-id(推荐)

ssh-copy-id-i~/.ssh/id_ed25519.pubuser@server

#方式二:手动复制

cat~/.ssh/id_ed25519.pub|sshuser@server"mkdir-p~/.ssh&&cat>>

~/.ssh/authorized_keys"

#==========服务器端权限设置==========

#关键:权限不正确SSH会拒绝使用密钥

chmod700~/.ssh

chmod600~/.ssh/authorized_keys

chown-Ruser:user~/.ssh

#==========测试密钥登录==========

ssh-i~/.ssh/id_ed25519user@server

#确认可以登录后,再关闭密码认证

#在sshd_config中设置PasswordAuthenticationno

3.4私钥保护

私钥的保护和使用同样重要。私钥文件一旦泄露,攻击者就获得了和你一样的登录能力。

私钥必须加密存储:生成密钥时设置密码,或者使用硬件令牌(YubiKey)存储

私钥权限必须是600:其他用户不可读,SSH会拒绝使用权限过松的私钥

私钥不进入版本控制:确保.gitignore排除了私钥文件

私钥不在多台机器间复制:每台设备生成独立的密钥对,删除设备时删除对应的公钥

使用ssh-agent管理:避免频繁输入密码,但要注意agentforwarding的风险

#==========使用ssh-agent管理私钥==========

#启动ssh-agent

eval"$(ssh-agent-s)"

#添加私钥(会提示输入密码)

ssh-add~/.ssh/id_ed25519

#查看已加载的密钥

ssh-add-l

#在macOS上将密码存入Keychain

ssh-add--apple-use-keychain~/.ssh/id_ed25519

#移除密钥

ssh-add-D

#==========使用YubiKey存储密钥(推荐)==========

#生成存储在YubiKey上的密钥

ssh-keygen-ted25519-sk-C"yubikey"

#使用已有的YubiKey密钥

ssh-keygen-ted25519-sk-Oresident-Overify-required

#将密钥导入到新机器

ssh-keygen-K

3.5双因素认证(2FA)

即使使用密钥登录,多一层2FA认证也能提供额外的安全保障。特别是当私钥可能被盗用(比如从被感染的机

器上),2FA能阻止未授权的登录。

#==========安装GoogleAuthenticator==========

#Debian/Ubuntu

sudoaptinstalllibpam-google-authenticator

#RHEL/CentOS

sudoyuminstallgoogle-authenticator

#==========为用户配置2FA==========

#切换到目标用户

su-deploy

google-authenticator

#交互式问答(推荐配置):

#Doyouwantauthenticationtokenstobetime-based?y

#Doyouwantmetoupdateyour~/.google_authenticatorfile?y

#Doyouwanttodisallowmultipleusesofthesameauthenticationtoken?y

#Doyouwanttoallowratelimiting?y

#Doyouwanttoenableratelimitingforbruteforce?y

#保存显示的紧急备用码(recoverycodes)

#==========配置PAM==========

sudovi/etc/pam.d/sshd

#在文件开头添加:

#authrequiredpam_google_authenticator.sonullok

#nullok表示未配置2FA的用户可以不用,配置完成后可去掉

#==========配置SSH==========

sudovi/etc/ssh/sshd_config

#修改以下配置:

#KbdInteractiveAuthenticationyes

#或旧版本用:

#ChallengeResponseAuthenticationyes

#UsePAMyes

#重启SSH

sudosystemctlrestartsshd

#测试:新连接会要求输入验证码

2FA配置的注意事项:配置2FA前必须确保本地时钟准确(NTP同步),时间偏差过大会导致验证码始终错

误。配置时必须保存紧急备用码,手机丢失时可以用备用码登录。生产环境建议先在测试机上验证整个流程,

再推广到生产。

3.6fail2ban:自动封禁暴力破解

fail2ban监控日志文件,发现多次失败的登录尝试后自动在防火墙中封禁对应的IP。这是对抗暴力破解的最有效

工具之一。

#==========安装==========

#Debian/Ubuntu

sudoaptinstallfail2ban

#RHEL/CentOS

sudoyuminstallepel-release

sudoyuminstallfail2ban

#==========配置==========

#不要直接修改jail.conf,应该创建jail.local

sudocp/etc/fail2ban/jail.conf/etc/fail2ban/jail.local

sudovi/etc/fail2ban/jail.local

#基础配置示例:

#[DEFAULT]

#bantime=3600#封禁时长(秒)

#findtime=600#统计窗口(秒)

#maxretry=3#最大失败次数

#ignoreip=/8/24#白名单

#backend=systemd

#[sshd]

#enabled=true

#port=2222

#logpath=%(sshd_log)s

#maxretry=3

#==========启动并验证==========

sudosystemctlenablefail2ban

sudosystemctlstartfail2ban

#查看状态

sudofail2ban-clientstatus

sudofail2ban-clientstatussshd

#手动封禁/解封IP

sudofail2ban-clientsetsshdbanip00

sudofail2ban-clientsetsshdunbanip00

#查看日志

sudotail-f/var/log/fail2ban.log

3.7SSH加固检查清单

检查项推荐配置作用

端口改为非22端口减少自动化扫描

root登录PermitRootLoginno避免root被暴力破解

密码认证PasswordAuthenticationno暴力破解完全失效

密钥认证PubkeyAuthenticationyes使用更安全的认证方式

认证次数MaxAuthTries3限制暴力破解次数

登录超时LoginGraceTime30减少空闲连接占用

用户白名单AllowUsers指定用户只允许授权用户登录

禁用转发AllowTcpForwardingno防止成为跳板

X11转发X11Forwardingno减少攻击面

2FA启用GoogleAuthenticator多一层认证保护

fail2ban启用自动封禁暴力破解

访问来源限制安全组只放行固定IP从网络层阻断

第四章用户与权限管理

4.1账户生命周期管理

账户是最容易出问题的环节,也是最容易被忽视的环节。很多入侵事件的根本原因不是技术漏洞,而是账户管

理松散:离职员工的账户没删除、默认账户没禁用、共享账户没审计。

账户管理应该遵循完整的生命周期:创建→授权→使用→审计→禁用→删除。每个环节都有明确的流程

和责任人。

环节关键动作审计要点

创建实名、审批、分配最小权限谁批准的、什么时候创建的

授权按角色授予权限、记录授权内容权限是否超过岗位需要

使用登录日志、操作日志是否有异常时间、异常地点的登录

审计定期检查账户活跃度、权限使用情况长期未使用的账户、超额权限

禁用离职、转岗时立即禁用是否及时、是否有遗漏

删除保留审计数据后删除账户是否彻底清理

4.2用户账户审计

#==========查看所有可登录用户==========

#查看/etc/passwd中shell不是nologin/false的用户

cat/etc/passwd|grep-v"/nologin\|/false"|cut-d:-f1

#==========查看具有UID0权限的账户==========

#UID0就是root权限,除root外不应该有其他账户

awk-F:'$3==0{print$1}'/etc/passwd

#==========查看最近登录的用户==========

last-n20

#==========查看当前登录的用户==========

who

w

#==========查看登录失败的记录==========

sudolastb-n20

#==========查看账户信息==========

#查看某用户的信息

idusername

fingerusername#需要安装finger

#==========查看用户密码状态==========

sudopasswd-Susername

#输出格式:usernamePS2024-01-010999997-1

#第二个字段:P=有密码L=锁定NP=无密码

#==========查看空密码账户==========

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

#==========查看UID为空的账户==========

sudoawk-F:'($3==""){print$1}'/etc/passwd

4.3系统账户保护

Linux系统预置了许多服务账户(如daemon、bin、sys、nobody),这些账户是给系统服务使用的,不应该能

够登录。需要确认这些账户的shell都设置为/sbin/nologin或/bin/false。

#==========检查系统账户的shell==========

grep-E"^(daemon|bin|sys|sync|games|man|lp|mail|news|uucp|proxy|www-

data|backup|list|irc|gnats|nobody)"/etc/passwd

#正确的输出示例(shell应该是nologin或false):

#daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

#bin:x:2:2:bin:/bin:/usr/sbin/nologin

#sys:x:3:3:sys:/dev:/usr/sbin/nologin

#==========锁定不需要登录的账户==========

#方式一:修改shell

sudousermod-s/usr/sbin/nologindaemon

#方式二:锁定账户

sudousermod-Ldaemon

#方式三:将账户的密码字段设为*或!

#编辑/etc/shadow,把密码字段改为!或*

#==========禁用root直接登录==========

#已在SSH章节介绍,补充一点:root的密码本身也应该锁定

#如果需要通过sudo提权,root密码不需要设置

sudopasswd-lroot

4.4sudo权限精细化管理

sudo是Linux权限管理中最容易配错的地方。/etc/sudoers中一个不当的配置就可能让普通用户获得完整的

root权限。常见的错误包括:允许用户执行su、bash、vi等可以逃逸的命令。

#==========使用visudo编辑sudoers==========

#不要用vi直接编辑/etc/sudoers,语法错误会导致sudo完全不可用

sudovisudo

#==========常见配置示例==========

#允许用户执行所有命令(谨慎使用)

#deployALL=(ALL:ALL)ALL

#允许用户执行特定命令,不需要密码

#deployALL=(ALL)NOPASSWD:/usr/bin/systemctlrestartnginx

#允许用户组执行特定命令

#%devopsALL=(ALL)/usr/bin/docker,/usr/bin/systemctl

#允许用户执行特定命令但需要输入密码

#deployALL=(ALL)/usr/bin/aptupdate,/usr/bin/aptupgrade

#==========危险配置示例(绝对不要这么配)==========

#deployALL=(ALL)NOPASSWD:/bin/bash#等于给了root

#deployALL=(ALL)NOPASSWD:/usr/bin/vi#vi可以执行shell

#deployALL=(ALL)NOPASSWD:/usr/bin/su#可以直接切root

#deployALL=(ALL)NOPASSWD:ALL#完全root权限

#==========使用include目录管理==========

#/etc/sudoers.d/下的文件会被自动加载

#推荐为每个角色创建独立的文件

sudovi/etc/sudoers.d/devops

#%devopsALL=(ALL)NOPASSWD:/usr/bin/docker

#设置正确的权限

sudochmod0440/etc/sudoers.d/devops

#==========查看当前用户的sudo权限==========

sudo-l

#==========sudo日志审计==========

#sudo的操作会记录在/var/log/auth.log(Debian)或/var/log/secure(RHEL)

sudogrepsudo/var/log/auth.log

#查看某用户执行的sudo命令

sudogrep"USER=deploy"/var/log/auth.log

#失败的操作

sudogrep"sudo:.*incorrectpassword"/var/log/auth.log

sudo配置的常见陷阱:第一,不要给用户NOPASSWD执行shell、编辑器、解释器、包管理器的权限,这些

都可以直接获得root。第二,sudosu和sudo-i会切换到root,应显式禁止。第三,环境变量

LD_PRELOAD、LD_LIBRARY_PATH等可能被滥用提权,应在sudoers中禁用。第四,sudo的版本要及时更新,

历史上有过CVE-2019-14287、CVE-2021-3156等严重漏洞。

4.5密码策略

密码策略直接影响账户被暴力破解的难度。一个强制复杂度的密码策略,能让自动化攻击的成功率下降到可以

忽略的水平。

#==========安装密码质量检查库==========

#Debian/Ubuntu

sudoaptinstalllibpam-pwquality

#RHEL/CentOS

sudoyuminstalllibpwquality

#==========配置密码策略==========

sudovi/etc/security/pwquality.conf

#最小长度(推荐12位以上)

minlen=12

#最少字符类别数(大写、小写、数字、符号中的几类)

minclass=3

#最少大写字母数

ucredit=-1

#最少小写字母数

lcredit=-1

#最少数字数

dcredit=-1

#最少特殊字符数

ocredit=-1

#不能包含用户名

usercheck=1

#连续相同字符的最大数量

maxrepeat=3

#连续字符的最大数量(比如abcdef)

maxclassrepeat=4

#旧密码中至少多少位不能相同

difok=5

#拒绝字典中的常见密码

dictcheck=1

#==========配置密码有效期==========

sudovi/etc/login.defs

#密码最大有效期(天)

PASS_MAX_DAYS90

#两次修改之间的最小间隔(天)

PASS_MIN_DAYS7

#密码到期前的提醒天数

PASS_WARN_AGE14

#==========应用到已存在的用户==========

sudochage-M90-m7-W14username

#查看用户的密码策略

sudochage-lusername

#==========账户锁定策略==========

sudovi/etc/pam.d/common-auth

#添加:

#authrequiredpam_tally2.soonerr=faildeny=5unlock_time=900

#5次失败后锁定15分钟

#查看失败次数

sudopam_tally2--user=username

#重置失败计数

sudopam_tally2--user=username--reset

4.6用户权限审计

#==========查找所有SUID文件==========

#SUID文件以文件所有者权限运行,是提权的重要途径

sudofind/-perm-4000-typef2>/dev/null

#常见的合法SUID文件:

#/usr/bin/passwd

#/usr/bin/sudo

#/usr/bin/su

#/usr/bin/mount

#/usr/bin/umount

#/usr/bin/chsh

#/usr/bin/newgrp

#/bin/ping

#不在上述列表中的SUID文件需要仔细检查

#==========查找所有SGID文件==========

sudofind/-perm-2000-typef2>/dev/null

#==========查找全局可写文件==========

#全局可写文件可能被恶意篡改

sudofind/-typef-perm-0002-not-path"/proc/*"-not-path"/sys/*"2>/dev/null

#==========查找无主文件==========

#文件的所有者账户已被删除

sudofind/-nouser-o-nogroup2>/dev/null

#==========查看用户所属的组==========

groupsusername

#查看组内所有用户

getentgroupgroupname

#==========查看有sudo权限的用户==========

getentgroupsudo

getentgroupwheel

第五章文件系统与敏感数据保护

5.1文件权限基础

Linux的文件权限分为读(r)、写(w)、执行(x)三种,分别对应文件所有者、所属组、其他用户三类主

体。权限管理不当是数据泄露的常见原因:配置文件被全局可读、私钥权限过松、日志文件被篡改,这些问题在实

际环境中非常普遍。

权限数字文件含义目录含义

r4可以读取文件内容可以列出目录内容

w2可以修改文件内容可以在目录中创建/删除文件

x1可以执行文件可以进入目录

#==========常用权限设置==========

#600:只有所有者可读写(用于私钥、密码文件)

chmod600~/.ssh/id_ed25519

#644:所有者可读写,其他只读(用于配置文件、公钥)

chmod644~/.ssh/id_ed25519.pub

#700:只有所有者可读写执行(用于目录、脚本)

chmod700~/.ssh

#755:所有者可读写执行,其他可读执行(用于可执行文件)

chmod755/usr/local/bin/script.sh

#640:所有者可读写,组内只读(用于日志)

chmod640/var/log/app.log

#==========重要文件的推荐权限==========

#/etc/passwd644

#/etc/shadow640或600

#/etc/group644

#/etc/gshadow640或600

#/etc/sudoers440

#/etc/ssh/sshd_config600

#~/.ssh/700

#~/.ssh/authorized_keys600

#~/.ssh/id_ed25519600

#==========修改文件所有权==========

chownuser:groupfile

chown-Ruser:groupdirectory

#==========设置SGID让新文件继承目录组==========

chmodg+s/shared/directory

#之后在/shared/directory中创建的文件会自动属于该目录的组

5.2敏感文件保护

#==========查找全局可读的敏感文件==========

#查找所有名字包含password、secret、key的文件

sudofind/-typef\(-iname"*password*"-o-iname"*secret*"-o-iname"*.key"-o-

iname"*credential*"\)2>/dev/null|head-50

#检查这些文件的权限

sudofind/-typef-perm-0004\(-iname"*password*"-o-iname"*secret*"\)

2>/dev/null

#==========常见的敏感文件位置==========

#/etc/shadow系统密码哈希

#/etc/ssh/ssh_host_*_keySSH主机私钥

#~/.ssh/id_*用户私钥

#~/.aws/credentialsAWS凭证

#~/.kube/configKubernetes配置

#~/.docker/config.jsonDocker凭证

#~/.git-credentialsGit凭证

#~/.npmrcnpmtoken

#~/.netrc网络凭证

#.env应用环境变量

#config/database.yml数据库配置

#==========使用.gitignore保护敏感文件==========

cat>.gitignore<

5.3文件完整性监控

攻击者在入侵系统后通常会修改系统文件:植入后门、替换系统命令、修改启动脚本。文件完整性监控

(FIM)可以检测这些异常修改,是发现入侵的关键手段。

#==========使用AIDE进行文件完整性检查==========

#安装

sudoaptinstallaide#Debian/Ubuntu

sudoyuminstallaide#RHEL/CentOS

#初始化数据库(首次运行会创建基线)

sudoaideinit

#或手动初始化

sudoaide--init

sudomv/var/lib/aide/aide.db.new/var/lib/aide/aide.db

#执行检查(对比当前状态与基线)

sudoaide--check

#更新基线(确认修改合法后)

sudoaide--update

#==========AIDE配置文件==========

#/etc/aide/aide.conf

#常用监控规则:

#/binNORMAL#完整检查

#/sbinNORMAL

#/libNORMAL

#/usrNORMAL

#/etcPERMS#只检查权限和所有者

#!/var/log#排除日志目录

#!/tmp#排除临时目录

#==========使用Tripwire(企业级方案)==========

#相比AIDE,Tripwire提供了更完善的策略管理和报告功能

sudoaptinstalltripwire

#初始化

sudotripwire--init

#执行检查

sudotripwire--check

#更新数据库

sudotripwire--update--accept-all

#==========定期检查系统关键文件==========

#检查/etc/passwd是否被修改

#检查/root/.ssh/authorized_keys是否被添加了异常公钥

#检查crontab是否被添加了恶意任务

#检查systemd服务是否被添加

#一次性检查脚本示例

echo"===检查authorized_keys==="

foruserin$(cut-d:-f1,6/etc/passwd|grep-E"/home|/root"|cut-d:-f1);do

home=$(getentpasswd"$user"|cut-d:-f6)

if[-f"$home/.ssh/authorized_keys"];then

echo"用户$user:"

cat"$home/.ssh/authorized_keys"

fi

done

echo"===检查crontab==="

foruserin$(cut-d:-f1/etc/passwd);do

crontab-u"$user"-l2>/dev/null|grep-v"^#"|grep-v"^$"&&echo"↑用户

$user的crontab"

done

echo"===检查系统crontab==="

ls-la/etc/cron.*/

5.4磁盘加密

对于包含敏感数据的服务器,磁盘加密可以防止物理层面的数据泄露。即使硬盘被拆除、被窃取,没有

密钥也无法读取数据。

#==========使用LUKS加密磁盘==========

#安装工具

sudoaptinstallcryptsetup

#加密新磁盘(会清空数据)

sudocryptsetupluksFormat/dev/sdb

#打开加密设备(会要求输入密码)

sudocryptsetupluksOpen/dev/sdbencrypted_volume

#格式化

sudomkfs.ext4/dev/mapper/encrypted_volume

#挂载

sudomkdir/mnt/encrypted

sudomount/dev/mapper/encrypted_volume/mnt/encrypted

#关闭加密设备

sudoumount/mnt/encrypted

sudocryptsetupluksCloseencrypted_volume

#==========使用密钥文件(自动化解锁)==========

#生成密钥文件

ddif=/dev/urandomof=/root/luks.keybs=512count=8

#添加密钥到LUKS

sudocryptsetupluksAddKey/dev/sdb/root/luks.key

#设置密钥文件权限

sudochmod600/root/luks.key

#==========加密云盘==========

#大多数云平台支持创建加密云盘

#在创建云盘时勾选"加密"选项

#加密由云平台管理,对应用透明

#==========文件级加密==========

#使用GPG加密单个文件

gpg--symmetric--cipher-algoAES256sensitive.txt

#生成sensitive.txt.gpg

#解密

gpg--decryptsensitive.txt.gpg>sensitive.txt

#使用openssl加密

opensslenc-aes-256-cbc-pbkdf2-salt-insensitive.txt-outsensitive.txt.enc

opensslenc-d-aes-256-cbc-pbkdf2-insensitive.txt.enc-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论