1. 用户和群组相关的文件
/etc/passwd
目录:此文件是存放用户信息的配置文件,其主要内容有:
- 第一部分:用户名,即登录所使用的账号
- 第二部分:x(本来用于存放用户登录密码),现在的密码都存放在
/etc/shadow
文件中 - 第三部分:UID,用户ID号码,新建用户时,UID的值都在500以后,最大值为65535之间
- 第四部分:GID,表示用户的主要组id
- 第五部分:用户的全称,描述信息
- 第六部分:用户的属主目录
- 第七部分:shell脚本,一般为
/bin/bash
注: 以上七部分如下图所示 :
/etc/shadow
文件用于存放用户的密码
/etc/group
:用于存放群组信息的配置文件
/etc/gshadow
:用户组密码信息存放位置
注: 用户管理在Linux中使用频率并不高,因为Linux虽然是多用户操作系统,但是很少有非常多的用户操作系统
2. 用户的增删改查
2.1 创建用户(useradd)
-
语法:
useradd [-options] 用户名
或user add 用户名 [-options]
-
说明:会在/etc/passwd文件里面产生该用户的相关信息,通过查看help,可以发现useradd一般需要管理员账号才可以使用。
-
参数:
1.-g
:指定用户所属的群组(primary group),-g后加的是GID
2.-G
:指定用户的attached group
3.-u
:指定用户的UID,数值和GID同样,都是500以后且未被使用的UID
4.-M
:此参数表示在创建用户时不创建其属主目录
5.-d
:指定用户的家目录
6.-s
:指定用户登录的shell,默认为/bin/bash
2.2 删除用户(userdel)
- 语法:
userdel [-options] 用户名
- 参数:
-r
,表示在删除用户时将此用户相关的信息也一并删除,如用户的属主目录等。
注: 删除用户信息时会将与这个用户名相同的群组关联删除;在删除时,建议将-r参数加上,以便删除用户的所有信息。
附(异常处理): 在useradd添加用户时,会默认创建该用户的家目录和邮箱,但是在userdel删除该用户时却默认不会删除该用户的邮箱和家目录,所以在删除该用户之后再次创建该用户(登录名相同)时就会出现异常。之所以这么做,是因为用户的邮箱中可能会保存了很多信息,如果误删后果比较严重。
2.3 查看用户id(id)
- 语法:
id 用户名
- 功能:查看用户的id,id命令可以查看一个用户的uid和gid还有该用户属于的所有组,除了gid之外的所有组都是用户的附加组。
- 示例如下:
附: 也可用grep username /etc/passwd
命令直接在配置文件中查找指用户名的相关信息
2.4 查看用户的群组信息(groups)
- 语法:
groups 用户名
- 功能:查看用户的群组信息
2.5 切换用户(su)
- 语法:
su [-option] [用户名]
- 参数:-,表示切换用户时同时切换到目标用户的属主目录
注: 如果不加用户名,默认切换到root用户
2.6 设置密码(passwd)
2.6.1 命令相关:
- 格式:
passwd [-option] 用户名
输入之后,下面就会提示用户输入相应的新密码即可。 - 选项:
-d
:删除用户密码信息。-l
:锁住密码,会在shadow中的密码信息前面加两个叹号。在账号被锁定后,除了root用户外,其他用户均不能切换和使用该账号。-n
:设置密码最小有效期。-x
:设置最大有效期。-w
:到期前警告天数。-i
:宽限日期。-e
:将指定用户的密码设置为过期,使用该命令后,上次修改密码的时间变为了0,表示用户下次登录必须修改密码,在windows中,这个值是默认的。-u
:解锁密码,对于使用-l
选项锁定的密码可以通过passwd -u username
解除锁定。--stdin
:使passwd读取标准输入,只能root使用,例如:echo 123 | passwd --stdin username
2.6.2 用户密码相关的配置文件解析
用户密码信息存放在/etc/shadow
文件中,该文件每一行的格式为username:password:上次修改密码的时间:密码最小有效期:密码最大有效期:密码到期前提前多少天警告的时间信息:用户密码到期后宽限日期:账号失效日期:保留:
,格列的具体解释如下:
username
:用户名password
:密码的密文信息,加密算法在/etc/login.defs
文件中指定。上次修改密码的时间
:保存的是1970年1月1日到你修改密码哪天的天数,即你修改密码的真正时间就是1970年1月1日加上文件中该列记录的时间。密码最小有效期
:每次修改密码间隔的最小时间,为0表示不受限,随时可以修改,为1表示在本次修改密码后最少一天后才能再次修改密码。最大有效期
:默认为9999天,表示这个时间内必须修改密码,否则一旦过期密码就不能用了,例如如果为3,就表示在3天内必须修改,否则一旦超过三天该密码就用不了了。发出警告
:假如等于n,表示在密码到期前的第n天发出警告,提示用修改。宽限日期
:密码过期后在宽限的天数内,仍然可以使用。账号的失效日期(有效期)
:,如果过了有效期,需要用root用户来进行设置。
2.7 管理用户密码信息(chage)
-
语法:
chage [-options] username
-
功能:修改用户密码信息,相比于passwd能更灵活的修改密码信息
-
选项:
-d
:上次修改密码时间,一般来讲,上次修改密码时间要么不改,要么直接设置为0,让用户下次登录必须修改密码-m
:密码最小有效期-M
:密码最大有效期-W
:密码到期前警告日期-I
:宽限日期-E
:账号直接失效日期
-
实例:
chage -d 1300 -m 2 -M 20 -W 10 -I 4 -E 2021-1-1 username
2.8 修改用户的ID信息(usermod)
- 语法:
usermod [-options] 用户名
- 参数:
-u
:修改用户的UID-g
:修改用户的GID-G
:将相应用户追加到指定群组-d
:指定用户的家目录-s
:指定用户登录的shell,默认为/bin/bash
注: 该命令一般用的不多,因为用户一旦创建好后这些信息基本就不会再变了。
附: 在/etc/login.defs
文件中,redhat系统创建用户时会自动创建家目录,而系统会参照/etc/login.defs
文件,该文件会指定一些规则(创建用户时),比如CREATE_HOME
就表示是否在创建用户时创建家目录。
3. 群组的增删改查
3.1 用户群组的分类
用户群组主要分为以下三类:
- primary group:主要组,记录在
/etc/passwd
文件中每行的第四列就属于用户的主要组id,一个用户的private group
和primary group
有可能是同一个组。 - private group:私有组,由于任何用户都必须依赖于一个用户组,那么在创建该用户时如果没有指定用户组,Linux系统就会为该用户自动创建一个与之用户名相同的组,称为该用户的
private group
,私有组只有一个和该私有组同名的用户,其意义就是让用户有了一个用户组,如果创建该用户时指定了该用户的所属组,那么就不会创建该用户的私有组。 - attached group:附加组,一个用户只可以属于一个
primary group
,但是可以同时属于多个attached group
。并且可以将私有组作为其他用户的附加组,但是不建议这样做。
3.2 创建群组(groupadd)
- 语法:
groupadd [-options] 群组名
- 参数:-g,此参数用来指定群组的GID,并且GID必须是500以后且未被使用的整数
附: 用户组的相关信息保存在/etc/group
中,格式为group_name:group_password:group_id:"组成员"
,其中group_password
保存在/etc/gshadow
文件中,group文件里用x代替,示例如下:
3.3 删除群组(groupdel)
- 语法:
groupdel 群组名
注: 只能删除空的群组名
3.4 修改组的id(groupmod)
- 语法:
groupmod -g group_id group_name
- 说明:修改组的id,因为操作系统就是通过id来区分组的。
3.5 为用户添加附加组(usermod&gpasswd)
>方法一:
- 语法:
usermod -G attached_group_name username
- 解析:
1.-G
:只能指定一个附加组,且会清除原有的附加组
2.-aG
:可以指定多个付加组,其中a参数表示append追加的意思
>方法二:
- 语法:
gpasswd -a username attached_group_name
- 解析:
-a
:表将attached_group_name追加为username的附加组-d
:表示删除附加组
3.6 用户组密码相关
用户组密码存放在/etc/gshadow
中,格式为group_name:!::username1,username2,...,username3
,该文件的第二列记录的组密码信息,默认的组和默认的用户一样,没有密码。
- 设置组密码命令:
gpasswd 组名
- 说明:对于任何一个用户来说,其创建的文件默认属于该用户,属于该用户的primay group
newgrp group_name
命令:切换当前shell的组名,即让当前用户临时切换到其他组,这样创建的文件就是其他组的了,可以使用eixt命令退出切换后的shell。在使用该命令切换组时,如果组有密码,那就需要输入密码才能切换成功,而这也是组密码存在的意义或者说作用。即让不属于该组的用户也可以切换到该组,只要输入正确的组密码即可切换成功。