# 树莓派默认用户管理机制升级

根据 2020-04-04 树莓派发布日志显示,默认用户 pi 已被删除,强制用户在初次使用时新建用户并重新设置密码。

2022-04-04:
  * Default "pi" user has been removed; the first-boot wizard enforces the creation of a new user account

原出处:https://downloads.raspberrypi.org/raspios_lite_armhf/release_notes.txt

这样对于不使用或不愿意使用外置显示器的用户(我)就引入了一个”先有鸡还是先有蛋“的问题(lite版用户),所幸官方已经留足了口子,给出了解决方案。

本文采用结合官方解决方案通过魔改官方镜像的方法实现烧录后自动创建用户同时开启ssh进行登陆操作,避免非必要的显示器连接和手动配置工作。步骤如下:

  • 下载官方镜像
  • 复制镜像以供修改之用
  • losetup 挂载镜像
  • boot 目录创建 userconf 文件,设定默认用户和密码
  • boot 目录创建 ssh 文件,开启 ssh 登陆功能
  • 关闭文件系统自动扩展至最大容量功能(方便制作镜像)
  • 扩展默认可用空间
  • 烧录验证

注:本文所有操作均在 Ubuntu 20.04 系统下完成

注:下文使用 losetup 使用 /dev/loop1,具体操作时请对应做替换

注:如无特殊指明,指令均在工作目录下运行,镜像、img/boot、img/rootfs 均存放在工作目录

> tree
.
├── 2022-04-04-raspios-bullseye-arm64-lite.img
├── img
│   ├── boot
│   └── rootfs
├── rpi-20220404-v1.0.img
└── rpi-20220404-v1.1.img

挂载镜像

镜像下载地址:https://www.raspberrypi.com/software/operating-systems/

本文使用 2022-04-04 版本 ,镜像名称 2022-04-04-raspios-bullseye-arm64-lite.img

cp 2022-04-04-raspios-bullseye-arm64-lite.img rpi-20220404-v1.0.img
sudo losetup -P /dev/loop1 rpi-20220404-v1.0.img
mkdir -p img/rootfs
mkdir -p img/boot

sudo mount /dev/loop1p2 img/rootfs
sudo mount /dev/loop1p1 img/boot

利用上述指令将树莓派镜像挂载到本地,进行修改。

增加默认用户

创建密码对应的加密字串:

echo 'mypassword' | openssl passwd -6 -stdin
$6$q80uN6hUy40k3gKD$Pl7qxIELx3hr3ItaDw5CV3Dic90YeEBkf/s9hlIIoNc87yHTcMcbtamn19IsVopgcuzwZVXLoHT46sek4rCL70

创建 userconf 文件:

cd img/boot
sudo vi userconf
username:$6$q80uN6hUy40k3gKD$Pl7qxIELx3hr3ItaDw5CV3Dic90YeEBkf/s9hlIIoNc87yHTcMcbtamn19IsVopgcuzwZVXLoHT46sek4rCL70

参考 https://www.raspberrypi.com/news/raspberry-pi-bullseye-update-april-2022/ ,搜索 userconf 关键字可快速找到对应章节。

注:初次上电后创建的文件将被销毁,这里使用加密后的密钥主要原因是让文件系统上不存放任何与密钥明文相关的内容(文件系统层面删除文件大部分时候无法做到销毁存储介质中的内容)。

开启 SSH

/home/pi 目录仍然存在,并作为新建用户的目录(将被重命名),开启ssh的同时创建公钥存放文件,登陆时避免输入密码。系统初次启动后 /home/pi 将被重命名为新建用户的名称。

# 开启 ssh
cd img/boot
sudo touch ssh

# 将本地 ~/.ssh/authorized_keys 拷贝至对应目录
cd ../rootfs/home/pi
mkdir .ssh
chmod 700 .ssh 
cp ~/.ssh/authorized_keys .

修改启动参数禁止自动扩展镜像

修改 /boot/cmdline.txt 文件

console=serial0,115200 console=tty1 root=PARTUUID=c0799831-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

=>


console=serial0,115200 console=tty1 root=PARTUUID=c0799831-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet 

修改主机名称

sudo vi /etc/hosts
sudo vi /etc/hostname

手动扩充容量

先将前文挂载的镜像卸载:

sudo umount img/boot
sudo umount img/rootfs
sudo losetup -d /dev/loop1

# 危险操作,防止重来,先把镜像复制一份,同时操作新镜像,注意将前文
cp rpi-20220404-v1.0.img rpi-20220404-v1.1.img

dd if=/dev/zero of=2gfile bs=1 count=1 seek=2G >> rpi-20220404-v1.1.img
sudo losetup --find --partscan --show rpi-20220404-v1.1.img
sudo parted /dev/loop1
> fdisk -l rpi-20220404-v1.1.img 
Disk rpi-20220404-v1.1.img: 3.88 GiB, 4148166656 bytes, 8101888 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0ee3e8a8

Device                 Boot  Start     End Sectors  Size Id Type
rpi-20220404-v1.1.img1        8192  532479  524288  256M  c W95 FAT32 (LBA)
rpi-20220404-v1.1.img2      532480 3907583 3375104  1.6G 83 Linux
> sudo parted /dev/loop1 
GNU Parted 3.3
Using /dev/loop1
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print                                                            
Model: Loopback device (loopback)
Disk /dev/loop1: 4148MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number  Start   End     Size    Type     File system  Flags
 1      4194kB  273MB   268MB   primary  fat32        lba
 2      273MB   2001MB  1728MB  primary  ext4

(parted) rm 2    

(parted) mkpart primary 273 4148

(parted) print                                                            
Model: Loopback device (loopback)
Disk /dev/loop1: 4148MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number  Start   End     Size    Type     File system  Flags
 1      4194kB  273MB   268MB   primary  fat32        lba
 2      273MB   4148MB  3876MB  primary               lba

(parted) quit                                                             
Information: You may need to update /etc/fstab.

操作完成功,卸载 loop 文件

sudo sync
sudo umount img/boot
sudo umount img/rootfs
sudo losetup -d /dev/loop1

本章节参考:https://powersj.io/posts/raspbian-edit-image/

总结

  • 此次官方镜像的改动增加了初次运行的复杂度,提升了一些安全性
  • 不难推测,大部分用户应该是不会修改默认密码的,人性使然
  • 利用 losetup 魔改镜像可以免去使用 SD卡备份方式制作镜像的麻烦
发表于: 作者:JiapengLi
由于某种不存在的原因,评论区正在努力加载中……