Linux用户管理
前言
本节我们开始讨论关于linux系统中关于用户管理的部分,涉及到用户,组,其他等名词(UGO: user, group, others)。我们将会讨论如何根据系统的内部文件进行对用户和组的相关信息进行查看。
一、用户/组信息存储的文件
1.用户基本信息文件
etc文件用来存储系统的配置文件,用户的基本信息文件在目录/etc/passwd文件中:
cat /etc/passwd
我们可以看到很多文字,比如在我整理笔记的Ubuntu 20.04 LTS系统中,我们只看前五行:
cat /etc/passwd | head -5
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
这个文件其实是一个表格,为什么这么说呢,在文件的每一行中,用:来作为分割符号,:是列之间的分割副。所以这个文件每一行有7列,虽然有很多行,但是一定是7列。每一行就是一个用户的基本信息。
这7列分别为:
用户名 : 密码占位符 : 用户的ID(UID) : 用户的组ID(GID) : 描述 : HOME : shell
-
用户名:即为不同用户之间的名字,用户之间的名字是独一无二的,不允许用纯数字作为用户名。
-
密码占位符:这个具体要看shadow文件,这里可以解释为需要密码才能登陆。
-
UID:User Identification,用户的身份证号。系统规定超级管理员root为0,1-499为系统用户,1000+为普通用户。
-
GID:Group Identification,用户所在的组号。一般这里的组号和用户的UID是一样的。
-
描述:相当于代码的注释,这个字段是对用户的补充信息,一般计算机会把用户名放在这里,在不特意添加描述的情况下。
-
HOME:家目录,登陆系统之后进入的目录,在这里我们的root用户的登陆目录就是 /root ,只有超级管理员在这个文件夹,其他的用户都在 /home/用户名 下。
-
shell:登陆的shell,命令解释器。把命令解释为机器需要进行的操作。
shell的中文意思为壳,shell本身也是操作系统的一个外壳,用户不可能直接进入到操作系统内核进行操作,之能在外壳上面进行操作,shell的版本很多,有:
ashell,bshell,cshell,tshell,bash就是bashell。
我们linux系统的外壳就在/bin/bash,与其对应的就是/bin/nologin。如果一个用户的shell是这个nologin,那么这个用户不能登陆操作系统。
下面是上面两个用户信息的表格整理
用户名 | 密码占位符 | 用户的ID(UID) | 用户的组ID(GID) | 描述 | HOME | shell |
---|---|---|---|---|---|---|
root | x | 0 | 0 | root | /root | /bin/bash |
william | x | 1000 | 1000 | william | /home/william | /bin/bash |
2.用户的密码信息文件
用户的密码信息文件存储在 /etc/shadow 文件中,我们用命令
cat /etc/shadow | head -1
查看第一个用户root的密码可以看到:
root:$6$zc9dgtDKmZTlKBw3$AayEA47f3RWjZUYZbGoKuGoyrQ4qB4T66fBAd6Tgoo4JWY/4jbaObzo1O3266o.bnUNev0hXJKLnWnFVjItr7.:18639:0:99999:7:::
在我的Ubuntu系统中,我的用户名密码信息如下:
william:$6$RkseV/dErKbPRFP8$.tJVB3eX/vL.4sWq4BPAt3uCiQtzupvBeBuUNATYkBf6rLHYuIhb2xNu/ezfiSfDcouUCZCDivCswHPGwxn7z0:18639:0:99999:7:::
这一行非常的乱,这一加密后的文件。
加密的意义如下:
- 保持密码的私密性,不会让别人知道。
- 保持密码的完整性,不会被别人破坏。
- 保持密码的不可否认性。
对称的密码可以被破解,非对称的不能
一些普遍的加密算法有:
MD5哈希加密算法、DES,3DES,AES对称加密算法、DF散列对数加密算法等等……
回到我们刚才root的shadow文件中:
-
第一列为用户名。与passwd文件中的用户名是一致的。
-
第二列就是加密后的密码。虽然很乱,但是也有一定的固定格式,由两部分组成,第一部分就是加密的方法,比如root的加密方法为 6 6 6,表明是用SHA-512进行加密的。如果是*代表账号被锁定,!!代表用户密码已经过期。
如果是 1 1 1表明使用MD5进行加密。
2 2 2表明用Blowfish进行加密
5 5 5表明用SHA-256进行加密
第二部分就是加密之后的密码值。
-
第三列是最后一次修改时间。表示的是从某个时刻起,到用户最后一次修改口令的天数。UNIX是从1970年1月1日,到最后一次修改时间2021年1月1日,过了多少天。
-
第四列是最小时间间隔。两次修改密码之间的最少天数,0代表当天就可以该密码,5表示密码必须持续5天才可以修改密码。
-
第五列是最大时间间隔。指这个用户的密码最多可以存储多少天不改变(密码的有效期),过了这个时间间隔必须更改密码。99999代表永久。如果已经过了密码的有效期,再次登陆的时候必须修改密码。
-
第六列是警告时间。如果它为7,那么我们距离密码过期还有7天结束的时候会发出警告,询问是否要修改密码。
-
第七列是不活动时间,如果它为7,表示用户如果不登陆系统7天将会被禁用冻结,但不会被注销。
-
第八列是失效时间,如果它为30,那么创建30天后用户将会不能使用。账户的生命只有30天。
-
第九列为保留。
下面是上面william用户的信息的表格整理
用户名 | 加密密码 | 修改时间 | 最小时间 | 最大时间 | 警告时间 | 不活动时间 | 失效时间 | 保留 |
---|---|---|---|---|---|---|---|---|
william | 6 6 6… | 18639 | 0 | 99999 | 7 | - | - | - |
3.组信息文件
关于用户的组信息文件存储在 /etc/group 文件中。
可以用这个命令进行查看:
cat /etc/group
可以看到文件中的每一行格式大致如下:
william: x :1000:
这个就可以类比我们的passwd文件,四列为:
组名 | 组密码 | 组ID | 组成员 |
---|---|---|---|
william | x | 1000 | 空 |
二、用户管理
下面给出如何在linux系统中对用户进行一些日常的管理操作,包括创建用户,用户密码,删除用户,其他选项管理。
1.创建用户(useradd)
创建用户的命令一般为:
useradd username
这个指令将会创建一个名字为username的用户。
如果这个时候再次执行这个指令,将会提示username用户已经存在。
同时,我们可以用指令id对用户的uid进行查询:
id username
这时终端将会输出:
uid=1001(username) gid=1001(username) 组=1001(username)
由于我们没有新建过其他用户,安装系统时的常用用户ID为1000,新建用户之后从1000往后依次分配UID。
创建用户的时候可以指定相应的信息,比如我们可以指定某个用户的UID
-u 指定用户UID
-d 指定用户Home目录(directory)
其他参数可以用以下命令查看:
useradd --help
以下是两个带有指定要求的useradd指令:
useradd username2 -u 1503
useradd username3 -d /UserHome
用户username3的UID为1503,username4的home目录为/UserHome,不是/home/Userhome。
2.用户密码(passwd)
passwd除了是在etc文件夹下存储用户信息的文件,也是修改用户密码的指令,一般只有root有修改自己和其他人密码的权限,其他人只能修改自己的密码。
如果是root用户登陆,可以:
passwd username
可以用来修改用户username的密码。
在修改密码的时候,如果密码是一个对称密码,如:
1
aaa
level
123456787654321
都会提示密码是一个回文密码,上面也说过回文密码是可以破解的,但是只是有一个警告,并不会禁止你使用这个密码,root修改密码的长短一直是没有严格限制的,可以短到只有1位。
如果指令缺省,那么是修改自己的密码
passwd
3.删除用户(userdel)
删除用户可以用userdel命令
userdel username
在删除用户的时候一般配合参数 -r 一起使用。这样可以删除user的home目录。
userdel -r username #删除了username的home目录
删除用户之后,passwd文件、shadow文件和group文件均找不到该用户的信息,如果用 -r 参数进行删除,也在相应文件目录下找不到该用户的home目录。
4.其他选项管理(usermod)
usermod即为user modify,修改用户的信息。
比如修改一个用户的shell外壳
usermod -s /sbin/nologin username
这样就可以更改用户username的shell,修改之后username用户将不能登陆系统。
实际上,只要shell不是/bin/bash,这个用户都不能登陆系统。
同样,可以用命令:
usermod --help
查看usermod指令的所有参数。
总结
本文简要的概括了一下linux系统中,常用的存储用户信息的文件:passwd,shadow,group。它们都在/etc文件目录下。接着简要的介绍了日常管理用户的四个常用命令。接下来我们将对用户和组之间的关系进行讨论。