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