login [-p] [-d device] [-R repository] [-s service] [-t terminal] [-u identity] [-U ruser] [-h hostname [terminal] | -r hostname] [name [environ]...]
login 命令用于每个终端会话的开始,可向系统标识用户的身份。当上一个用户通过发出 exit 命令终止登录 shell 后,下一个用户首次建立连接时,系统将调用 login。
login 无法作为命令来调用,除非由超级用户执行。
如果 login 作为命令来调用,它必须替换初始命令解释程序。要以这种方式调用 login,请键入:
exec login
(从初始 shell 中)。C shell 和 Korn shell 都有其自己的 login 内置命令。有关登录内置命令和使用方法的说明,请参见 ksh(1)、ksh88(1) 和 csh(1)。
如果适用,login 会要求提供您的用户名(如果未作为参数提供)和口令。当您键入口令时请尽可能关闭回显,从而不会出现在该会话的写入记录中。
如果在登录过程中出现任何错误,将输出以下消息:
Login incorrect
并显示新的登录提示。如果进行了五次错误的登录尝试,所有五次尝试都可以记录在 /var/adm/loginlog(如果存在)中。TTY 行已删除。
如果已打开口令有效期功能,并且口令已到期(有关更多信息,请参见 passwd(1)),将强制用户更改口令。在这种情况下,将参考 /etc/nsswitch.conf 文件以确定口令信息库(请参见 nsswitch.conf(4))。仅对以下五种情况支持口令更新配置。
passwd: files
passwd: files nis
passwd: compat (==> files nis)
配置不符合要求会阻止用户登录系统,因为 passwd(1) 会失败。如果未能在一定时间内成功完成登录,则可能已无提示地断开连接。
成功登录后,将更新记帐文件。设备所有者、组和权限将根据 /etc/logindevperm 文件的内容进行设置,并将输出您上次登录的时间(请参见 logindevperm(4))。
用户 ID、组 ID、辅助组列表和工作目录将初始化,并启动命令解释程序。
基本环境会如下进行初始化:
HOME=your-login-directory LOGNAME=your-login-name PATH=/usr/bin: SHELL=last-field-of-passwd-entry MAIL=/var/mail/ TZ=timezone-specification
对于 Bourne shell 和 Korn shell 登录,shell 将执行 /etc/profile 和 $HOME/.profile(如果存在)。
对于 ksh Korn shell,交互式 shell 将执行 /etc/ksh.kshrc,后跟 ENV 环境变量指定的文件。如果未设置 $ENV,将缺省为 $HOME/.kshrc。对于 ksh 和 /usr/xpg4/bin/sh Korn Shell,交互式 shell 将执行 $ENV 指定的文件(没有缺省值)。
对于 C shell 登录,shell 将执行 /etc/.login、$HOME/.cshrc 和 $HOME/.login。缺省 /etc/profile 和 /etc/.login 文件将检查配额(请参见 quota(1M)),输出 /etc/motd,并检查邮件。如果文件 $HOME/.hushlogin 存在,将不会输出任何消息。命令解释程序的名称将设置为 −(短横线),后跟该解释程序路径名称的最后组成部分,如 −sh。
如果口令文件中的 login-shell 字段(请参见 passwd(4))为空,则使用缺省命令解释程序 /usr/bin/sh。如果此字段是 *(星号),则指定的目录将成为根目录。此时,将在新的级别重新执行 login,该级别必须拥有其自己的根结构。
执行时或 login 请求您的登录名时,通过向 login 提供其他参数可以展开或修改环境。参数可以采取 xxx 或 xxx=yyy 的形式。没有 =(等号)的参数将以下列形式置于环境中:
Ln=xxx
其中,n 是以 0 开始的数字,并且每次需要一个新的变量名称时将递增。包含 =(等号)的参数可不加修改地置于环境中。如果它们已出现在环境中,将替换较旧的值。
有两个例外:变量 PATH 和 SHELL 无法更改。这可以防止登录到受限 shell 环境的人员派生不受限的二级 shell。login 了解简单的单字符引用约定。在字符前键入 \ (反斜杠)即可引用该字符,并允许包含空格和制表符这样的字符。
此外,通过向 login 提供 –p 标志可以传递当前环境。此标志表示应该将当前定义的所有环境变量传递到新的环境(如果可能)。此选项不会绕过任何上述的环境变量限制。如果变量通过这两种方法传递,将优先选择登录行上指定的环境变量。
要启用 root 用户远程登录,请编辑 /etc/default/login 文件,在 CONSOLE=/dev/console 条目前插入 #(井号)。请参见“文件”部分。
对于文件(passwd(4) 和 shadow(4))名称服务或 ldap 名称服务中的帐户,当使用 enableShadowUpdate true 配置时,如果连续的失败登录尝试次数等于或超出配置的值,帐户可以配置为自动锁定。请参见 ldapclient(1M)、user_attr(4)、policy.conf(4) 和 pam_unix_auth(5)。
login 命令使用 pam(3PAM) 进行验证、帐户管理、会话管理和口令管理。列在 /etc/pam.conf 或 /etc/pam.d/login 中的 PAM 配置策略可指定要用于 login 的模块。以下是 pam.conf 文件的一部分,其中具有 login 命令使用 UNIX 验证、帐户管理和会话管理模块的相应条目:
login auth required pam_authtok_get.so.1 login auth required pam_dhkeys.so.1 login auth required pam_unix_auth.so.1 login auth required pam_dial_auth.so.1 login account requisite pam_roles.so.1 login account required pam_unix_account.so.1 login session required pam_unix_session.so.1
/etc/pam.d/ 中的等效 PAM 配置将是 /etc/pam.d/login 中的以下条目:
auth required pam_authtok_get.so.1 auth required pam_dhkeys.so.1 auth required pam_unix_auth.so.1 auth required pam_dial_auth.so.1 account requisite pam_roles.so.1 account required pam_unix_account.so.1 session required pam_unix_session.so.1
/etc/pam.conf 中的口令管理栈通常如下所示:
other password required pam_dhkeys.so.1 other password requisite pam_authtok_get.so.1 other password requisite pam_authtok_check.so.1 other password required pam_authtok_store.so.1
如果 /etc/pam.conf 和 /etc/pam.d/service 中没有 PAM 服务的条目,则将使用 /etc/pam.conf 中“”其他服务的条目。如果 /etc/pam.conf 中没有 “other” 服务的条目,那么将使用 /etc/pam.d/other 中的条目。如果列出多个验证模块,将提示用户输入多个口令。
当通过 rlogind 或 telnetd 调用 login 时,PAM 使用的服务名分别是 rlogin 或 telnet。
支持以下选项:
login 接受设备选项 device。device 被视为要执行 login 的 TTY 端口的路径名。使用设备选项有望提高 login 性能,因为 login 不需要调用 ttyname(3C)。–d 选项仅可用于 UID 和有效 UID 是 root 的用户。任何其他使用 –d 的尝试可导致 login 静默退出。
in.telnetd(1M) 用于传递有关远程主机和终端类型的信息。
作为 –h 选项的第二个参数的终端类型不应以连字符 (-) 开头。
用于将环境变量传递给登录 shell。
in.rlogind(1M) 用于传递有关远程主机的信息。
用于指定 PAM 系统信息库,该系统信息库应该用于通知 PAM 有关 “identity” 的信息(请参见下文的选项 –u)。如果没有传递 “identity” 信息,则没有使用系统信息库。
指示应该使用的 PAM 服务名称。通常情况下,此参数不是必需的,仅用于指定备用 PAM 服务名称。例如:Kerberized telnet 进程的 “ktelnet”。
指定与正在验证的用户关联的 “identity” 字符串。这通常与用户的 Unix 登录名不相同。对于 Kerberized 登录会话,这是与该用户关联的 Kerberos 主体名称。
指示尝试登录 rlogin 连接的远程端的人员名称。当 in.rlogind(1M) 在 Kerberized 模式下执行时,该守护进程将先处理终端和远程用户名信息,再调用 login,因此 “ruser” 数据是使用此命令行参数指示的。通常情况下(非 Kerberos 验证的 rlogin),login 守护进程会从客户端读取远程用户信息。
将返回以下退出值:
操作成功。
错误。
每个 csh 的初始命令。
禁止登录消息。
交互式 ksh 的用户命令(如果未设置 $ENV);在 /etc/ksh.kshrc 后执行。
csh 的用户登录命令。
sh 和 ksh 的用户登录命令。
可信主机名/用户名组合的专用列表。
系统范围的 csh 登录命令。
问题或项目标识。
交互式 ksh 的系统范围命令。
基于登录的设备权限。
每日消息 (Message-of-the-day)。
向尝试在计算机关机时登录的用户显示的消息。
口令文件。
系统范围的 sh 和 ksh 登录命令。
用户的加密口令列表。
用户的缺省命令解释程序。
上次登录的时间。
失败的登录尝试的记录。
记帐。
记帐。
用户 your-name 的邮箱。
可以在 /etc/default/login 中为以下标志设置缺省值。缺省值指定为 /etc/default/login 文件中的注释,例如 TIMEZONE=EST5EDT。
设置 shell 的 TZ 环境变量(请参见 environ(5))。
设置 shell 的 HZ 环境变量。
设置登录的文件大小限制。单位是磁盘块。缺省值为零(无限制)。
如果设置了值,root 用户只可以登录该设备。这不会阻止通过 rsh(1) 执行远程命令。注释掉该行可允许由 root 用户登录。
确定登录是否需要非空口令。
确定登录是否需要设置 SHELL 环境变量。
设置初始 shell PATH 变量。
设置根路径的初始 shell PATH 变量。
设置放弃登录会话前等待的秒数(在 0 和 900 之间)。
设置初始 shell 文件创建模式的掩码。请参见 umask(1)。
确定 syslog(3C) LOG_AUTH 工具是否应该用于在 LOG_NOTICE 级别上记录所有 root 用户登录,以及在 LOG_CRIT 中记录多次失败的登录尝试。
如果存在并大于零,则是发生 RETRIES 次失败尝试或 PAM 框架返回 PAM_ABORT 后,login 所等待的秒数。缺省值为 20 秒。最小值为 0 秒。不会强制任何最大值。
如果存在,设置登录失败消息输出到屏幕上之前所等待的秒数。这用于 PAM_ABORT 之外的所有登录失败。允许再进行一次登录尝试,前提是 RETRIES 尚未达到,或 PAM 框架返回了 PAM_MAXTRIES。缺省值为 4 秒。最小值为 0 秒。最大值为 5 秒。
su(1M) 和 sulogin(1M) 都受到 SLEEPTIME 值的影响。
设置登录的重试次数(请参见 pam(3PAM))。缺省值为 5。最大的重试次数为 15。对于使用自动锁定配置的帐户(请参见上文 SECURITY),帐户会锁定并退出 login。如果未配置自动锁定,则将退出 login 而不锁定该帐户。
用于在通过 syslog(3C) LOG_NOTICE 工具记录失败的登录消息之前,确定系统允许的失败登录尝试次数。例如,如果变量设置为 0,login 将记录所有失败的登录尝试。
在 /etc/default/login 列出的标志中,sshd(1M)(所看到的)将使用:
TIMEZONE
HZ
ALTSHELL
PATH
SUPATH
CONSOLE
PASSREQ
UMASK
ULIMIT
RETRIES
SYSLOG_AFTER_FAILED_LOGINS
有关下列属性的说明,请参见 attributes(5):
|
csh(1)、exit(1)、ksh(1)、ksh88(1)、mail(1)、mailx(1)、newgrp(1)、passwd(1)、rlogin(1)、rsh(1)、sh(1)、shell_builtins(1)、telnet(1)、umask(1)、in.rlogind(1M)、in.telnetd(1M)、user_attr(4)、policy.conf(4)、logins(1M)、quota(1M)、sshd(1M)、su(1M)、sulogin(1M)、syslogd(1M)、useradd(1M)、userdel(1M)、pam(3PAM)、rcmd(3SOCKET)、syslog(3C)、ttyname(3C)、auth_attr(4)、exec_attr(4)、hosts.equiv(4)、issue(4)、logindevperm(4)、loginlog(4)、nologin(4)、nsswitch.conf(4)、pam.conf(4)、passwd(4)、policy.conf(4)、profile(4)、shadow(4)、user_attr(4)、utmpx(4)、wtmpx(4)、attributes(5)、environ(5)、pam_unix_account(5)、pam_unix_auth(5)、pam_unix_session(5)、pam_authtok_check(5)、pam_authtok_get(5)、pam_authtok_store(5)、pam_dhkeys(5)、pam_passwd_auth(5)、termio(7I)
无法匹配用户名或口令。
已拒绝 Root 用户登录。检查 /etc/default/login 中的 CONSOLE 设置。
找不到 passwd(4) 数据库中指定的用户起始目录,或其中包含错误的权限。请与您的系统管理员联系。
无法执行 passwd(4) 数据库中指定的 shell。请与您的系统管理员联系。
该计算机处于关机过程中,已禁用登录。
UID 大于 76695844 的用户不受口令有效期影响,并且系统不会记录其上次登录的时间。
如果使用 CONSOLE 设置来禁用 root 用户登录,则也应该禁用 root 用户远程执行命令。有关更多详细信息,请参见 rsh(1)、rcmd(3SOCKET) 和 hosts.equiv(4)。