Linux常用命令(博客地图):https://blog.youkuaiyun.com/sysukehan/article/details/105804511
具体命令使用请参考《Linux常用命令(用户及用户组相关操作)》
用户登录终端过程
1、先找寻/etc/passwd里面是否有输入的账号,如果没有则跳出,如果有的话则将该账号对应的UID与GID(在/etc/group中)读出来,另外,该账号的主文件夹与shell设置也一并读出。
2、核对密码表。这时Linux会进入/etc/shadow里面找出对应的账号与UID,然后核对一下刚才输入的密码与里面的密码是否相符。
3、如果一切正常,则登录成功,进入shell管控的阶段。
/etc/passwd文件结构
每一行代表一个账号,有几行就代表有几个账号在系统中。需要特别留意的是,里面很多账号本来就是系统正常运行所必须要的,可以简称为系统账号,例如bin,daemon,adm,nobody等,这些账号不能随意删除。
以root那一行为例,root:x:0:0:root:/root:/bin/bash,每一行使用“:”分隔开,共有七个字段,分别是:
1、账号名称
就是账号,用来对应UID的。例如root的UID对应就是0(第三字段).
2、密码
早期UNIX系统的密码就是放在这个字段上的,但是因为这个文件的特性是所有的程序都能够读取,这样一来很容易造成密码数据被窃取,因此后来就将这个字段的密码数据改放到/etc/shadow中了,所以这个字段是“x”。
3、UID
用户标识符,Linux对于UID有以下几个限制:
id范围
0(系统管理员):当UID是0时,代表这个账号是“系统管理员”,所以当需要让其他的账号名称也具有root权限时,将该账号的UID改为0即可。也就是说,一个系统上面的系统管理员不见得只有root。不过,很不建议有多个账号的UID是0.
1~499(系统账号):保留给系统使用的ID,其实除了0之外,其他的UID权限与特性并没有不一样。默认500以下的数字让给系统作为保留账号只是一个习惯。由于系统上面启动的服务希望使用较小的权限去运行,因此不希望使用root的身份去执行这些服务,所以我们就得要提供这些运行中程序的所有者账号才行。这些系统账号通常是不可登录的,所以才会有/sbin/nologin这个特殊的shell存在。
根据系统账号的由来,通常系统账号又被分为两种:
1~99:由Linux自行创建的系统账号。
100~499:若用户有系统账号需求时,可以使用的账号UID。
500~65535(可登录账号):给一般用户用的,事实上,目前的LInux内核已经可以支持到4294967295(2^32-1)这么大的UID号码了。
4、GID
这个与/etc/group有关!其实/etc/group与/etc/passwd差不多,只是它用来规定组名与GID的对应而已!
5、用户信息说明列
用于解释账号的意义。
6、主文件夹
用户的主文件夹,以root为例,root的主文件夹在/root中,所以当root登录之后,就会立刻跑到/root目录里面。如果有个账号的使用空间特别大,可以修改这个字段把该账号的主文件夹移动到其他的硬盘。默认的用户主文件夹在/home/yourIDname中。
7、Shell
用户登录后会取得一个Shell来与系统的内核通信以进行用户的操作任务,这里指定的是用户的默认Shell,就是/bin/bash。需要注意的是,/sbin/nologin可以用来替代成让账号无法取得Shell环境的登录操作。
/etc/shadow文件结构
root:$6$yMuqjFCP$p6z3v3bTa842XU/HRjmWALrXv723ZTepEgwT1G2M3kSI2M7hyGak6api1LhJu8smwz5K8r8MER1O..5hjWM7R1:18340:0:99999:7:::
基本上,shadow同样以“:”作为分隔符,共九个字段。
1、账号名称
密码也需要与账号对应,因此,文件第一列就是账号,必须要与/etc/passwd相同才行。
2、密码
经过加密的密码。
3、最近修改密码的日期
这个日期是以1970年1月1日作为1而累加的日期,1971年1月1日修改的话这个字段值就会是366.
4、密码不可被修改的天数(与第3个字段相比)
这个字段记录了这个账号的密码在最近一次被更改之后需要经过几天才可以再次被更改,如果是0的话,表示密码可以随时被改动。如果是20,那么设置密码之后20天内都不能再修改密码。
5、密码需要重新更改的天数(与第3个字段相比)
这个字段可以指定在最近的一次更改密码后在多少天内需要再次更改密码。必须要在这个天数内重新设置密码,否则这个账号的密码将会变为过期特性。而如果像例子中的是99999的话,那就表示密码不需要强制更改。
6、密码需要更改期限钱的警告天数(与第5个字段相比)
当账号的密码有效期限快要到的时候(第5个字段),系统会依据这个字段的设置发出“警告”给这个账号,提醒他再过n天密码就要过期了,请尽快重新设置你的密码。例子中这个值是7,意思是密码到期之前的7天之内,系统会警告该用户。
7、密码过期后的账号宽限时间(密码失效日)(与第5个字段相比)
密码有效日期为“更新日期”(第3个字段)+“重新更改日期”(第5个字段),过了该期限后用户依旧没有更新密码,那密码就算是过期了。虽然密码过期但是该账号还是可以用来进行其他工作的,包括登录系统取得bash。不过如果密码过期了,那登录系统时,系统会强制要求必须重新设置密码才能登录继续使用,这是密码过期的特性。密码过期后几天(就是这里配置的值),如果用户还是没有登录修改密码,那么这个账号的密码就失效了,再也无法使用该密码登录了。注意密码过期和密码失效并不相同。
8、账号失效日期
这个日期和第三个字段一样,都是使用1970年以来的总日期设置。这个字段表示:这个账号在此字段规定的日期之后,将无法再使用。就是所谓的“账号失效”,此时不论你的密码是否过期,这个“账号”都不能再被使用。这个字段会被使用通常应该是在“收费服务”的系统中,可以规定一个日期让该账号不能再使用了。
9、保留字段
/etc/group文件结构
这个文件每一行代表一个用户组,也是以冒号“:”作为字段的分隔符,共分为四列。以adm:x:4:syslog,kehan为例。
1、用户组名称
2、用户组密码
通常不需要设置,这个设置通常是给“用户组管理员”使用的,目前很少有这个机会设置用户组管理员。同样,密码已经移动到/etc/gshadow中去了,因此这个字段值是“x”。
3、GID
用户组ID,/etc/passwd第4个字段使用的GID对应的用户组名就是这里对应出来的。
4、用户组支持的账号名称
一个账号可以加入多个用户组,某个账号想要加入此用户组时,将该账号填入这个字段即可。例子中adm用户组支持的账号有syslog和kehan。
文件属性显示
每一个文件都会有所谓的所有者ID与用户组ID,当有要显示文件属性的需求时(如ls -al),系统会依据/etc/passwd与/etc/group的内容,找到UID/GID对应的账号与组名再显示出来。如图中的第三列和第四列。
参考资料
《鸟哥的Linux私房菜基础学习篇(第三版)》