Secure-Linux
Linux 加固+维护+应急响应参考文档内容仅限 Linux ,web 服务和中间件的加固内容请看加固
大纲
文件
可疑文件
文件恢复
系统
密码重置
会话
开机启动
账号
SELinux
进程
系统完整性
日志
Net
端口
Firewall
禁ping
SSH
文件共享
加固
文件
可疑文件
最近文件
临时文件
配置文件
文件恢复
一点建议 : 业务系统,rm 删除后,没有立即关机,运行的系统会持续覆盖误删数据.所以对于重要数据,误删后请立即关机
如果被误删的文件在根分区,那么你最好重启计算机,进入单用户模式,以只读的方式挂载根分区,然后再进行恢复.
进入单用户模式后,根分区还是以读写方式 mount 的,用下面的命令,把挂载方式由读写(rw)改为只读(ro): mount -o ro,remount /
如果被删除的文件不是根分区,也可以用 unmount 的方式将该分区卸载.假设文件在分区 /dev/sda3中,该分区挂载到 /home,那么我们用下面的命令来卸载: umount /dev/sda3
当然,在卸载前要保证没有程序在访问该分区,否则卸载会失败.所以,一般推荐进入单用户模式来恢复文件.
安装
访问 https://code.google.com/archive/p/ext3grep/downloads 下载源代码,这里以 ext3grep-0.10.2.tar.gz 为例
如果 make 出错,修改 src/ext3.h
使用
在开始恢复前,选择一个目录来存放被恢复的文件.ext3grep 程序会在当前目录下创建一个名为 RESTORED_FILES 的目录来存放被恢复的文件.因此在运行 ext3grep 命令前,先要切换到一个你可读写的目录中.
因为进入了单用户模式,并且将根分区设成了只读,那么只能把恢复出来的文件放在U盘中了.因此,先 cd /mnt 进入U盘目录.如果你有幸记得你误删除的文件名及其路径的话,就可以直接用下面的命令进行恢复了:
binlog
开启 Binlog,让 ext3grep 从 Binlog 中恢复,对数据库场景有用.
系统
密码重置
centos7
在启动菜单选择启动内核,按 e 编辑,找到 rhgb quiet 一行,把
rhgb quiet替换为init=/bin/bash(临时生效)按
CTRL+X进入单用户模式挂载根文件系统:
mount -o remount,rw /使用
passwd命令直接设置 root 密码:passwd root输入两次新密码.最后,执行如下命令更新 SELinux:
touch /.autorelabel进入正常模式:
exec /sbin/init现在可以使用新设置的 root 密码登录了.
Ubuntu14
方案一
重启电脑长按 shift 键直到进入进入 GRUB 引导模式,选择第二行 Ubuntu 高级选项, 选中直接回车
按 e 进入(recovery mode) 编译kernel进行启动参数
倒数第四行,删除
recovery nomodeset,添加quiet splash rw init=/bin/bash。然后按 F10, 启动。运行后系统直接进入 root mode,输入:
passwd
方案二
重启电脑长按 shift 键直到进入进入 GRUB 引导模式,选择第二行 Ubuntu 高级选项, 选中直接回车
选择一个括号里是 recovery mode 的系统发行编号,回车进入
选择 root 项,回车
最下方输入 root 密码,回车,便会切换到 root 用户;此时需要输入此条命令
mount -o remount,rw /回车,再用passwd 用户名便可以修改密码了;继续输入
exit返回,选中resume,回车,此时会跳出一个确认界面,再回车即可
会话
查
防
修改账户超时值,设置自动注销时间
命令记录
进入 /home 各帐号目录下的 .bash_history 查看普通帐号的历史命令
history优化
开机启动
查看开机启动服务
查看计划任务
账号
异常查找
异常设置
/etc/passwd
若用户 ID=0,则表示该用户拥有超级用户的权限
检查是否有多个 ID=0
禁用或删除多余的账号
/etc/login.defs
当查到异常用户时,需要立即禁用
安全配置
设置账户锁定登录失败锁定次数、锁定时间
安全审计
audit
linux audit 子系统是一个用于收集记录系统、内核、用户进程发生的行为事件的一种安全审计系统。该系统可以可靠地收集有关上任何与安全相关(或与安全无关)事件的信息,它可以帮助跟踪在系统上执行过的一些操作。
audit 和 syslog 有本质区别。syslog 记录的信息有限,主要目的是软件调试,对于用户的操作行为(如某用户修改删除了某文件)却无法通过这些日志文件来查看。而 audit 的目的则不同,它是 linux 安全体系的重要组成部分,是一种 “被动” 的防御体系。
audit 安装后会生成 2 个配置文件:
/etc/audit/auditd.conf
/etc/audit/audit.rules
具体配置信息请查看 文件
audit 常用命令
SELinux
关闭 SELinux
需要重启
不需要重启
setenforce 0
进程
进程定位
进程限制
负载
文章
查询负载、进程监控
清理缓存
系统完整性
通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包,查看哪些命令是否被替换了
还原替换命令
日志
系统日志
内容见 日志
对于日志文件的保护
web日志
内容见 取证 中间件服务器程序日志部分
数据库日志
内容见 取证 数据库取证部分
Net
端口
查
更多内容查看 网络
防
Firewall
查
防
在上面的配置中,如果有人尝试从 1.1.1.1 去 ssh,这个请求将会成功,因为这个源区域(internal)被首先应用,并且它允许 ssh 访问.
如果有人尝试从其它的地址,如 2.2.2.2,去访问 ssh,它不是这个源区域的,因为和这个源区域不匹配.因此,这个请求被直接转到接口区域(public),它没有显式处理 ssh,因为,public 的目标是 default,这个请求被传递到默认动作,它将被拒绝.
如果 1.1.1.1 尝试进行 http 访问会怎样?源区域(internal)不允许它,但是,目标是 default,因此,请求将传递到接口区域(public),它被允许访问.
现在,让我们假设有人从 3.3.3.3 拖你的网站.要限制从那个 IP 的访问,简单地增加它到预定义的 drop 区域,正如其名,它将丢弃所有的连接:
下一次 3.3.3.3 尝试去访问你的网站,firewalld 将转发请求到源区域(drop).因为目标是 DROP,请求将被拒绝,并且它不会被转发到接口区域(public).
注:配置了 firewalld 服务后一定要去检查下规则,因为他不会阻掉正在进行的连接,只能阻掉配置命令后进行的连接,所以你不知道你的ssh会话会不会一断就再也连不上了,血的教训🤣
iptable
查询表中的规则
查看不同的链中的规则
nftables
查看规则汇总
nft表管理
nft链管理
添加规则
删除规则
自动重载
禁ping
临时性,重启后失效
长期性
或
sysctl -p 使新配置生效
SSH
文章
查
查询可以远程登录的帐号信息
查看尝试暴力破解机器密码的人
查看暴力猜用户名的人
IP 信息
登录成功
私钥
防
更改默认端口
修改
/etc/ssh/sshd_config文件,将其中的 Port 22 改为指定的端口!!! 警告,记得防火墙要先放行端口,不然你的远程主机就连不上了🤣!!!配置使用 RSA 私钥登录
先生成你的客户端的密钥,包括一个私钥和公钥
把公钥拷贝到服务器上,注意,生成私钥的时候,文件名是可以自定义的,且可以再加一层密码,所以建议文件名取自己能识别出哪台机器的名字.
然后在服务器上,你的用户目录下,新建
.ssh文件夹,并将该文件夹的权限设为 700新建一个 authorized_keys,这是默认允许的 key 存储的文件.如果已经存在,则只需要将上传的 id_rsa.pub 文件内容追加进去即可,如果不存在则新建并改权限为 400 即可. 然后编辑 ssh 的配置文件
service sshd restart重启 sshd 服务测试使用私钥登录
禁止 root 用户登录
可以建一个用户来专门管理,而非直接使用 root 用户,修改 /etc/ssh/sshd_config
使用 Fail2ban
fail2ban ,详细搭建步骤请移步 Power-Linux
SSH 陷阱
skeeto/endlessh - 蓝队 SSH 陷阱
文件共享
NFS服务
配置文件
TFTP服务
配置文件
samba服务
配置文件
加固
查后门
相关文章
添加 root 权限后门用户
检查 /etc/passwd 文件是否有异常
vim 后门
检测对应 vim 进程号虚拟目录的 map 文件是否有 python 字眼.
查看连接情况 netstat -antlp
例如发现 vim pid 为 12
strace 记录
通过排查 shell 的配置文件或者 alias 命令即可发现,例如 ~/.bashrc 和 ~/.bash_profile 文件查看是否有恶意的 alias 问题.
定时任务和开机启动项
一般通过 crontab -l 命令即可检测到定时任务后门.不同的 linux 发行版可能查看开机启动项的文件不大相同,Debian 系 linux 系统一般是通过查看 /etc/init.d 目录有无最近修改和异常的开机启动项.而 Redhat 系的 linux 系统一般是查看 /etc/rc.d/init.d 或者 /etc/systemd/system 等目录.
预加载型动态链接库后门 ld.so.preload
通过 strace 命令去跟踪预加载的文件是否为 /etc/ld.so.preload ,以及文件中是否有异常的动态链接库.以及检查是否设置 LD_PRELOAD 环境变量等.注意:在进行应急响应的时候有可能系统命令被替换或者关键系统函数被劫持(例如通过预加载型动态链接库后门),导致系统命令执行不正常,这个时候可以下载 busybox.下载编译好的对应平台版本的 busybox,或者下载源码进行编译通过U盘拷贝到系统上,因为 busybox 是静态编译的,不依赖于系统的动态链接库,busybox 的使用类似如下 busybox ls,busybox ps -a.
内核级 rootkit
可以通过 unhide 等工具进行排查,更多内容见 应急
深信服 Web 后门扫描
http://edr.sangfor.com.cn/backdoor_detection.html
杀毒
配置 pam.d 策略
pam
认证