Linux 安全——物理安全
Table of Contents
考虑在能够接触到物理机的情况下,怎样去加强 GNU/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 的绝对路径。
但是多数 GNU/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 启动 GNU/Linux 来进入 Rescue 模式,编辑和访问系统的数据,比如编辑 grub.cfg 来去掉密码验证等。
虽然可以在 BIOS 里设置 BIOS 密码来防止,但 BIOS 毕竟是靠电池维护配置的,可以通过为电池放电来清空密码,所以最好还是为磁盘加密。
4.1. LUKS(Linux Unified Key Setup)
使用 LUKS 的步骤如下:
1、如果待加密分区已有数据,请做备份,因为要对分区做格式化。
2、格式化成加密分区:
sudo cryptsetup luksFormat /dev/sdb
3、在加密分区的基础上建立文件系统:
sudo cryptsetup luksOpen /dev/sdb data # 先挂载加密分区,data 为分区名 sudo mkfs.ext4 /dev/mapper/data # 在此基础上建立文件系统,如 ext4
以上步骤完成以后,就能正常使用加密分区了:
1、挂载分区(桌面环境操作的话,可以自动完成下面的挂载步骤):
sudo cryptsetup luksOpen /dev/sdb data sudo mount /dev/mapper/data /data
2、卸载挂载点:
sudo umount /data sudo cryptsetup luksClose [分区名]
3、设置成开机自动挂载,在 /etc/crypttab 增加:
data /dev/sdb none luks
修改fstab:
/dev/mapper/data /data ext4 defaults 0 0
5. 系统账户安全
- 不直接使用 root 帐号,用 sudo 代替
- root 账户设置高强度密码,并且密码不和其他账户相同
- 只允许 root 的 UID 为 0
- 一个服务一个账号,且帐号不可登录
- 禁用自动登录,比如在 Debian 中,注释掉 /etc/gdm3/daemon.conf 中以下配置:
AutomaticLoginEnable = true AutomaticLogin = [帐号名]