Secure-Linux

  • Linux 加固+维护+应急响应参考

  • 文档内容仅限 Linux ,web 服务和中间件的加固内容请看 加固


大纲

  • 文件

    • 可疑文件

    • 文件恢复

  • 系统

    • 密码重置

    • 会话

    • 开机启动

    • 账号

    • SELinux

    • 进程

    • 系统完整性

    • 日志

  • Net

    • 端口

    • Firewall

    • 禁ping

    • SSH

    • 文件共享

  • 加固


文件

可疑文件

最近文件

临时文件

配置文件


文件恢复

一点建议 : 业务系统,rm 删除后,没有立即关机,运行的系统会持续覆盖误删数据.所以对于重要数据,误删后请立即关机

foremostarrow-up-right

extundeletearrow-up-right

ext3greparrow-up-right

如果被误删的文件在根分区,那么你最好重启计算机,进入单用户模式,以只读的方式挂载根分区,然后再进行恢复.

进入单用户模式后,根分区还是以读写方式 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

  1. 在启动菜单选择启动内核,按 e 编辑,找到 rhgb quiet 一行,把 rhgb quiet 替换为 init=/bin/bash (临时生效)

  2. CTRL+X 进入单用户模式

  3. 挂载根文件系统: mount -o remount,rw /

  4. 使用 passwd 命令直接设置 root 密码: passwd root 输入两次新密码.

  5. 最后,执行如下命令更新 SELinux: touch /.autorelabel

  6. 进入正常模式: exec /sbin/init 现在可以使用新设置的 root 密码登录了.

Ubuntu14

  • 方案一

    1. 重启电脑长按 shift 键直到进入进入 GRUB 引导模式,选择第二行 Ubuntu 高级选项, 选中直接回车

    2. 按 e 进入(recovery mode) 编译kernel进行启动参数

    3. 倒数第四行,删除 recovery nomodeset ,添加 quiet splash rw init=/bin/bash 。然后按 F10, 启动。

    4. 运行后系统直接进入 root mode,输入:passwd

  • 方案二

    1. 重启电脑长按 shift 键直到进入进入 GRUB 引导模式,选择第二行 Ubuntu 高级选项, 选中直接回车

    2. 选择一个括号里是 recovery mode 的系统发行编号,回车进入

    3. 选择 root 项,回车

    4. 最下方输入 root 密码,回车,便会切换到 root 用户;此时需要输入此条命令 mount -o remount,rw / 回车,再用 passwd 用户名 便可以修改密码了;

    5. 继续输入 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 私钥登录

    1. 先生成你的客户端的密钥,包括一个私钥和公钥

    2. 把公钥拷贝到服务器上,注意,生成私钥的时候,文件名是可以自定义的,且可以再加一层密码,所以建议文件名取自己能识别出哪台机器的名字.

    3. 然后在服务器上,你的用户目录下,新建 .ssh 文件夹,并将该文件夹的权限设为 700

    4. 新建一个 authorized_keys,这是默认允许的 key 存储的文件.如果已经存在,则只需要将上传的 id_rsa.pub 文件内容追加进去即可,如果不存在则新建并改权限为 400 即可. 然后编辑 ssh 的配置文件

      service sshd restart 重启 sshd 服务

    5. 测试使用私钥登录

  • 禁止 root 用户登录

    可以建一个用户来专门管理,而非直接使用 root 用户,修改 /etc/ssh/sshd_config

  • 使用 Fail2ban

  • 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


杀毒

ClamavNetarrow-up-right


配置 pam.d 策略

  • pam

  • 认证