二、 Linux用户与用户组

一、Linux常规操纵 : 多用户操作

1.用户与用户组理论

1.1概述

Linux是一个真实的、完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。
root :系统维护,www:网页修改,ftp:文件上传,mysql:SQL查询
不同用户具有不同的权限,每个用户是在权限允许的范围内完成不同的任务,linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。

1.2 linux的用户分类

  1. root 用户(linux的超级管理员,上班的时候别人给你你也不能要,老危险了)拥有最高权限,可以登录系统,进行任何操作。
  2. 虚拟用户(某项技术运行期间需要的用户,根我们没啥关系)
  3. 普通真实用户(我们可以操作的)
    这类用户等登录系统,权限有限,由管理员添加。

1.3 linux的用户组

是具有相同特征的用户的逻辑集合,多个用户具有相同的权限
用户与组的关系:
1.即一个用户可以存在一个组中,也可以是组中的唯一成员。
2.即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。
3.多个用户可以存在一个组中,这些用户具有和组相同的权限。
4.多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。
用户对文件的权限设置
1.User: 文件所有者,可以读、写、执行
2.Group: 与文件所有者同组的用户,可以读
3. Others: 除了文件所有者和同组的其他用户,不能读、写、执行

2.linux用户组的CURD实战

1. 用户组的查询

用户组的所有信息都存放在/etc/group文件中。

#cat 命令,查看某个文件的内容  /etc(配置文件目录)/group(配置文件)
[root@localhost ~]# cat /etc/group

查询的结果:用户组信息
在这里插入图片描述
组名:口令:组标识号:组内用户列表
1.组名:组名是用户组的名称,由字母或数字构成。
2. 口令:口令字段存放的是用户组加密后的口令字。这个字段一般为空,或者是*,有口令默认是x。
3.组标识号: 主键ID(可以重复的):
4.组内用户列表:是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。

2. 用户组的密码查询

[root@localhost ~]# cat /etc/gshadow

在这里插入图片描述
由冒号(:)隔开若干个字段,这些字段具体如下:
用户组名:用户组密码:用户组管理者:支持的账号名称
1.用户组名:是用户组的名称,由字母或数字构成。
2.用户组密码:这个段可以是空的或!,如果是空的或有!,表示没有密码。
3.用户组管理者:这个字段也可为空,如果有多个用户组管理者,用,号分割。
4.组成员:如果有多个成员,用,号分割。

3. 添加组

命令格式:
	groupadd [选项] 组名
命令功能:
    添加群组。
选项和参数:
    -g GID:后面接某个特定的 GID ,用来直接给予某个GID;
    -h :显示此帮助信息并退出
    -r :创建一个系统群组。
    -o :允许创建有重复 GID 的组

实例1: 创建一个用户组
—用户组的标识号从1000开始
—系统组的标识号是1000以下
| N个命令的管道连接符 ,它的意义就是在于 ,将前一个命令的结果作为原始数据传入下一个命令 ,此处我们将 cat /etc/group 命令的执行结果 ,通过 | 传入给 grep 命令 ,
grep命令的作用是,在指定内容中查找给定的关键字

[root@localhost ~]# groupadd group1
[root@localhost ~]# cat /etc/group | grep group1//将前一个命令的结果作为后一个命令的源
group1:x:1000:

实例2: 创建一个指定标识号的用户组
GID : 和我们之间数据库的主键ID一样,用来定位一个组的有效标识,但是linux的GID可以重复(使用-o 参数指定即可);
GID的编号 : 0~999 传统上是保留给系统帐号使用。自定义的组是1000以上的,刚才我们创建的group1组的ID就是1000;
在这里插入图片描述
实例3: 创建一个系统组,标识号1000以下

[root@localhost ~]# groupadd -r sysop1
[root@localhost ~]# cat /etc/group | grep sysop1
sysop1:x:995:

实例4: 创建一个指定的相同标识号的系统组

[root@localhost ~]# groupadd -r -o -g 995 sysop2
[root@localhost ~]# cat /etc/group | grep sysop2
sysop2:x:995:

4. 修改组

命令格式:
	groupmod [选项] 组名
命令功能:
	修改群组相关参数。
选项和参数:
    -g GID :将组 ID 改为 GID
    -h :显示此帮助信息并退出
    -n NEW_GROUP :改名为 NEW_GROUP
    -o :允许使用重复的 GID

实例: 修改 sysop2 组的名称为 sysug1 并且修改这个组的ID为 996

[root@localhost ~]# groupmod -g 996 -n sysug1 sysop2
groupmod:GID “996”已经存在
[root@localhost ~]# groupmod -g 997 -n sysug1 sysop2
groupmod:GID “997”已经存在
[root@localhost ~]# groupmod -g 998 -n sysug1 sysop2
groupmod:GID “998”已经存在
[root@localhost ~]# groupmod -g 999 -n sysug1 sysop2
groupmod:GID “999”已经存在
[roo

注意 系统的GID是很紧张的!

5. 删除用户组

命令格式:
	groupdel 组名
命令功能:
    删除用户组时,用户组必须存在,如果有组中的任一用户在使用中的话,则不能删除。

实例: 删除群组名为 sysop1 sysug1 的群组和

[root@localhost ~]# groupdel sysop1
[root@localhost ~]# groupdel sysug1

3.linux用户的CURD实战

1. 用户的查询

命令格式:
[root@localhost ~]# cat /etc/passwd
是的,没有错,不要怀疑,这个就是查看用户信息的文件 叫 passwd

在这里插入图片描述
/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
1.用户名: 是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。
2.口令: 一些系统中,存放着加密后的用户口令字。
3.用户标识号UID: 用户标识号(User ID),是一个整数,系统内部用它来标识用户。
0是系统管理员账号,1-999是系统保留账号,1000+即一般账号。useradd 命名默认生成UID=1000。
4.组标识号:GID GID:用户组标识号(Group ID),是一个整数,系统内部用它来标识用户组。
5.注释性描述: 字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。
6.主目录: 也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。
7.登录Shell: 用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。

2. 用户密码的查询

[root@localhost ~]# cat /etc/shadow

在这里插入图片描述
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
1.登录名: 是与/etc/passwd文件中的登录名相一致的用户账号
2.口令:存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令;
3.最后一次修改时间:
表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。
4.最小时间间隔:
指的是两次修改口令之间所需的最小天数。
5.最大时间间隔:
指的是口令保持有效的最大天数。
6.警告时间:
字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
7.不活动时间:
表示的是用户没有登录活动但账号仍能保持有效的最大天数。
8.失效时间:
字段给出的是一个绝对的天数(1970年到现在的天数),如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

3. 用户创建

命令格式:
	useradd [选项] 使用者账号名
命令功能:
	用来建立用户帐号和创建用户的起始目录,使用root用户创建普通用户。
选项和参数:
	-u UID: 直接指定一个特定的 UID 给这个账号;
	-g 初始群组名:该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
	-G 附加群组名:后面接的组名则是这个账号还可以加入的附加群组。这个选项与参数会修改 /etc/group 内的相关资料。
	-M :强制!不要建立用户家目录!(系统账号默认值)
	-m :强制!要建立用户家目录!(一般账号默认值)
	-c 描述性字符串:注释性描述,这个就是 /etc/passwd 的第五栏的说明内容
	-d 目录:指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径!一般情况下linux除了执行shell脚本之外 很少使用相对路径
	-r :建立一个系统的账号,系统账号不建立家目录;
	-s shell:后面接一个 shell ,若没有指定则预设是 /bin/bash

实例1: 创建一个最普通的user1用户(并指定描述信息)

[root@localhost ~]# useradd -c 这是一个最普通的账户 user1
[root@localhost ~]# cat /etc/passwd | grep user1
user1:x:1000:1005:这是一个最普通的账户:/home/user1:/bin/bash
	查看用户
	用户标识号(uid)从1000开始
	1005是组标识号(gid)
	/home/user1,是user1用户的家目录
[root@localhost ~]# cat /etc/group | grep 1005
user1:x:1005:
	如果没有指定用户组,会创建一个新的用户组,用户组名称是当前用户的名称

实例2: 创建一个账户归属 GID=1000 的用户组

[root@localhost ~]# useradd -g 1000 user2
[root@localhost ~]# useradd -g group1 user3
[root@localhost ~]# cat /etc/passwd | grep user*
user1:x:1000:1005:这是一个最普通的账户:/home/user1:/bin/bash
user2:x:1001:1000::/home/user2:/bin/bash
user3:x:1002:1000::/home/user3:/bin/bash
	上面的代码我们可以用-g 来初始化用户的组 -g 后面加需要归属的 组的 ID 和 名称 都可以
	那么既然已经设置了基础组还会创建用户同名组么?
[root@localhost ~]# cat /etc/group | grep user*
users:x:100:
user1:x:1005:
	通过观察我们发现并没有!

实例3: 创建一个账户归属自己同名组并归属 GID为1000的组
这个就是附加! -G

[root@localhost ~]# useradd -G 1000 user4
[root@localhost ~]# useradd -G group1 user5 
[root@localhost ~]# cat /etc/passwd | grep user*
user1:x:1000:1005:这是一个最普通的账户:/home/user1:/bin/bash
user2:x:1001:1000::/home/user2:/bin/bash
user3:x:1002:1000::/home/user3:/bin/bash
user4:x:1003:1006::/home/user4:/bin/bash
user5:x:1004:1007::/home/user5:/bin/bash
	通过观察我们可以发现上面的user4 和 user5 有两个不同的GID为 10061007
	那么它归属 GID=1000的组了么?我们查查看
[root@localhost ~]# cat /etc/group | grep -E '1000|1006|1007'
group1:x:1000:user4,user5
user4:x:1006:
user5:x:1007:
	通过观察我们发现 group1 GID=1000 这个组里添加了user4和user5两个用户
	并且系统也帮助我们创建了以user4和user5命名的组

实例4: 创建一个系统用户

[root@nn1 ~]# useradd -r sysuser1
[root@localhost ~]# cat /etc/passwd | grep sysuser1
sysuser1:x:997:995::/home/sysuser1:/bin/bash
	此处我们可以发现 UID是 997(1000以下) GID 995
[root@localhost ~]# cat /etc/group | grep 995
sysuser1:x:995:

实例5: 创建一个不能使用shell 并且要设置用户的家目录到其他位置
sell:

  1. /sbin/nologin:虚拟用户不具有登录系统的能力
  2. /bin/bash:普通用户具有登录系统的能力

此处需要注意 : 用户的默认家目录在 /home/用户名 这个目录里
家目录 和 windows中用户的我的文档类似 用户登陆成功进入的第一个目录就是自己得家目录;
家目录对于用户来说 用户具有最大的管理权限 所以家目录对于用户来说 是 700 权限的;

[root@localhost ~]# useradd -s /sbin/nologin -d /userhome/user1 -c 一个特殊的普通用户 nologinuser1
useradd:无法创建目录 /userhome/user1
[root@localhost ~]# mkdir -p /userhome/user1 创建这个目录 //(mkdir --help:显示使用帮助信息)
[root@localhost ~]# useradd -s /sbin/nologin -d /userhome/user1 -c 一个特殊的普通用户 nologinuser1
useradd:用户“nologinuser1”已存在
[root@localhost ~]# useradd -s /sbin/nologin -d /userhome/user1 -c 一个特殊的普通用户 nologinuser2
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。 
[root@localhost ~]# useradd -s /sbin/nologin -d /userhome/user3 -c 一个特殊的普通用户 nologinuser3

[root@localhost ~]# ll /userhome/
总用量 0
drwxr-xr-x. 2 root         root          6 530 16:47 user1
drwx------. 2 nologinuser3 nologinuser3 62 530 16:47 user3

[root@localhost ~]# cat /etc/passwd | grep nologinuser*
nologinuser1:x:1005:1008:一个特殊的普通用户:/userhome/user1:/sbin/nologin
nologinuser2:x:1006:1009:一个特殊的普通用户:/userhome/user1:/sbin/nologin
nologinuser3:x:1007:1010:一个特殊的普通用户:/userhome/user3:/sbin/nologin

4. 用户信息和密码的修改

4.1用户信息修改
命令格式:
	usermod [选项] 使用者账号名
命令功能:
	usermod命令用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。
选项和参数:
	-c 备注:修改用户帐号的备注文字; 
	-d 家目录:修改用户登入时的主目录,前提:已存在要修改的家目录; 
	-g 初始群组:修改用户所属的群组; 
	-G 附加群组;修改用户所属的附加群组; 
	-h:显示帮助信息;
	-l 帐号名称 :修改用户帐号名称; 
	-s shell:修改用户登入后所使用的shell; 
	-u UID:修改用户ID;

实例1: 将现有用户添加到现有组中(使用-g)
下面的操作可以观察到之前user1的GID 是1005 修改了之后变成了 1000

[root@localhost ~]# cat /etc/passwd | grep user1
user1:x:1000:1005:这是一个最普通的账户:/home/user1:/bin/bash 
[root@localhost ~]# usermod -g group1 user1
[root@localhost ~]# cat /etc/passwd | grep user1
user1:x:1000:1000:这是一个最普通的账户:/home/user1:/bin/bash

实例2: 修改用户名(使用-i修改用户名-c修改备注)
修改了用户名 顺便也修改了备注信息

[root@localhost ~]# usermod -l userop1 -c 'web管理员' user1
[root@localhost ~]# cat /etc/passwd | grep user*
userop1:x:1000:1000:web管理员:/home/user1:/bin/bash

实例3: 修改用户的家目录位置(使用-d)

[root@localhost ~]# cat /etc/passwd | grep userop1
userop1:x:1000:1000:web管理员:/home/user1:/bin/bash
[root@localhost ~]# usermod -d /userhome/user4 userop1
[root@localhost ~]# cat /etc/passwd | grep userop1
userop1:x:1000:1000:web管理员:/userhome/user4:/bin/bash
4.2用户密码修改
命令格式:
	passwd [选项] [使用者账号名]
命令功能:
    passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
    root用户可以设置及修改其他用户的密码,普通修改自己的密码。
选项:
	-d:删除密码,仅有系统管理者才能使用; 
	-f :强制执行

实例1: 修改当前用户的密码

[root@localhost ~]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
//passwd 如果不带参数就是修改当前用户的,所以root身份登录修改的也是root的密码,此处需要注意当你在输入密码的时候是不会显示密码的

实例2: 修改其他用户密码(使用-f)

[root@localhost ~]# passwd userop1
更改用户 userop1 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# passwd -f userop1
更改用户 userop1 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新

实例3: 用户自己改密码

//用户自己修改密码的时候必须遵守密码修改原则
//1. 先输入当前密码验证
//2. 新密码要求由数字和字母组成长度要大于8位
//3. 密码中要包含大小写字母
//所以自己修改密码的时候还是要花费一定经历的

[user1@localhost ~]$ passwd
更改用户 user1 的密码 。
为 user1 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

切换用户登录

	//切换用户登录
[root@localhost ~]# su - user1//切换登录用户
[user1@localhost ~]$ whoami//我是谁
user1
[user1@localhost ~]$ pwd//我在哪儿
/home/user1//user1的家目录
[user1@localhost ~]$ 
	//如果修改完用户名及家目录之后,不能正常的登录,需要拷贝正常家目录下的三个文件,命令如下:
	//cp /home/user2/.bash* /userhome/user3/
	//cp ./.bash* /home/新用户的家目录

5. 用户删除

命令格式:
	userdel [选项] 使用者账号名
命令功能:
    userdel删除一个用户账号和相关的文件。 userdel命令修改系统账号文件/etc/passwd,删除所有条目有关用户登录名。该用户名必须存在。
选项和参数:
	-f,--force  该选项强制删除用户账号,即使该用户仍在登录。
	-r, --remove  在用户家目录里面的文件将被删除并且家目录本身和用户的邮件池也会被删除。文件位于其他文件系统的必须手动搜索和删除。
	建议不要用 -r 直接删除,用普通删除,家目录先保留一段时间,然后在手动删除,以免家目录内的文件找不回来。

实例1: 删除指定的用户

[root@localhost ~]# userdel userop1
userdel: user userop1 is currently used by process 9251
//上面提示userop1 正在使用不能删除;
//那么要是就想删呢?
userdel -f user2
//强制删除用户,虽然提示是正在使用,但是会被删除,不会删除家目录
usedel -rf userop1
//删除用户,并删除家目录

4.Linux群组管理员功能

gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow管理工具。
命令格式:
	gpasswd [选项] 要管理的工作组
命令功能:
	管理群组。
选项:
	-a 用户:添加用户到组; 
	-d 用户:从组删除用户; 
	-A 用户:指定管理员; 
	-h:帮助信息;
	-r:删除密码;

实例1: 给组设置密码

[root@localhost ~]# gpasswd group1
正在修改 group1 组的密码
新密码:
请重新输入新密码:

实例2: 指定组的管理员

[root@localhost ~]# gpasswd -A user4 group1

实例3: 添加新用户到组

[root@localhost ~]# su - user4
[user4@localhost ~]$ gpasswd -a user2,user3 group1
gpasswd:用户“user2,user3”不存在
[user4@localhost ~]$ gpasswd -a user2 group1
正在将用户“user2”加入到“group1”组中
[user4@localhost ~]$ gpasswd -a user3 group1
正在将用户“user3”加入到“group1”组中
[user4@localhost ~]$ cat /etc/group | grep group
group1:x:1000:user4,user5,user2,user3
group3:x:1003:
group4:x:1004:

实例4: 将用户移出组

[user4@localhost ~]$ gpasswd -d  user2 group1
正在将用户“user2”从“group1”组中删除
[user4@localhost ~]$ cat /etc/group | grep group1
group1:x:1000:user4,user5,user3

5.linux的用户相关命令

5.1 id 命令 查看用户信息

命令格式:
	id [选项][用户名称]
命令功能:
	id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。
	id命令已经默认预装在大多数Linux系统中。要使用它,只需要在你的控制台输入id。不带选项输入id会显示如下。结果会使用活跃用户。
选项:
	-g 显示用户所属群组的ID。 
	-G 显示用户所属加群组的ID。   
	--help   显示帮助。 

实例1: 将用户移出组

[root@localhost ~]# id
uid=0(root) gid=0(root)=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

实例2: 查看其他用户

[root@localhost ~]# id user2
uid=1002(user2) gid=1004(user2)=1004(user2),1000(group1)
[root@localhost ~]# id -g user2
1004
[root@localhost ~]# id -G user2
1004 1000

5.2 su 命令 用户切换

命令格式:
	su [-] [要切换的用户名称]
命令功能:
	su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
选项:
	- :切换用户后,环境变量也切换成用户的环境变量;
	不加- :切换用户,不切换环境变量

实例2: 切换到目标用户

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# su - user4
上一次登录:四 530 17:33:47 CST 2019pts/0[user4@localhost ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user4/.local/bin:/home/user4/bin
[user4@localhost ~]$ su root
密码:
[root@localhost user4]# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user4/.local/bin:/home/user4/bin
[root@localhost user4]# su - root
上一次登录:四 530 17:49:57 CST 2019pts/0[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值