2022/6/23

test securetty in raspberry pi with buildroot

用 buildroot build 一個 system image
mkdir pibuildroot && cd pibuildroot
wget ...
tar zxvf ..
cd ..
看一下 board 下面很多 raspberrypiX 都 ln 到 raspberrypi。
裡面有 readme.txt。
有說 pi3 的話..
make raspberrypi3_defconfig
用 make help 會列出一堆 make target。
然後用 make menuconfig 去看,就是arm 的 config 了。
而且因為是 pi3, 會用 cortex A53,不是 pi 一代的 arm11

要 enable PAM (linix-pam) 的話,在 packages/linux-pam
從 packages/Config.in 可以找到 linux-pam 的 menuconfig 位置。
Target packages -- Libraries -- Other
從 linux-pam 的說明(警告),說,linux-pam 要 clibc 或是 glibc 才行。
所以menuconfig 的 toolchain 中,原來是 uclibc-ng,要改為 glibc。
這樣選完,就可以check linux-pam 了。

make 完畢,在 output/images 下的 sdcard.img,就拿來 dd 到 sdcard。
開機,console 就可以看到訊息。

沒有 check linux-pam 時,/etc 下沒有 pam.d 目錄。
check 之後,就有了。

在 /etc/pam.d/login 加一行:
auth		required	pam_securetty.so
然後新增一個 /etc/securetty 空檔案。
為了避免沒版法login,新增一個 user。

這樣reboot 後,可以發現 在 uart 已經無法用 root login 了(login incorrect),但是用剛剛新增的 user 可以。
用新增的 user login 後, su - 成 root。

su - 成 root 後,修改 /etc/securetty,加上
console
-- 因為用 w 看,login TTY 是 console,不是 tty1, ttyS0 之類,所以用 console
reboot,就發現又可以用 root login 了。

把 securetty 的console 拿掉,確認無法 login 後,再把 /etc/pam.d/login 的 auth pam_securetty.so 拿掉,是可以用 root login 的。
所以確認是 pam.d/login 的 auth pam_securetty.so 讓 /etc/securetty 生效。



有關buildroot 跟 busybox 在 PAM 上的關聯。
buildroot 的 script: package/busybox/busybox.mk: 有根據 buildroot 的 PAM 設定,自動設定 busybox 的 PAM。
# PAM support requires thread support in the toolchain
ifeq ($(BR2_PACKAGE_LINUX_PAM)$(BR2_TOOLCHAIN_HAS_THREADS),yy)
define BUSYBOX_LINUX_PAM
        $(call KCONFIG_ENABLE_OPT,CONFIG_PAM,$(BUSYBOX_BUILD_CONFIG))
endef
BUSYBOX_DEPENDENCIES += linux-pam
else
define BUSYBOX_LINUX_PAM
        $(call KCONFIG_DISABLE_OPT,CONFIG_PAM,$(BUSYBOX_BUILD_CONFIG))
endef
endif
所以會根據buildroot 的 PAM check/uncheck disable/disable busybox 的 PAM 設定。
所以要測試,enable linux-pam, disable busybox pam support 的話,就要到 output/build/busybox-1.31.1 單獨做 busybox 的 menuconfig。
的確沒有效了,root login OK

改用 util-linux 的 login。
--uncheck busybox 的 login

確認是 OK的,可以用 pam.d/login 跟 securetty 來限制 root login console

沒有留言:

張貼留言