Linux 安全——物理安全
Table of Contents
考虑在能够接触到物理机的情况下,怎样去加强 Linux 的安全。
1 BIOS 加密
在 BIOS 中,设置开机加密。
2 Single User Mode(单用户模式)加密
什么是单用户模式?
以 CentOS 为例,在 GRUB 启动时按“e”编辑启动项,Linux 内核参数后面加上“s”或者“emergency.target”,前者是进入单用户模式,后者是进入Emergency Mode(应急模式)。
很多发行版进入这两模式时是不需要密码的,如果能物理接触系统,就可以通过这个方式重置 root 密码。
可以开启进入单用户模式时,需要密码验证。在用 Systemed 的发行版中,编辑以下俩文件:
/lib/systemd/system/emergency.service /lib/systemd/system/rescue.service
把 ExecStart 里 sushell 改成 sulogin 即可。
有些老系统,把 /etc/sysconfig/init 里 SINGLE 项改成 sulogin 的绝对路径。
但是多数 Linux 发行版(如Ubuntu)在安装过程中会让创建一个新账号,而避免 root 账号,所以默认 root 账号可能是空密码,空密码可以直接进入单用户模式的,所以系统安装好后记得为 root 设置密码。
3 加密 GRUB(防止修改内核参数)
即便单用户模式需要密码登录,我们仍旧可以绕过,启动时编辑 GRUB 菜单,设置内核启动参数:
init = /bin/bash
来改变内核后的 init 程序,这样又可以绕过权限限制了。
目前要做的就是为 GRUB 加密,以 CentOS7 为例,编辑 /etc/grub.d/40_custom,新增:
set superusers="root" password root root
然后执行:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
4 加密磁盘
即使加密了 GRUB,也可以通过借助 DVD 启动 Linux 来进入 Rescue 模式,编辑和访问系统的数据,比如编辑 grub.cfg 来去掉密码验证等。
虽然可以在 BIOS 里设置 BIOS 密码来防止,但 BIOS 毕竟是靠电池维护配置的,可以通过为电池放电来清空密码,所以最好还是为磁盘加密。
4.1 LUKS(Linux Unified Key Setup)
sudo cryptsetup luksFormat /dev/sdb sudo cryptsetup luksOpen /dev/sdb www # 这歩是手动挂载,取消挂载用 luksClose mkfs.ext4 /dev/mapper/www mkdir /www
修改/etc/crypttab,增加:
www /dev/sdb none luks
修改fstab:
/dev/mapper/www /www ext4 defaults 0 0
5 系统账户安全
- 不直接使用 root 帐号,用 sudo 代替
- root 账户设置高强度密码,并且密码不和其他账户相同
- 只允许 root 的 UID 为 0
- 一个服务一个账号,且帐号不可登录
- 禁用自动登录,比如在 Debian 中,注释掉 /etc/gdm3/daemon.conf 中以下配置:
AutomaticLoginEnable = true AutomaticLogin = [帐号名]