在U盘安装加密的Linux系统
适用场景:外出需要电脑,却没有携带自己的电脑,且不能信任能找到的电脑的环境;不想在外泄漏隐身;不是自己想使用的系统/环境。
教程目标:制作一个可以保留更改的运行Linux的U盘,加密根目录(boot除外),开机可以选择ramroot模式启动(将整个Linux系统加载在内存,适合在大内存机器且不想保留更改时使用)
需要的东西:
- 一个正常运行的Arch Linux
- 一个U盘(推荐3.1,3.0和2.0可能体验较差)
需要用到的软件/命令:
- cryptsetup
- arch-install-scripts(可以直接通过pacman安装)
开始
以下过程默认在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.conf在HOOKS中加入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/grub在GRUB_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启动时可以保证数据隐私安全(所以建议新建俩个用户),正常启动时可以手动挂载以保存/访问数据。至于怎么玩随你喜欢了。