在U盘安装加密的Linux系统

适用场景:外出需要电脑,却没有携带自己的电脑,且不能信任能找到的电脑的环境;不想在外泄漏隐身;不是自己想使用的系统/环境。

教程目标:制作一个可以保留更改的运行Linux的U盘,加密根目录(boot除外),开机可以选择ramroot模式启动(将整个Linux系统加载在内存,适合在大内存机器且不想保留更改时使用)

需要的东西:

需要用到的软件/命令:

开始

以下过程默认在root用户下运行

配置分区

这里就简单说下如何分区,至于用什么工具分区随你喜欢

这里的/dev/sdb将在之后的教程当作U盘使用(请自己注意更换)

分区类型:dos,以下分区皆为主分区(primary)
分区-------->挂载点-->大小--->类型
/dev/sdb1--->/boot--->128M--->EFI Filesystem(需要设置为可启动(bootable))
/dev/sdb2--->/------->Free--->Linux

创建加密LUKS(需要输入大写yes然后输入你的密码/口令):

cryptsetup luksFormat --type luks2 /dev/sdb2

打开LUKS并创建配置LVM(需要输入密码/口令):

cryptsetup open --type luks2 /dev/sdb2 cryptlvm
pvcreate /dev/mapper/cryptlvm
vgcreate System /dev/mapper/cryptlvm
lvcreate -L 8G System -n root # 这里是根分区,一般8G够用
lvcreate -l 100%FREE System -n data # 这里是数据分区,用于存放重要资料(为了和根分区区分,建议不要写入fstab让它默认不挂载)

格式化:

mkfs -t vfat -F 32 /dev/sdb1
mkfs -i 8192 -t ext4 /dev/System/root
mkfs -i 8192 -t ext4 /dev/System/data

挂载分区:

mount -t ext4 /dev/System/root /mnt
mkdir -p /mnt/boot
mount /dev/sdb1 /mnt/boot

安装系统

如果你在使用Arch Linux的Live CD安装,你可能需要修改/etc/pacman.d/mirrorlist选择镜像站

pacstrap -i /mnt base base-devel linux # 这里建议不安装默认的linux,安装linux-hardened内核
genfstab -U -p /mnt >> /mnt/etc/fstab

进入chroot环境并安装内核:

arch-chroot /mnt
source /etc/profile
pacman -S linux-hardened

配置locale:

TMP="en_US.UTF-8" # 将这里改为你想使用的语言(建议en)
echo "${TMP} UTF-8" > /etc/locale.gen
locale-gen
echo LANG=${TMP} > /etc/locale.conf

至于时区这里示例使用中国时区:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc --utc

更改root密码与主机名:

passwd
echo Live > /etc/hostname

编辑/etc/mkinitcpio.confHOOKS中加入keyboard keymap encrypt以支持加密(需要注意顺序):

# 示例
HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck)

添加ramroot支持:

pacman -S git
git clone https://github.com/arcmags/ramroot
cd ramroot
./ramroot enable -r 这里替换为/dev/System/root的UUID -b 这里替换为/dev/sdb1的UUID  # 注意,这里生成initramfs时会报错(如果你使用linux-hardened的话),可以暂时忽略

重新生成initramfs:

mkinitcpio -p linux-hardened

安装引导:

pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=BOOT # 这里会有非GPT报错可以忽略
cp /boot/EFI/BOOT/grubx64.efi /boot/EFI/BOOT/BOOTX64.efi # 防止BIOS不认
grub-install --target=i386-pc /dev/sdb

另开终端运行blkid复制/dev/sdb2的UUID(注意不要和/dev/mapper/cryptroot的UUID混淆)

回到原终端编辑/etc/default/grubGRUB_CMDLINE_LINUX=""加入:

cryptdevice=UUID=这里换成刚刚复制的UUID:cryptlvm root=/dev/System/root

生成grub.cfg:

grub-mkconfig -o /boot/grub/grub.cfg # 这里会报lvm错误,可以忽略

安装网络管理器:

# 这里建议使用connman或networkmanager
pacman -S connman bluez wpa_supplicant
systemctl enable connman

到了这里 你就可以重启看看能不能启动了

结尾

最后无非是做一些自己的配置,这里就不多说了,就说说一些建议

安装配置完成之后,根目录使用空间不大或内存够用的话 建议使用ramroot启动,启动之后你就可以拔掉U盘了(这样启动不会保留对根目录的更改)。

关于分区,之所以分个/data,默认不挂载,这样使用ramroot启动时可以保证数据隐私安全(所以建议新建俩个用户),正常启动时可以手动挂载以保存/访问数据。至于怎么玩随你喜欢了。

1条评论
  1. NoName_3031
    NoName_30312020-02-23

    谢谢教程 已经成功启动
    不过,除了linux-hardened之外还需要“lvm2”这个软件包
    不然之后运行mkinitcpio会出错的

    回复
添加新评论