避免在 buildroot rootfs 中使用 su 命令将非 root 用户扩展到 root
Avoid non-root user scaling to root using su command in a buildroot rootfs
使用 buildroot 构建 rootfs。我的 rootfs 使用此用户创建“admin”用户-tables.txt:
# cat ./board/corp/main/users-table.txt
# <username> <uid> <group> <gid> <password> <home> <shell> <groups> <comment>
admin -1 admin -1 =1234 /home/admin /bin/sh - Restricted admin user
用户 admin 使用 ssh 连接到 rootfs。
ssh admin@192.168.1.123
这是 id 命令的输出:
$ id
uid=1002(admin) gid=1006(admin) groups=1006(admin)
问题是,用户 admin 可以轻松扩展到 root 执行“su”命令:
$ su
$ id
uid=0(root) gid=0(root) groups=0(root),10(wheel)
尝试使用 PAM 库避免这种情况。但是我无法设置我的 rootfs 以按预期工作。已在启用此 buildroot 选项的情况下创建 rootfs:
BR2_PACKAGE_LINUX_PAM=y
这是一些相关文件的内容。如果其他一些文件可以帮助调试此问题,请告诉我。
# cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/false
bin:x:2:2:bin:/bin:/bin/false
sys:x:3:3:sys:/dev:/bin/false
sync:x:4:100:sync:/bin:/bin/sync
mail:x:8:8:mail:/var/spool/mail:/bin/false
www-data:x:33:33:www-data:/var/www:/bin/false
operator:x:37:37:Operator:/var:/bin/false
nobody:x:65534:65534:nobody:/home:/bin/false
dbus:x:1000:81:DBus messagebus user:/var/run/dbus:/bin/false
sshd:x:1001:1004:SSH drop priv user:/var/empty:/bin/false
admin:x:1002:1006:Restricted admin user:/home/admin:/bin/sh
# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
kmem:x:9:
wheel:x:10:root
cdrom:x:11:
dialout:x:18:
floppy:x:19:
video:x:28:
audio:x:29:
tape:x:32:
www-data:x:33:
utmp:x:43:
plugdev:x:46:
staff:x:50:
lock:x:54:
haldaemon:x:68:
netdev:x:82:
ftp:x:83
nobody:x:99:
nogroup:x:99:
users:x:100:
default:x:1000:
input:x:1001:
render:x:1002:
kvm:x:1003:
sshd:x:1004:
sudo:x:1005:
admin:x:1006:
dbus:x:81:dbus
# cat /etc/sudoers
root ALL=(ALL) ALL
admin ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
已安装包含所有已部署文件的 PAM。我可以检查我的 运行ning rootfs 是否正在使用 PAM 库:
# ldd /bin/login | grep pam
libpam.so.0 => /lib/libpam.so.0 (0xb6f3a000)
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb6f27000)
我找到了一些这样的文档 http://blog.serverbuddies.com/how-do-i-restrict-the-use-of-su-command/,解释了影子 `su' 服务的 PAM 配置文件。我用这个测试过:
$ cat /etc/pam.d/su
auth required /lib/security/pam_wheel.so use_uid
据我了解,此行强制任何用户成为“wheel”组的成员,以便能够运行“su”命令。正如您在前面列出的文件中看到的,admin 用户不属于“wheel”组。所以,它应该无法执行“su”命令。
但是,用户“admin”执行“su”命令,它扩展到 root。
我做错了什么?任何帮助将不胜感激。
提前致谢!!
仅供对此问题感兴趣的人参考,问题已修复。它与“su”命令相关,由 buildroot 作为 busybox 小程序部署。尽管在 busybox 配置文件(版本 1.31.1)中启用了 CONFIG_PAM=y,但此小程序无法按预期工作。
这是我们解决此问题所遵循的步骤:
- 从 busybox 中删除“su”小程序
# CONFIG_SU is not set
- 在 buildroot 中添加“su”navite 命令:
BR2_PACKAGE_UTIL_LINUX_SU=y
- 在 /etc/pam.d/sudo 中注释这一行,以便能够使用管理员用户执行 sudo:
#auth required pam_wheel.so use_uid
- 重建并刷新映像。
使用 buildroot 构建 rootfs。我的 rootfs 使用此用户创建“admin”用户-tables.txt:
# cat ./board/corp/main/users-table.txt
# <username> <uid> <group> <gid> <password> <home> <shell> <groups> <comment>
admin -1 admin -1 =1234 /home/admin /bin/sh - Restricted admin user
用户 admin 使用 ssh 连接到 rootfs。
ssh admin@192.168.1.123
这是 id 命令的输出:
$ id
uid=1002(admin) gid=1006(admin) groups=1006(admin)
问题是,用户 admin 可以轻松扩展到 root 执行“su”命令:
$ su
$ id
uid=0(root) gid=0(root) groups=0(root),10(wheel)
尝试使用 PAM 库避免这种情况。但是我无法设置我的 rootfs 以按预期工作。已在启用此 buildroot 选项的情况下创建 rootfs:
BR2_PACKAGE_LINUX_PAM=y
这是一些相关文件的内容。如果其他一些文件可以帮助调试此问题,请告诉我。
# cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/false
bin:x:2:2:bin:/bin:/bin/false
sys:x:3:3:sys:/dev:/bin/false
sync:x:4:100:sync:/bin:/bin/sync
mail:x:8:8:mail:/var/spool/mail:/bin/false
www-data:x:33:33:www-data:/var/www:/bin/false
operator:x:37:37:Operator:/var:/bin/false
nobody:x:65534:65534:nobody:/home:/bin/false
dbus:x:1000:81:DBus messagebus user:/var/run/dbus:/bin/false
sshd:x:1001:1004:SSH drop priv user:/var/empty:/bin/false
admin:x:1002:1006:Restricted admin user:/home/admin:/bin/sh
# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
kmem:x:9:
wheel:x:10:root
cdrom:x:11:
dialout:x:18:
floppy:x:19:
video:x:28:
audio:x:29:
tape:x:32:
www-data:x:33:
utmp:x:43:
plugdev:x:46:
staff:x:50:
lock:x:54:
haldaemon:x:68:
netdev:x:82:
ftp:x:83
nobody:x:99:
nogroup:x:99:
users:x:100:
default:x:1000:
input:x:1001:
render:x:1002:
kvm:x:1003:
sshd:x:1004:
sudo:x:1005:
admin:x:1006:
dbus:x:81:dbus
# cat /etc/sudoers
root ALL=(ALL) ALL
admin ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
已安装包含所有已部署文件的 PAM。我可以检查我的 运行ning rootfs 是否正在使用 PAM 库:
# ldd /bin/login | grep pam
libpam.so.0 => /lib/libpam.so.0 (0xb6f3a000)
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb6f27000)
我找到了一些这样的文档 http://blog.serverbuddies.com/how-do-i-restrict-the-use-of-su-command/,解释了影子 `su' 服务的 PAM 配置文件。我用这个测试过:
$ cat /etc/pam.d/su
auth required /lib/security/pam_wheel.so use_uid
据我了解,此行强制任何用户成为“wheel”组的成员,以便能够运行“su”命令。正如您在前面列出的文件中看到的,admin 用户不属于“wheel”组。所以,它应该无法执行“su”命令。
但是,用户“admin”执行“su”命令,它扩展到 root。
我做错了什么?任何帮助将不胜感激。
提前致谢!!
仅供对此问题感兴趣的人参考,问题已修复。它与“su”命令相关,由 buildroot 作为 busybox 小程序部署。尽管在 busybox 配置文件(版本 1.31.1)中启用了 CONFIG_PAM=y,但此小程序无法按预期工作。
这是我们解决此问题所遵循的步骤:
- 从 busybox 中删除“su”小程序
# CONFIG_SU is not set
- 在 buildroot 中添加“su”navite 命令:
BR2_PACKAGE_UTIL_LINUX_SU=y
- 在 /etc/pam.d/sudo 中注释这一行,以便能够使用管理员用户执行 sudo:
#auth required pam_wheel.so use_uid
- 重建并刷新映像。