上海市建设咨询协会网站信息流优化师是干什么的
4.6、系统登录
4.6.1、系统登录方式配置
1、系统初始化配置选择
配置路径 :
→ System configuration → Init system
配置参数说明:
BusyBox
-
简介:
BusyBox
是一个非常小巧的工具集合,它提供了许多常见的 Unix 工具,并通过一个单一的可执行文件来实现。这些工具包括 shell、文件管理、网络工具等。在许多嵌入式系统中,BusyBox
被用作系统的init
进程。 -
特点:
- 小巧:适用于资源有限的环境,像嵌入式设备或开发板。
- 易于定制:可以选择只编译必要的工具,减少系统占用。
- 高效:启动速度快,占用资源少。
- 适用场景:广泛用于嵌入式系统、开发板等。
选择
BusyBox
作为初始化系统意味着你会使用一个简化的初始化过程,适用于轻量级、快速启动的场景。
systemV
-
简介:
SystemV
是传统的 Unix 初始化系统,早期的 Linux 系统使用的是 System V 风格的init
系统。它通常依赖于多个脚本来启动和管理系统服务。 -
特点:
- 脚本驱动:服务通过
/etc/init.d/
目录下的脚本来启动。 - 兼容性:对于许多旧的 Linux 发行版和 Unix 系统,
SystemV
是一种标准。 - 较为繁琐:服务的管理通常通过手动启动脚本进行,较为复杂。
选择
SystemV
表示你希望使用传统的方式来管理系统的启动过程。 - 脚本驱动:服务通过
OpenRC
-
简介:
OpenRC
是一个轻量级的初始化系统,最初由 Gentoo Linux 开发,但现在也可以在许多其他 Linux 发行版中使用。它通过脚本和事件驱动的方式启动和管理服务。 -
特点:
- 轻量级:与
systemd
相比,它占用的资源较少。 - 依赖管理:能够有效地处理服务的依赖关系。
- 兼容性:它与
systemd
和SysVinit
脚本兼容。
选择
OpenRC
可以带来一个简洁、快速的启动过程,并且它不依赖于systemd
. - 轻量级:与
systemd
-
简介:
systemd
是当前许多现代 Linux 发行版的默认初始化系统。它不仅负责启动系统,还提供了大量功能来管理系统服务、日志记录、并行化启动等。 -
特点:
- 高效并行启动:通过并行化启动多个服务来加快系统启动速度。
-
功能强大:包括服务管理、日志管理、网络配置等。
- 复杂性:配置和管理相对复杂,需要学习
systemctl
命令等。
选择
systemd
是现代 Linux 系统中最常见的选择,它能够提供强大的服务管理和系统控制功能。 - 复杂性:配置和管理相对复杂,需要学习
None
-
简介:选择
None
表示系统没有启用任何初始化系统。这种情况比较少见,通常用于某些非常特殊的定制环境,或者在非常简化的系统中。 -
特点:
- 不使用任何 init 系统:系统启动时不会通过传统的 init 系统进行服务管理。
-
需要手动配置:没有 init 系统时,用户需要自行编写启动脚本来管理系统服务。
选择
None
的场景较为特殊,适合对系统有完全控制需求的用户。
2、登录界面配置
配置路径 :
→ System configuration → Run a shell on serial console after boot
配置参数说明:
-
/sbin/getty (login prompt)
:使用getty
提供登录提示:getty
是一个常见的程序,负责在终端上显示登录提示并启动登录程序。选择此选项会在串行终端上显示登录提示,让用户输入用户名和密码进行登录。它通常用于传统的命令行登录界面。 -
/bin/sh
:启动sh
(shell):选择这个选项会在串行终端上启动一个sh
(Bash 或其他 shell),而不是显示登录提示。这意味着系统会直接提供一个 shell 提示符,用户可以直接在命令行界面进行操作,而不需要进行身份验证或登录。适用于嵌入式系统的调试或开发环境,便于直接访问系统。 -
/bin/login
:使用login
提供登录界面:这个选项会启动login
程序,提供标准的登录界面。与getty
相似,login
会在终端上提示用户输入用户名和密码,但它通常用于在系统启动时通过串行端口提供更为安全的登录方式。 -
none
:不使用任何登录方式:如果选择此选项,则串行端口不会提供任何登录界面或 shell。这意味着如果你想通过串行端口访问系统,可能需要其他方式来启用访问,如通过网络连接等
4.6.2、用户及密码配置
文件路径 : ./board/rockchip/rk3566_rk3568/fs-overlay/etc
1、添加文件 group
root:x:0:
mo:x:1000:
用于定义系统中的用户组信息。它包含了组名、组密码(通常为空)和组成员。
root:x:0:
:
root
是组名。x
表示组的密码(在大多数现代 Linux 系统中,组密码通常没有使用,因此该字段为空或为x
)。0
是组的 GID(组标识符),这里0
代表超级用户(root)组。- 最后部分为空,表示该组没有成员(成员通常是其他用户的用户名,用逗号分隔)。
mo:x:1000:
:
mo
是组名。x
表示组的密码。1000
是该组的 GID(对于普通用户组,一般从1000
开始)。- 最后部分为空,表示该组也没有其他成员。
2、添加文件 passwd
root:x:0:0:root:/root:/bin/sh
mo:x:1000:1000:mo user:/home/mo:/bin/sh
存储系统中每个用户的基本信息,如用户名、UID、GID、家目录和默认 shell 。
root:x:0:0:root:/root:/bin/sh
:
root
是用户名。x
表示密码字段,表示密码存储在shadow
文件中(现代 Linux 系统使用shadow
文件来存储密码信息,x
只是占位符)。0
是 UID(用户标识符),表示该用户是超级用户(root)。0
是 GID(组标识符),表示该用户属于root
组。root
是用户的全名或描述字段(这里是 root 用户的描述)。/root
是该用户的家目录路径。/bin/sh
是该用户的默认 shell(在这个例子中是sh
,可以是bash
或其他 shell)。
mo:x:1000:1000:mo user:/home/mo:/bin/sh
:
mo
是用户名。x
表示密码字段,密码信息在shadow
文件中。1000
是 UID(这个通常分配给第一个非系统用户,表示普通用户mo
)。1000
是 GID(这个通常是用户的默认组的 GID)。mo user
是该用户的描述信息。/home/mo
是该用户的家目录路径。/bin/sh
是该用户的默认 shell。
3、添加文件 shadow
root:$1$xyz$xxxxxxxxxxxxxx/:0:0:99999:7:::
mo:$1$xyz$xxxxxxxxxxxxxx/:0:0:99999:7:::
用于存储用户的加密密码和密码过期信息,它是 passwd
文件的补充。它只有管理员(root)权限才能访问,保证密码的安全性。
root:$1$xyz$xxxxxxxxxxxxxx/:0:0:99999:7:::
:
root
是用户名。$1$xyz$xxxxxxxxxxxxxx/
是 root 用户的加密密码。$1$
:表示这是使用 MD5 哈希算法加密的密码。后面的字符是密码的哈希值。xyz
:这是 盐值(salt)。盐值是一个用于混淆哈希过程的字符串,它的作用是让同样的密码每次加密的结果不同。盐值可以是随机生成的,通常是 8 到 16 个字符的字符串。- 加密后的哈希值:
$1$xyz$
后面跟着的是实际的 MD5 哈希值,这部分是加密后的用户密码。它看起来像一个随机字符串,是通过对密码和盐值进行哈希计算得到的。
0
表示密码最后一次修改的日期(自 1970 年 1 月 1 日以来的天数)。这里0
代表密码尚未设置或尚未修改。0
表示密码最小使用期限,即用户必须等待多长时间才能更改密码。这里的0
表示没有限制。99999
表示密码最大使用期限,即密码最大有效期。99999
意味着密码永不过期。7
表示密码过期前提前多少天警告用户更改密码。这里是 7 天。
mo:$1$xyz$xxxxxxxxxxxxxx/:0:0:99999:7:::
:
mo
是用户名。$1$xyz$xxxxxxxxxxxxxx/
是mo
用户的加密密码(与 root 用户类似,使用 MD5 哈希算法)。0
表示密码的最后修改日期。0
表示密码最小使用期限。99999
表示密码最大使用期限(永不过期)。7
表示密码到期前 7 天警告用户。
4、密码计算方式
python -c 'from crypt import crypt; print(crypt("root", "$1$xyz$"))'
5、创建用户目录
# /buildroot/board/rockchip/common/post-build.sh
# 创建 mo 用户的目录
mkdir -p /home/mo
chown mo:mo /home/mo
chmod 755 /home/mo
4.6.3、默认登录子账号
文件路径 : ./buildroot/package/busybox/busybox.mk
修改添加内容如下
ifeq ($(BR2_TARGET_SERIAL_SHELL_GETTY),y)
BUSYBOX_SERIAL_SHELL = "$(SYSTEM_GETTY_PORT)::respawn:/sbin/getty -L $(SYSTEM_GETTY_OPTIONS) $(SYSTEM_GETTY_PORT) $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM)"
else
ifeq ($(BR2_TARGET_SERIAL_SHELL_SH),y)
BUSYBOX_SERIAL_SHELL = "::respawn:-/bin/sh -f mo"
else ifeq ($(BR2_TARGET_SERIAL_SHELL_LOGIN),y)
BUSYBOX_SERIAL_SHELL = "::respawn:-/bin/login -f mo"
else
BUSYBOX_SERIAL_SHELL =
endif
https://www.yiyuanjichang.net/api/v1/client/subscribe?token=4772d11bfd3a784bdc6b198200a74eaf