Linux系统基线检查
1查询系统信息
1. Linux 查看内核版本(大于2.6)(I级)
1 | uname -a |
2. Linux 查看系统版本
1 | lsb_release -a |
2身份鉴别
1. 系统是否存在重复的 UID(II级)
UID(UserID)
——用户标识号,它与用户名唯一对应,Linux
以 UID
作为用户的唯一标识,Linux
中超级用户 root
的 UID
为 0
,可以直接使用 id
命令查看当前用户的 UID
。可以查看 passwd
文件以查看所有用户的 UID
等基本信息:
1 | vim /etc/passwd |
3密码审查
密码的生命周期最大为 90 天(III级)
密码可以被立即修改(III级)
密码的最小长度为 8 位(III级)
密码到期的提醒,一般建议 7 天(III级)
查看并修改 login.defs
文件:
1 | vim /etc/login.defs |
检查并修改如下内容:
1 | PASS_MAX_DAYS 90 #一个密码可使用的最大天数 |
4访问控制
1. 系统已设定了正确的 umask 值 022 (III级)
umask
用于指定目前用户在建立文件或目录时的权限默认值,umask
设置的是权限值的“补码”,而我们常用的chmod
设置的是文件权限码,默认情况下的 umask
值是022
(可以用umask
命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2)
,建立的目录的默认权限是755(7-0,7-2,7-2)
。
2. 锁定系统中不必要的用户(IV级)
使用 passwd
命令锁定、解锁和检查 Linux 中用户账户的状
1 | passwd -l username #锁定用户账户 |
使用 usermod
命令锁定
、解锁和检查 Linux
中用户账户的状态:
1 | usermod --lock username #锁定用户账户 |
可以通过查看 /etc/shadow 文件来检查用户锁定状态,如果用户账户被锁定,密码前面将添加感叹号。
3. 删除不必要的系统用户组(IV级)
1 | groupdel groupname |
这个命令将会从 /etc/group
和 /etc/gshadow
文件中移除用户组条目,且成功时不会打印任何输出。可以通过使用下面的命令来验证用户组是否被移除:
1 | getent group |
4. 禁止 root 用户远程登录(II级)
通过修改 /etc/ssh/sshd_congig
文件,将其中的 PermitRootLogin
改成 no
,然后重新启动 ssh
服务就可以了:
1 | systemctl restart sshd.service |
5. 系统重要文件访问权限是否为 644 或 600(II级)
5安全审计
1. 系统是否启用安全审计(III级)
Linux audit
子系统是一个用于收集记录系统、内核、用户进程发生的行为事件的一种安全审计系统,该系统可以可靠的收集有关的任何与安全相关(或与安全无关)事件的信息,它可以帮助跟踪系统上执行过的一些操作。
1 | auditctl -s #查看系统是否启用 audit,enabled 值为 1 表示开启 |
开启了 auditd
服务后,所有的审计日志会被记录在 /var/log/audit/audit.log
文件中,该文件记录格式是每行以 type
开头。
2. 是否启用审计策略(III级)
一般针对系统的目录、退出、创建/删除目录、修改密码、添加组、计划任务等。audit
可以自定义对指定的文件或命令进行审计(如监视 rm
命令被执行、/etc/passwd
文件内容被改变),只要配置号对应规则即可,配置规则可以通过命令行(临时生效)或编辑配置文件(永久生效)两种方式实现。auditd
的配置文件为 /etc/audit/audit
下的 auditd.conf
和 audit.rules
, auditd.conf
主要定义了 auditd
服务日志的性能等相关配置,audit.rules
才是定义规则的文件。
6剩余价值保护
1. 系统的命令行数是否保存为 30 条(IV级)
1 | echo $HISTSIZE #查看历史命令保存条数 |
修改历史命令保存条数,修改 /etc/profile
中的 HISTSIZE
变量即可。
7不必要服务启动项
1. chargen/chargen-udp、daytime/daytime-udp、echo/echo-udp、time/time-udp 等服务已被禁用(III级)
chargen
服务:最初设计用于测试网络状态,监听19
端口(包括TCP
和UDP
),其中UDP
协议存在“Chargen UDP服务远程拒绝服务攻击漏洞
”。chargen
一般不会使用,所以直接将该服务关闭即可。
daytime
服务:使用TCP
协议的 Daytime
守护进程,该协议为客户机实现从远程服务器获取日期和时间的功能。daytime-udp
服务:使用 UDP
协议的 Daytime
守护进程。
echo
服务:使用 TCP
协议的服务器回显服务守护进程;echo-udp 服
务:使用 UDP
协议的服务器回显服务守护进程。
time
服务:采用 TCP
协议的从远程主机获取时间和日期的守护进程;time-udp
服务: 是一种基于 UDP
协议进行通信的服务,它用于向远程主机发送时间戳信息。当客户端向 time-udp
服务请求时间戳时,服务器会返回当前时间的二进制表示形式,以方便对时间的比较和计算。由于 time-udp
服务的实现相对简单,因此在网络诊断和调试中经常用于测试网络传输延迟和响应时间。
2. cpus-lpd 服务已被禁用(III级)
cups
服务:通用 UNIX
打印守护进程,为Linux
提供第三代打印功能;cups-lpd
服务:cups
行打印守护进程。
3. finger 服务已被禁用(III级)
finger
服务:finger
服务器提供一项查询本地或远程主机用户公开信息的服务。
4. rexec 服务已被禁用(III级)
rexec
服务:允许网络用户远程执行命令。由于rexecd
并没有提供好的认证方式,认证体系相当简单而易受攻击,因此它可能被攻击者用来扫描第三方的主机,攻击者可以通过该服务远程暴力穷举猜测用户名、口令,也可以监听其它授权用户的通信过程以获取口令明文,可以使用nmap
等工具进行扫描检测。
5. rlogin 服务已被禁用(III级)
rlogin
服务:远程登陆服务,通过 rlogin
命令,可以登录到远程系统。rlogin
服务的认证体系相当简单而易受攻击,攻击者可以通过该服务远程暴力穷举猜测用户名、口令,也可以监听其它授权用户的通信过程以获取口令明文。
6. rsh 服务已被禁用(III级)
rsh
服务:远程 shell
服务,通过 rsh
命令,可以在指定的远程主机上启动一个 shell 并执行用户在 rsh
命令行中指定的命令,如果用户没有给出要执行的命令,rsh
就用 rlogin
命令使用户登录到远程机上。
7. rsync 服务已被禁用(II级)
rsync
服务:远程数据同步服务,通过 rsync
命令,可以通过LAN/WAN
快速同步多台主机间的文件。rsync
使用所谓的“rsync算法”
来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
8. ntalk 服务已被禁用(III级)
ntalk
服务:网络交谈(ntalk)
,远程对话服务和客户。
9. talk 服务已被禁用(III级)
talk
服务:远程对话服务和客户。
10. wu-ftpd 服务已被禁用(II级)
Wu-ftpd
服务:Internet
上最流行的FTP
守护程序。Wu-ftpd
功能十分强大,可以构建多种类型FTP
服务器。Wu-ftpd
菜单可以帮助用户轻松地实现对FTP服务器的配置:支持构造安全方式的匿名FTP
的访问,可以控制同时访问的用户的数量,限制可以允许访问的IP
网段,并可以在一台主机上设置多个虚拟目录。
11. tftp 服务已被禁用(III级)
tftp
服务:TCP/IP
协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。基于 UDP
协议实现,端口号为69
。
12. ipop2 服务已被禁用(III级)
ipop2
服务:POP2
邮件服务器。
13. ipop3 服务已被禁用(III级)
ipop3
服务:POP3
邮件服务器。
14. telnet 服务已被禁用(III级)
telnet
服务:Internet
远程登录服务。
15. xinetd 服务已被禁用(IV级)
xinted
服务:新一代的网络守护进程服务程序,又叫超级Internet
服务器,常用来管理多种轻量级Internet
服务。
8其它配置检查
1. 系统已经加固了 TCP/IP 协议栈(IV级)
检查/etc/sysctl.conf
是否存在以下内容:
1 | net.ipv4.tcp_max_syn_backlog=4096 |
2. 系统禁用 X-Windows 系统(III级)
3. 移动介质使用 nosuid 挂载(IV级)
检查与 /etc/fstab
文件夹、/dev/floppy
和 /dev/cdrom
相关的条目
4. /tmp 和 /var/tmp 目录具有粘滞位(II级)
1 | ls -al/ | grep tmp |
5. root PATH 环境变量,不包含当前目录(II级)
1 | echo $PATH |