Arch-Linux

如何使 mkinitcpio busybox ash 源 /etc/profile?

  • December 24, 2017

Arch Linux/usr/lib/initcpio/busybox由 mkinitcpio-busybox 1.27.2-1 包擁有,並且配置為低功能,例如 CONFIG_FEATURE_USE_INITTAB 未設置。

在包含該busybox的自定義initramfs中,我設法獲得了執行原始碼/etc/profile工作的ssh網路登錄。在 VGA 顯示器上還可以看到一個殼提示。

但是,“vga”外殼不是 source /etc/profile。問:登錄 Shell 和非登錄 Shell 的區別?讓我覺得這個 shell 不是登錄 shell。該外殼由以下啟動/init

exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'

回歸:

  • exec setsid sh -c 'exec sh -i </dev/tty1 >/dev/tty1 2>&1'
  • exec setsid sh -c 'exec sh - </dev/tty1 >/dev/tty1 2>&1'
  • exec setsid sh -c 'exec -sh </dev/tty1 >/dev/tty1 2>&1'

如何使這個busybox ashshell 成為源/etc/profile和/或使其成為(自動)登錄 shell?

通常,如果使用以 . 開頭的命令名呼叫 shell,則它充當登錄 shell -exec -sh如果你有一個-sh在路徑中呼叫的執行檔,它會起作用。BusyBox ash 也支持該-l選項,因此您可以執行sh -l.

當您登錄時,login程序(或sshd,或任何處理登錄的程序)會負責執行使用者的 shell,並-在命令名稱中使用前導(命令名稱不必與執行檔的名稱相同,這只是一個非常普遍的約定,login故意違反)。在這裡,“處理登錄的一切”是你的小腳本,所以你必須照顧它。

引用自:https://unix.stackexchange.com/questions/412821