Buildroot根文件系统阻止非root用户通过su命令提权问题咨询
问题根因
- 你仅验证了
/bin/login链接了PAM库,但未确认实际使用的su二进制是否支持PAM:Buildroot默认使用BusyBox提供的su工具,即使开启了BR2_PACKAGE_LINUX_PAM=y,如果没有开启BusyBox的PAM编译选项,su不会加载PAM配置,你写的/etc/pam.d/su规则完全不生效。 /etc/pam.d/su配置不完整,仅添加pam_wheel.so规则缺少必要的PAM校验链兜底逻辑,即使su支持PAM也可能因规则链不完整导致限制不生效。- 可能存在
pam_wheel.so路径配置错误,导致模块加载失败,规则失效。
解决步骤
步骤1:启用su的PAM支持
首先执行以下命令确认当前su是否支持PAM:
ldd /bin/su | grep pam
如果无输出,说明su未链接PAM库,二选一处理:
- 方案A(继续使用BusyBox su):在Buildroot配置中开启
BR2_PACKAGE_BUSYBOX_PAM=y,重新编译BusyBox和根文件系统 - 方案B(替换为shadow包su):在Buildroot配置中开启
BR2_PACKAGE_SHADOW=y,默认会替换BusyBox的su为shadow包的PAM兼容版本
步骤2:补全/etc/pam.d/su配置
将/etc/pam.d/su内容修改为完整规则:
# 允许root用户免密执行su auth sufficient pam_rootok.so # 仅允许wheel组成员执行su auth required pam_wheel.so use_uid # 账户合法性校验 account required pam_unix.so # 会话初始化 session required pam_unix.so
步骤3:验证模块路径和组配置
- 执行
ls /lib/security/pam_wheel.so确认模块存在,若不存在则将配置中的路径替换为实际路径(常见路径还有/usr/lib/security/pam_wheel.so、/lib64/security/pam_wheel.so) - 执行
grep wheel /etc/group确认输出为wheel:x:10:,没有admin用户在组列表中
步骤4:验证效果
使用admin用户SSH登录后执行su,会直接返回权限拒绝或密码验证失败,即限制生效。
内容的提问来源于stack exchange,提问作者aicastell
相关产品推荐
相关产品推荐

