linux登录和自定义登录信息


1.linux登录过程分析

回到顶部

不管是哪种模式启动linux,在使用前都需要用户登录。 linux命令行的登录功能由login进程提供,login进程的可执行程序文件一般为/usr/bin/login,login登录界面如下:

                Ubuntu 12.04.1 LTS initroot tty1
 
                initroot login: root
                Password: 
              
login首先显示/etc/issue文件中的内容,上面的第一行就是来自/etc/issue文件, Ubuntu 12.04.1 LTS为Ubuntu的版本号,initroot为计算机主机名称,tty1为登录的控制终端名。 系统管理员可以通过编辑/etc/issue文件自定义该部分内容的显示。
接下来login会要求用户输入用户名和密码。 第二行initroot login提示用户输入用户名,initroot为主机名,login即为login进程自己的程序名,提示用户输入用户名。
输入用户名后会出现第三行password提示输入密码,login不会将密码明文显示到屏幕。
login通过读取用户账号文件/etc/passwd和/etc/shadow,验证用户输入的用户名和密码是否匹配, 如果用户名和密码口令匹配,登录成功后的界面显示如下:
                Last failed login: Mon Dec 30 20:39:54 CST 2019 from 168.181.11.252 on ssh:notty
                There were 14 failed login attempts since the last successful login.
                Last login: Fri Dec 27 11:38:54 2019 from 61.177.142.236

                Welcome to Alibaba Cloud Elastic Compute Service !

                [root@initroot ~]#
            
登录成功后,login会首先显示一些账号登录的日志信息,例如上面的1-2行,包括本账号上一次登入系统的时间与终端机名称等信息,登录失败的信息。
这几行信息最好要特别留,因为如果有别有用心的人在你不知情的情况下用你的账号登录过系统,那么这里显示的信息就可能和你预期的不太一样。
显示完登录日志信息后,login进程最终会启动bash进程。 bash进程首先会读取/etc/motd文件,该文件并不一定存在,如果/etc/motd文件存在,bash进程会读取并显示/etc/motd文件中的内容, 该文件中一般会有一些登录欢迎信息。
系统管理员可以通过编辑该文件自定义登录欢迎信息,这里建议最好不要写欢迎信息,可以是一些操作忠告或警告提示类信息。
显示完/etc/motd文件信息后,bash就会显示自己的命令行提示符,如上面的最后一行所示,即为bash的命令行提示符。
此时用户就可以在命令行输入命令了。
linux登录大体经过以下几个步骤:
1.login进程读取并显示/etc/issue文件;
2.login进程提示用户输入用户名;
3.login进程提示用户输入密码口令;
4.login进程读取用户账号文件/etc/passwd和/etc/shadow,验证用户输入的用户名和密码是否匹配;
5.如果用户名和密码不匹配,login进程重新提示用户输入;
6.如果用户名和密码匹配,表明登录成功,login进程显示用户登录日志信息;
7.login进程启动bash进程;
8.bash进程启动后首先读取并显示/etc/motd文件;
9.bash显示自己的命令行提示符,用户即成功进入linux的命令行界面。
由上面的登录过程可以看出,登录过程涉及两个重要的进程,一个是login进程,另一个是bash进程。
linux的登录功能由login进程提供,我们甚至可以在登录成功后, 再次运行login命令进行登录,通过whereis login命令可以看到login的可执行程序文件为/bin/login或者/usr/bin/login。
而bash进程由login进程启动,是用户成功登陆后启动的第一个进程,bash作为linux命令行的提供者, 是linux下最常用的shell,此后用户和linux的交互就是通过这个bash进行。
关于bash的更多信息参考:
bash shell linux shell运行模式
登录过程中还涉及到四个重要的系统文件,其中/etc/passwd和/etc/shadow文件为系统账号管理相关文件。 关于这两个文件可以参考:账号管理相关的系统文件
/etc/issue和/etc/motd文件分别是登录前和登录后会显示的文件。/etc/issue文件在登录前由login进程读取并显示, 而/etc/motd文件则在用户成功登录后由bash进程读取并显示。 系统管理员可以通过编辑这两个文件自定义登录过程的显示信息。

2./etc/issue文件和/etc/issue.net文件

回到顶部

/etc/issue文件在用户登录前由login进程读取并显示, /etc/issue文件内容如下所示:

              [root@initroot ~]# cat /etc/issue
              \S
              Kernel \r on an \m
            
以上以CentOS环境作为示范,默认有三行,该文件中有一些转义字符,例如\r和\m, 有点类似$PS1变量中的转义字符。
通过man issue配合man agetty我们可以得到/etc/issue文件中各种转义字符的含义:
\d 本地端时间的日期;
\l 显示第几个终端机接口;
\m 显示硬件的等级(i386/i486/i586/i686...);
\n 显示主机的网络名称;
\O 显示domain name;
\r 操作系统的版本(相当于uname -r);
\t 显示本地端时间的时间;
\S 操作系统的名称;
\v 操作系统的版本。
例如我们希望登录画面显示如下:
                CentOS Linux 7 (Core) (terminal: tty1)
                Date: 2015-07-08 17:29:19
                Kernel 3.10.0-229.el7.x86_64 on an x86_64
                Welcome!
            
注意,tty1显示为登录的tty终端代号,会随着登录终端的不同而不同,日期则是再按下enter后就会所有不同。
我们以root身份通过vim编辑/etc/issue文件:
              [peter@initroot ~]# sudo vim /etc/issue
                \S (terminal: \l)
                Date: \d \t
                Kernel \r on an \m
                Welcome!
              
注意文件最后还有一个空行。
除了/etc/issue文件外还有个/etc/issue.net文件!这是提供给telnet远程登录程序用的。 当用户使用telnet连接到主机时,主机的登入画面就会显示/etc/issue.net而不是/etc/issue!

3./etc/motd文件

回到顶部

/etc/issue文件在登录前由login进程读取并显示, 而/etc/motd文件则在用户成功登录后由bash进程读取并显示。 系统管理员可以通过编辑该文件,将一些警告信息告知登录用户。 例如告知登录用户谨慎操作,不要删库跑路以及系统的维护时间等信息。
以root身份编辑/etc/motd文件:

              [root@initroot ~]# sudo vim /etc/motd
              Hello guy,Welcome to initroot Cloud Elastic Compute Service !
              Our server will be maintained at 2020/06/09 0:00 ~ 24:00.
              Please don't login server at that time. 
              be careful not to be fool,
              have nice time.
            
当用户(包括root)登入主机后,就看到这些信息:
              Last login: Fri Feb 28 21:31:13 2020 from 223.64.148.49
              Hello guy,Welcome to initroot Cloud Elastic Compute Service !
              Our server will be maintained at 2020/06/09 0:00 ~ 24:00.
              Please don't login server at that time. 
              be careful not to be fool,
              have nice time.
            

4.使用普通账号登录

回到顶部

在Linux系统下最好使用一般账号登录。
系统管理员账号root具有系统最高权限,任何操作都不会受到限制, root可以删除任何一个文件和目录,这是运维工作中非常危险的动作。
一旦误删除重要文件,轻则造成系统崩溃,重则导致企业重要数据财产丢失而导致破产!
这并不是危言耸听,而是实际发生的事情!
作为一名光荣合格的linux系统管理员,一定要恪守职业操守,谨慎操作,千万不能删库跑路啊!
通常系统管理员都会有一个普通账号,平时以一般账号登录Linux主机。
需要用到root权限的时候就在执行命令的时候前面加上sudo,以临时root身份执行命令即可。
或者用su命令切换到root身份。
关于帐号管理更多内容参考:linux用户管理

initroot原创,转载请注明出处www.initroot.com技术交流群:59909790

100次点赞 100次阅读