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 = [帐号名]