# 登录

Linux 是一个多用户多任务的分时操作系统,用户以用户名和密码(又称为口令)登录后才能使用该系统。

  • 常见的登录方式:
    • 本地终端
    • 远程登录 :可采用以下协议:
      • SSH
      • Telnet
      • VNC :虚拟网络控制台(Virtual Network Console),通过 GUI 界面进行远程登录。
  • 每创建一个终端时,系统都会先执行 login 命令,让用户登录。
  • 当用户登录之后,系统会根据用户身份创建一个 shell 进程,显示终端界面供用户操作。
    • 用户可以在终端中执行任意命令,创建其它子进程,甚至创建嵌套的 shell 进程。
    • 登录时那个 shell 进程称为 login shell ,是用户创建的所有普通进程的父进程。
      • 其它 shell 进程称为 non-login shell 。
    • 当用户退出 login shell 时,系统就会注销用户,终止 login shell 的所有子进程。

# 登录与登出

# login

$ login <username>  # 以指定用户的身份登录,接着要按提示输入密码

# logout

$ logout            # 在 login shell 中使用就会注销用户,在 non-login shell 中使用无效

# exit

$ exit [n]          # 退出当前 shell ,并指定退出码(如果退出了 login shell ,就相当于 logout)

# 查看登录信息

# logname

[root@CentOS ~]# logname   # 查看自己的登录用户名
leo

# whoami

[root@CentOS ~]# whoami    # 查看当前的用户名
root

# tty

[root@CentOS ~]# tty       # 查看当前的终端名
/dev/pts/0

# w

[root@CentOS ~]# w    # 查看已登录的所有用户的信息
09:40:51 up 11 days, 17:12,  2 users,  load average: 0.00, 0.08, 0.12
USER     TTY      FROM          LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1      09:44    1.00s  0.01s  0.00s w
root     pts/2    10.0.0.2      Tue09   22:05m  0.20s  0.18s python3

显示结果中,每行表示一个已登录的用户的信息,每列的含义如下:

  • USER :登录的用户名。
  • TTY :登录终端(不是登录后打开的其它终端)。
  • FROM :登录 IP 。
  • LOGIN :登录时刻。
  • IDLE :用户多久未操作了。
  • JCPU :用户正在运行的所有进程的运行时长。
  • PCPU :用户正在运行的前台进程的运行时长。
  • WHAT :用户正在执行什么命令。

# who

$ who       # 查看已登录的所有用户的信息
      am i  # 只查看自己的信息
      -b    # 查看系统的开机时间
      -r    # 查看当前的 run level

# 查看登录历史

  • /var/log/secure 文件中记录了用户登录时的认证、授权信息,包括登录成功的、登录失败的。

  • /var/log/wtmp 文件中记录了所有登录成功的历史,还包括开机时刻。

    • 它是一个二进制文件,只能用 last 命令查看。
    • 当该文件不存在时,系统就不会进行记录。
  • /var/log/btmp 文件中记录了所有登录失败的历史记录。

    • 它是一个二进制文件,只能通过 lastb 命令查看。
    • 当该文件不存在时,系统就不会进行记录。
    • 系统会自动定期删除该文件中太旧的记录。
    • 当主机被恶意用户频繁尝试登录时,该文件的体积容易增加到 1G 以上,导致正常登录的耗时增加几秒。此时需要清空该文件,并限制恶意用户尝试登录。

# last

$ last      # 显示所有登录成功的历史记录、开机 reboot 时刻
    -F      # 显示完整的时刻
    -n 2    # 只显示几行
    -x      # 增加显示 shutdown 时刻、run level
  • 例:
    [root@CentOS ~]# last
    root     pts/0    10.0.0.1    Wed Nov 20 09:44   still logged in
    root     pts/0    10.0.0.1    Wed Nov 20 03:00 - 03:00  (00:00)
    root     pts/0    10.0.0.1    Wed Nov 20 02:00 - 02:00  (00:00)
    root     pts/0    10.0.0.1    Wed Nov 20 01:00 - 01:00  (00:00)
    
    上例中,各列分别表示:
    • 登录的用户名
    • login shell
    • 登录 IP :如果为空则表示从本地登录。
    • 登录时刻
    • 注销时刻:取值为 down 则表示直到系统关机,取值为 crash 则表示知道系统崩溃。
    • 登录时长:单位为分钟。
  • 例:
    [root@CentOS ~]# last -Fx
    root     tty1                          Tue Nov  2 12:09:36 2021   still logged in
    runlevel (to lvl 3)   4.14.105-19-0016 Tue Nov  2 12:05:55 2021 - Sat Jan 29 11:18:50 2022 (87+23:12)
    reboot   system boot  4.14.105-19-0016 Tue Nov  2 12:05:28 2021 - Sat Jan 29 11:18:50 2022 (87+23:13)
    shutdown system down  4.14.105-19-0016 Tue Nov  2 12:03:15 2021 - Tue Nov  2 12:05:28 2021  (00:02)
    
    • 系统正常重启时,在 reboot 之前会有一行 shutdown 记录,否则属于异常重启,比如 crash 。

# lastb

$ lastb   # 显示所有登录失败的历史记录