Yocto配置SSH用户目录监禁失败,SSH登录异常求助
SSH用户Chroot监禁失败排查与修复(Yocto环境)
1. 先确认sshd_config配置的正确性
针对linuxopsys用户的Chroot规则必须满足语法和优先级要求:
- 确保
Match块没有被其他规则覆盖,建议放在配置文件末尾 ChrootDirectory必须是绝对路径,且严格符合权限要求
示例正确配置:
Match User linuxopsys ChrootDirectory /home/linuxopsys/chroot # 如果需要shell登录,不要加ForceCommand;仅SFTP需求可保留下面一行 # ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
2. 检查Chroot目录的权限与核心结构
sshd对Chroot目录的权限有强制要求:
- Chroot根目录必须由root用户拥有,权限不能高于
755(禁止其他用户拥有写权限) - 子目录可按需给
linuxopsys用户授权,但顶层目录必须严格遵循root所有+755权限 - 必须包含Chroot环境的必要组件:
- 设备文件:手动创建或在Recipe中添加命令生成
mknod /home/linuxopsys/chroot/dev/null c 1 3 mknod /home/linuxopsys/chroot/dev/zero c 1 5 mknod /home/linuxopsys/chroot/dev/random c 1 8 mknod /home/linuxopsys/chroot/dev/urandom c 1 9 chmod 666 /home/linuxopsys/chroot/dev/* - 依赖库:通过
ldd /bin/bash查看shell依赖,将对应so文件复制到Chroot的/lib或/lib64目录 - 可用shell:确保Chroot内存在
/bin/bash(或你指定的shell),权限设为755 - 系统文件:复制主机的
/etc/passwd、/etc/group到Chroot目录,确保linuxopsys用户条目存在,且shell路径指向Chroot内的对应文件
- 设备文件:手动创建或在Recipe中添加命令生成
3. 修正用户创建参数
你当前的EXTRA_USERS_PARAMS缺少主目录创建和shell指定,容易导致登录失败:
EXTRA_USERS_PARAMS = "useradd -m -d /home/linuxopsys -s /bin/bash -P linuxopsys linuxopsys;"
-m自动创建主目录-d指定用户主目录路径-s明确设置登录shell为/bin/bash(避免默认使用/sbin/nologin)
4. 查看sshd日志定位具体错误
登录失败时,直接查看目标系统的sshd日志(通常在/var/log/auth.log或/var/log/secure),日志会明确给出失败原因:
- 权限问题:
ChrootDirectory /home/linuxopsys/chroot has wrong ownership or mode - 依赖缺失:
error: subsystem request for sftp failed, subsystem not found - 目录结构错误:
fatal: bad ownership or modes for chroot directory component
5. Yocto构建阶段的注意事项
- 确保Recipe的
do_install阶段正确创建Chroot目录、设备文件,复制依赖库和shell,通过FILES_${PN}指定所有需要安装到目标系统的文件 - 确认sshd_config的修改被正确应用:可通过自定义Recipe覆盖openssh的默认配置,或用
FILESEXTRAPATHS添加自定义配置文件 - 构建完成后,在目标系统中检查
/etc/ssh/sshd_config,确保你的Match规则没有被其他配置覆盖
6. 验证步骤
- 在目标系统上手动配置好Chroot目录和sshd_config,执行
systemctl restart sshd重启服务 - 从远程机器尝试登录:
ssh linuxopsys@target-ip,若失败立刻查看auth日志 - 登录成功后执行
pwd和cd /,确认是否被限制在Chroot目录内
内容的提问来源于stack exchange,提问作者karkator
相关产品推荐
相关产品推荐

