You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto Hardknott版本useradd添加用户失败问题求助

Yocto Hardknott版本添加用户失败问题分析与解决

问题原因分析

从日志useradd: listing attributes of /etc/skel/.bashrc: No data available可以定位核心问题,结合你的配方细节,原因如下:

  • useradd类执行时机冲突:useradd类在do_prepare_recipe_sysroot阶段运行,此时系统rootfs的基础结构尚未构建完成,/etc/skel这类由base-files包提供的目录还未被同步到sysroot中。而useradd创建带家目录的用户时,默认会尝试从/etc/skel复制配置文件(如.bashrc),找不到文件就会报错退出。
  • USERADD_PARAM参数格式错误:配方中USERADD_PARAM_${PN} = "--user nfi --password nfi --create-home --groups sudo"不符合useradd命令语法,正确格式是useradd [选项] 用户名,--user并非合法选项,需将用户名放在参数末尾。
  • 两类用户管理类混用:useradd和extrausers类的执行阶段、作用逻辑不同,混用容易导致时序或逻辑冲突。

解决方案

优先推荐使用extrausers类完成用户配置,它在rootfs构建后期执行,此时基础文件系统已完备,不会出现依赖缺失问题。修改后的配方如下:

DESCRIPTION = "Add a new user 'nfi' with sudo privileges and change root password"
LICENSE = "CLOSED"

# 仅继承extrausers类即可
inherit extrausers

# 配置组、用户与密码(使用加密密码避免明文风险)
EXTRA_USERS_PARAMS = "\
    groupadd -f sudo; \
    useradd -m -d /home/nfi -G sudo -p $(openssl passwd -1 nfi) nfi; \
    usermod -p $(openssl passwd -1 toor) root; \
"

do_install() {
    echo 'nfi ALL=(ALL) NOPASSWD:ALL' >> ${D}${sysconfdir}/sudoers.d/nfi
    # 必须设置正确权限,否则sudo会拒绝加载该配置
    chmod 0440 ${D}${sysconfdir}/sudoers.d/nfi
}

FILES_${PN} += "${sysconfdir}/sudoers.d"

关键修改说明

  1. 移除useradd类,仅保留extrausers类,规避时序冲突。
  2. 在EXTRA_USERS_PARAMS中直接调用标准useradd命令,参数说明:
    • -m:自动创建用户家目录
    • -d /home/nfi:指定家目录路径
    • -G sudo:将用户添加到sudo组
    • -p $(openssl passwd -1 nfi):生成SHA-1加密密码,替代明文密码
  3. 添加chmod 0440确保sudoers配置文件权限符合要求,避免sudo忽略该规则。

如果一定要使用useradd类,需做以下调整:

  1. 添加依赖确保sysroot中存在/etc/skel:
    DEPENDS += "base-files"
    
  2. 修正USERADD_PARAM格式:
    USERADD_PARAM_${PN} = "-m -d /home/nfi -G sudo -p nfi nfi"
    

但这种方式仍可能因sysroot构建时序出现异常,因此优先推荐extrausers方案。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:03:38