# 登录
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   # 显示所有登录失败的历史记录