在文本控制台中,有一个 getty 程序在等待用户登录。 它会输出 'login:' 和其他消息。 它在 init 环境中工作。 当 getty 获取用户登录系统后,它会调用 'login' 程序。 该程序会设置用户环境并调用 shell。
Login 程序会按照 /usr/include/paths.h 中定义的路径设置 path。 这个“登录路径”对于 root 用户和其他用户是不同的。
对于普通用户 (_PATH_DEFPATH)
/usr/local/bin:/usr/bin:/bin:.
对于 root 用户 (_PATH_DEFPATH_ROOT)
/sbin:/bin:/usr/sbin:/usr/bin
普通用户的路径不包含任何 sbin 目录。 但是,它包含当前目录 '.',这被认为是 root 用户的危险因素。 甚至 /usr/local/bin 对于 root 用户也是不可用的。
登录路径通常会被 shell 初始化所覆盖。 但是,可以使用 /etc/passwd 中的其他程序作为用户 shell。 例如,我曾使用以下行在通过特殊用户名登录时启动 PPP。 在这种情况下,pppd 拥有准确的登录路径。
etu-ppp:viYabVlxPwzDl:1000:1000:Esa Turtiainen, PPP:/:/usr/sbin/pppd