Go to main content

手册页部分 1:用户命令

退出打印视图

更新时间: 2022年7月27日 星期三
 
 

login(1)

名称

login - 登录系统

用法概要

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(5))。仅对以下情况支持口令更新配置。

  • passwd: files

  • passwd: files nis

配置不符合要求会阻止用户登录系统,因为 passwd(1) 会失败。如果未能在一定时间内成功完成登录,则可能已无提示地断开连接。

成功登录后,将更新记帐文件。设备所有者、组和权限将根据 /etc/logindevperm 文件的内容进行设置,并将输出您上次登录的时间(请参见 logindevperm(5))。

用户 ID、组 ID、辅助组列表和工作目录将初始化,并启动命令解释程序。

基本环境会如下进行初始化:

HOME=your-login-directory
LOGNAME=your-login-name
PATH=/usr/bin:
SHELL=last-field-of-passwd-entry
MAIL=/var/mail/

对于 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(8)),输出 /etc/motd,并检查邮件。如果文件 $HOME/.hushlogin 存在,将不会输出任何消息。命令解释程序的名称将设置为 -(短横线),后跟该解释程序路径名称的最后组成部分,如 -sh。

如果口令文件中的 login-shell 字段(请参见 passwd(5))为空,则使用缺省命令解释程序 /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(5) 和 shadow(5))名称服务或 ldap 名称服务中的帐户,当使用 enableShadowUpdate true 配置时,如果连续的失败登录尝试次数等于或超出配置的值,帐户可以配置为自动锁定。请参见 ldapclient(8)、user_attr(5)、policy.conf(5) 和 pam_unix_auth(7)。

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_unix_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_unix_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   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。

选项

支持以下选项:

–d device

login 接受设备选项 device。device 被视为要执行 login 的 TTY 端口的路径名。使用设备选项有望提高 login 性能,因为 login 不需要调用 ttyname(3C)。–d 选项仅可用于 UID 和有效 UID 是 root 的用户。任何其他使用 –d 的尝试可导致 login 静默退出。

–h hostname [terminal]

in.telnetd(8) 用于传递有关远程主机和终端类型的信息。

作为 –h 选项的第二个参数的终端类型不应以连字符 (-) 开头。

–p

用于将环境变量传递给登录 shell。

–r hostname

in.rlogind(8) 用于传递有关远程主机的信息。

–R repository

用于指定 PAM 系统信息库,该系统信息库应该用于通知 PAM 有关 “identity” 的信息(请参见下文的选项 –u)。如果没有传递 “identity” 信息,则没有使用系统信息库。

–s service

指示应该使用的 PAM 服务名称。通常情况下,此参数不是必需的,仅用于指定备用 PAM 服务名称。例如:Kerberized telnet 进程的 “ktelnet”。

–u identity

指定与正在验证的用户关联的 “identity” 字符串。这通常与用户的 Unix 登录名不相同。对于 Kerberized 登录会话,这是与该用户关联的 Kerberos 主体名称。

–U ruser

指示尝试登录 rlogin 连接的远程端的人员名称。当 in.rlogind(8) 在 Kerberized 模式下执行时,该守护进程将先处理终端和远程用户名信息,再调用 login,因此 "ruser" 数据是使用此命令行参数指示的。通常情况下(非 Kerberos 验证的 rlogin),login 守护进程会从客户端读取远程用户信息。

退出状态

将返回以下退出值:

0

操作成功。

非零

错误。

文件

$HOME/.cshrc

每个 csh 的初始命令。

$HOME/.hushlogin

禁止登录消息。

$HOME/.kshrc

交互式 ksh 的用户命令(如果未设置 $ENV);在 /etc/ksh.kshrc 后执行。

$HOME/.login

csh 的用户登录命令。

$HOME/.profile

sh 和 ksh 的用户登录命令。

$HOME/.rhosts

可信主机名/用户名组合的专用列表。

/etc/.login

系统范围的 csh 登录命令。

/etc/issue

问题或项目标识。

/etc/ksh.kshrc

交互式 ksh 的系统范围命令。

/etc/logindevperm

基于登录的设备权限。

/etc/motd

每日消息 (Message-of-the-day)。

/etc/nologin

向尝试在计算机关机时登录的用户显示的消息。

/etc/passwd

口令文件。

/etc/profile

系统范围的 sh 和 ksh 登录命令。

/etc/shadow

用户的加密口令列表。

/usr/bin/sh

用户的缺省命令解释程序。

/var/adm/lastlog

上次登录的时间。

/var/adm/loginlog

失败的登录尝试的记录。

/var/adm/utmpx

记帐。

/var/adm/wtmpx

记帐。

/var/mail/your-name

用户 your-name 的邮箱。

/etc/default/login

可以在 /etc/default/login 中为以下标志设置缺省值。缺省值指定为 /etc/default/login 文件中的注释,例如 ULIMIT=0。

/etc/default/login 文件已过时。However, you can use the svc:/system/account-policy:default service to set the corresponding SMF properties.

下表列出了 /etc/default/login 中的属性与 SMF 属性之间的映射:

属性位置/etc/default/login
对应的 SMF 属性
HZ
login/environment/hz
ULIMIT
login/environment/ulimit
CONSOLE
login_policy/root_login_device
PASSREQ
login_policy/password_required
ALTSHELL
login/environment/set_shell
PATH
login/environment/path
SUPATH
login/environment/root_path
TIMEOUT
login_policy/timeout
UMASK
login_environment/umask
SYSLOG
login/log/syslog
DISABLETIME
login_policy/disabletime
SLEEPTIME
login_policy/sleeptime
RETRIES
login_policy/retries
SYSLOG_FAILED_LOGINS
login/log/syslog_failed_attempts

有关管理 SMF 属性的信息,请参见 account-policy (8S) 手册页。

/etc/default/login 文件中的属性的描述如下:

HZ

设置 shell 的 HZ 环境变量。

ULIMIT

设置登录的文件大小限制。单位是磁盘块。缺省值为零(无限制)。

CONSOLE

如果设置了值,root 用户只可以登录该设备。这不会阻止通过 rsh(1) 执行远程命令。注释掉该行可允许由 root 用户登录。

PASSREQ

确定登录是否需要非空口令。

ALTSHELL

确定登录是否需要设置 SHELL 环境变量。

PATH

设置初始 shell PATH 变量。

SUPATH

设置根路径的初始 shell PATH 变量。

TIMEOUT

设置放弃登录会话前等待的秒数(在 0 和 900 之间)。

UMASK

设置初始 shell 文件创建模式的掩码。请参见 umask(1)。

SYSLOG

确定 syslog(3C) LOG_AUTH 工具是否应该用于在 LOG_NOTICE 级别上记录所有 root 用户登录,以及在 LOG_CRIT 中记录多次失败的登录尝试。

DISABLETIME

如果存在并大于零,则是发生 RETRIES 次失败尝试或 PAM 框架返回 PAM_ABORT 后,login 所等待的秒数。缺省值为 20 秒。最小值为 0 秒。不会强制任何最大值。

SLEEPTIME

如果存在,设置登录失败消息输出到屏幕上之前所等待的秒数。这用于 PAM_ABORT 之外的所有登录失败。允许再进行一次登录尝试,前提是 RETRIES 尚未达到,或 PAM 框架返回了 PAM_MAXTRIES。缺省值为 4 秒。最小值为 0 秒。最大值为 5 秒。

su(8) 和 sulogin(8) 都受到 SLEEPTIME 值的影响。

RETRIES

设置登录的重试次数(请参见 pam(3PAM))。缺省值为 5。最大的重试次数为 15。对于使用自动锁定配置的帐户(请参见上文 SECURITY),帐户会锁定并退出 login。如果未配置自动锁定,则将退出 login 而不锁定该帐户。

SYSLOG_FAILED_LOGINS

用于在通过 syslog(3C) LOG_NOTICE 工具记录失败的登录消息之前,确定系统允许的失败登录尝试次数。例如,如果变量设置为 0,login 将记录所有失败的登录尝试。

/etc/default/login 中列出的标志中,sshd(8) 使用:

  • PATH

  • SUPATH

  • UMASK

属性

有关下列属性的说明,请参见 attributes(7):

属性类型
属性值
可用性
system/core-os
接口稳定性
Committed(已确定)

另请参见

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)、rcmd(3C)、syslog(3C)、ttyname(3C) 和 pam(3PAM)、termio(4I)、auth_attr(5)、exec_attr(5)、hosts.equiv(5)、issue(5)、logindevperm(5)、loginlog(5)、nologin(5)、nsswitch.conf(5)、pam.conf(5)、passwd(5)、policy.conf(5)、policy.conf(5)、profile(5)、shadow(5)、user_attr(5)、user_attr(5)、utmpx(5)、wtmpx(5)、attributes(7)、environ(7)、pam_authtok_check(7)、pam_authtok_get(7)、pam_authtok_store(7)、pam_dhkeys(7)、pam_passwd_auth(7)、pam_unix_account(7)、pam_unix_auth(7)、pam_unix_session(7)、in.rlogind(8)、in.telnetd(8)、logins(8)、quota(8)、sshd(8)、su(8)、sulogin(8)、syslogd(8)、useradd(8)、userdel(8)、account-policy (8S)

诊断

Login incorrect

无法匹配用户名或口令。

Not on system console

已拒绝 Root 用户登录。检查 /etc/default/login 中的 CONSOLE 设置。

No directory! Logging in with home=/

找不到 passwd(5) 数据库中指定的用户起始目录,或其中包含错误的权限。请与您的系统管理员联系。

No shell

无法执行 passwd(5) 数据库中指定的 shell。请与您的系统管理员联系。

NO LOGINS: System going down in N minutes

该计算机处于关机过程中,已禁用登录。

警告

如果使用 CONSOLE 设置来禁用 root 用户登录,则也应该禁用 root 用户远程执行命令。有关更多详细信息,请参见 rsh(1)、rcmd(3C) 和 hosts.equiv(5)。