Linux Host Review
环境配置
虚拟机
- Debian x64
- Host-Only 网络
- Linux-Apache-MySQL-PHP (LAMP)
实验目的是检查 Linux 服务器配置,确保安全配置并进行加固。
本实验基于 Debian 6 ,已经停止了常规安全更新支持(目前都 Debian 9 了…也说明这实验已经很久了23333),不过对主机进行审查的思路大致上是不变的,只是在新版本系统中的一些操作或内容可能会有所改动。
主机审查
系统角色
系统的用途不同将使用不同的安全模型,比如 Web 服务器系统和内网文件系统就具有完全不同的安全需求。
实验系统是一个 Web 服务器,用于提供基于 PHP 的 Web 应用程序(WordPress)。
访问权限
主机审查需要有 root 权限或相同权限的账户,使用 sudo -s
获得 root 访问权限。
自动部署
目前已有许多 Web 应用程序使用自动部署,本博客也使用了 Travis-CI 进行自动部署。
日志
首先确保使用 SSH 连接到虚拟机,然后使用 screen
生成操作日志记录,完成后使用 scp
导出记录。
1 | # 切换目录 |
系统审查
内核
根据内核版本检查安全漏洞,可以在 Debian 官网上查阅安全信息,也可以参阅 CVE-Linux-Kernel-Security Vulnerabilities 列表。
1 | # 查看内核版本 |
参阅
时间
时间同步的重要性可想而知,基于时间的操作包括日志记录,身份认证等等。本人自建自用的 VPN 服务也必须确保时间同步,更别说搭载应用服务的服务器了。
实验指导建议不要使用夏令时时区,以避免时间跳跃(顺便了解了一下夏时制,貌似全球使用的地区也不多)。
1 | # 查看时区设置 |
参阅
- 网络时间协议
- Network Time Protocol Version 4: Protocol and Algorithms Specification
- 夏时制
- What is /etc/timezone used for?
- Configure the time zone (TZ) on Linux systems
- ntpdate(8) - Linux man page
安装的软件包
系统上应该保证不安装不必要的包,避免增加产生漏洞的可能性。对于自用的电脑也是同样的道理,(虽然可能是个人的强迫症)定期清理掉不使用的软件、文件,同时定期检查和更新软件。
Web 应用程序通常会使用许多第三方组件,而有的时候 Web 应用程序的漏洞就来自组件,因此非常有必要定期进行检查和更新。
1 | # 查看安装的软件包 |
参阅
日志
日志的内容就比较多,系统、网络、服务等理应都有日志记录,Linux 中的系统日志为 syslog,可以使用 rsyslog
进行查看和处理(这里暂时不作展开)。
1 | # 查看系统进程 |
参阅
网络审查
首先可以查看基本的网络信息,包括网卡、路由、DNS 配置等。
1 | # 查看所有网卡 |
防火墙规则
最基本可以的使用 iptables
进行查看和配置,需要使用 root 权限。顺便推一个本人《网络安全》课程中做过的 实验 。
1 | # 查看防火墙规则 |
参阅
IPv6
虽然知道 IPv6 但基本没有使用过(或者其实自己不知道在使用)。
1 | # 查看 IPv6 防火墙规则 |
参阅
文件系统审查
挂载
/etc/fstab
配置文件定义了文件系统的挂载规则,印象中曾尝试用来挂载 CD 文件。
1 | # 查看挂载信息 |
参阅
敏感文件
文件系统中的权限非常重要,包括读写执行,诸如包含敏感信息或配置信息的敏感文件必须限制权限。
提到敏感文件就想到 /etc/shadow
,保存了系统的用户名和密码(散列值);对于 Web 应用程序,配置和密钥也都是敏感文件。
参阅
文件权限
用 ls -l
就可以查看当前目录文件的权限,用字母表示包括 r(read),w(write),x(execute),特殊的标志位有 s(setuid),t(sticky)。
1 | # 显示当前目录的文件列表 |
使用 chmod
修改权限,使用字母或数字都可以
- 字母
u
:文件所有者g
:文件所有者的用户组o
:其他用户a
:所有,即ugo
- 数字
r
= 4w
= 2x
= 1
1 | # 设置文件所有者的用户组的权限为读写,+增加权限,-减少权限,=设置权限 |
参阅
- File permissions and attributes
- File Permissions in Linux/Unix with Example
- SetUID, SetGID, and Sticky Bits in Linux File Permissions
普通权限文件
使用 find
检索所有用户可读可写的文件
1 | # 路径 / |
参阅
服务审查
运行的服务
查看系统进程,通常可以使用 lsof
命令,需要使用 root 权限。
1 | # 查看系统进程 |
参阅
实验中需要关注的服务
实验基于 LAMP ,因此 Apache、MySQL、PHP 都需要关注,不过并没有没有深入进行分析。
OpenSSH
为了提供 SSH 连接服务,使用了 OpenSSH ,其配置文件位于 /etc/ssh
目录下。实验中主要防止 root 用户直接远程连接,即将 PermitRootLogin
配置为 no
,同时使用 SSH 版本2 protocol 2
,修改配置文件 sshd_config
。
MySQL
MySQL 无需监听所有网卡,设置为监听本地即可,修改配置文件 /etc/mysql/my.cnf
1 | [mysqld] |
然后重启 MySQL 即可生效,实验中使用的是 MySQL 5.6 ,目前已经更新到 8.0 版本,部分命令和变量有所改变,不作展开,其余同理。
官方给出的安全指南(MySQL 8.0):Chapter 6 Security
Apache
Apache 配置文件为 /etc/apache2/apache2.conf
,实验中检查 Web 应用程序目录及文件的权限。
1 | ls -lR /var/www/wordpress |
官方提供的安全建议(Apache 2.4):Security Tips
PHP
实验中的 PHP 以 Apache 模块方式安装,/etc/apache2/mods-enabled/
目录下可以查看相关配置文件。
官方安全介绍:PHP 手册 - 安全