多用户
linux操作系统是多用户管理系统,管理起来非常麻烦,所以用组的概念来管理用户就变的简单多了,一个用户可以属于多个组,一个组可以有多个用户,用户和组是多对多的关系。
linux的多用户多分组管理系统都是针对文件来说的,每个文件都有所属的用户和所属的分组。
用户种类
linux系统是根据用户UID来识别用户的,并不是根据用户名。linux用户分为以下3种
-
root用户也叫超级用户(UID为0):该用户具有最高权限,可以操作任何文件,尽管文件权限是000。在linux字符操作页面中,root账号的提示符为#。
-
系统用户(UID为1-499):系统用户是linux系统正常运行的内建用户,通常是为了管理某种服务,如ftp服务,以及sshd服务等。系统用户是不能用来登录的。
-
普通用户(UID大于500):普通用户是为了合理管理linux资源而建立的用户。在linux的字符操作页面,普通用户的提示符一般为$。
查看系统所有用户
- 在/etc/passwd文件中存储着系统的所有用户,使用如下命令查看
cat /etc/passwd
每行数据为一个用户,可以看到红色部分为root超级用户,蓝色部分为系统用户,绿色部分为普通用户。
- 可以看出图片中每行数据大致7段,使用:作为分隔符,格式如下
用户名:X:UID(用户id):GID(组id):用户说明:用户家目录:Shell版本
- 用户名:用户名只是管理员方便记忆,系统是根据UID来识别用户的。使用命令
useradd userName
或者adduser userName
来创建新的用户 - x:代表的是密码标志,而不是真正的密码。如果第二段是x则代表该用户有密码,如果没有x则代表该用户没有密码。**用户真正的密码保存在/etc/shadow文件中,该文件的权限是
000
,也就是说只有root用户才能查看。 - UID:用户id,要知道linux系统就是通过用户id来识别不同的用户和分配不同的权限的。
- GID:此字段意思为组id,更确切的说是
初始组id
。说到初始组就得说说初始组
和附加组
的概念了。
所谓初始组,新建一个用户后,系统会自动新建一个与该用户名相同的组,并将该用户分配到该组中,该组就是该用户的初始组。每个用户的初始组只能有一个,举例来说,我们手工添加用户useradd lamp
,在建立用户 lamp 的同时也会创建lamp的组名。还有一个注意的点,就是新建用户的UID和GID一般是相同的。
所谓附加组:指用户后期可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,附加组却可以有多个,此时用户的权限就是初始组的权限+附属组的权限。
需要注意:在 /etc/passwd 文件的第四个字段中看到的 ID 是这个用户的初始组。 - 用户说明:这个用户的简单说明,没有什么特殊作用,可以不写。
- 用户家目录:也就是用户登录后有操作权限的访问目录,我们把这个目录称为用户的家目录。通常都会在/home下自动创建与用户名同名的用户家目录,举个例子,创建新用户useradd db,这是用户db的家目录是/home/db。
简单说就是root用户的家目录是 /root 目录,普通用户是 /home/userName下.
在linux字符操作页面的~
就是指当前用户的家目录
- shell命令:linux默认是/bin/bash,写过shell脚本的都应该知道。
- 所有用户都是可以查看此文件的,我们可以查看该文件的ll。
[db@002 ~]$ ll /etc/passwd
-rw-r--r-- 1 root root 1194 Feb 20 21:31 /etc/passwd
我们可以看到该文件属于root用户和root组。然后root用户权限是rw-,root组内成员的权限是r--,而其他用户的权限是r--。由于其他用户的权限都是r--,所以任何用户都是可以读的。
查看系统所有组
在/etc/group文件中存储着系统的所有组,查看文件内容,如下图
大致分为4段
- 组名:上面介绍过,不在赘述
- 密码:x代码加密标示,和passwd文件中类似。group的组密码保存在 /etc/gshadow 文件中。
- GID:组id
- 组内成员:此段如果为空,则代表该组只有一个用户,也就是与组名相同的用户。如果有值,则说明此组中含有与该值相同的用户,也就是说此组是该用户的附属组。
我们可以看到图中mail分组的第4段有值为postfix,也就是postfix用户应该有俩个分组,一个初始组和一个附属组,我们执行以下命令验证
[root@002 home]# groups postfix
postfix : postfix mail
密码文件介绍
用户密码文件shadow和组密码文件gshadow的权限都是000,所有其他用户是不能查看的,只有root用户才可以查看,root用户也是不能修改该文件的。
[root@002 ~]# ll /etc/gshadow
---------- 1 root root 457 Feb 21 18:03 /etc/gshadow
[root@002 ~]# ll /etc/shadow
---------- 1 root root 933 Feb 21 18:03 /etc/shadow
查看当前登录用户
使用whoami
命令查看。
[root@002 ~]# whoami
root
查看当前用户所在分组
- 直接使用
groups
命令,可以查看当前登录用户的所有组(初始组和所属组)
[db@002 ~]$ groups
root
- 使用
groups userName
命令来查看指定用户的所有组(初始组和所属组)。
[root@002 xiaoyu]# groups postfix
postfix : postfix mail
- 使用
id
命令查看当前登录用户的所有组(初始组和所属组)。
[db@002 ~]$ id
uid=1002(db) gid=0(root) groups=0(root)
- 使用
id username
来查看指定当前用户的所有组(初始组和所属组)。
[db@002 ~]$ id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
postfix用户有俩个所属组postfix和mail。由此可见,uid是指用户id(用户名称),gid是指初始组id(初始组名称),groups是指包括初始组在内的所有组id(所有组名称)
查看组内的所有成员
我们知道了/etc/group文件的第四段为组内成员
,所有我们可以通过grep
来匹配相关组。比如查询mail组内的所有成员,命令如下,可以看到mail组内有mail,postfix和tom3个用户。
[db@002 ~]$ cat /etc/group | grep mail
mail:x:12:postfix,tom
上面是一种方法,我们也可以直接使用命令来查看。
groupmems -l -g groupname
添加普通用户并设置密码
添加用户只能root用户来添加,普通用户没有权限,添加用户有俩种方式
- useradd userName
- adduser userName
在centos系统下,这俩种方式没有区别,都会在/home下自动创建与用户名同名的用户目录,且都是需要使用passwd userName
命令来设置用户密码的,只有设置完密码后才可以正常登录。
在unbantu系统下,这俩种方式是有区别的,使用useradd userName命令
不会在/home下自动创建与用户名同名的用户目录,且不会自动选择shell版本,后续也是需要使用passwd username来设置密码的
。而使用adduser userName
命令的话是会在/home目录下自动创建与用户名同名的用户目录,也会自动选择shell版本,且会自动提示输入用户密码,对用户比较友好,后续不需要在使用passwd来设置密码。
创建/修改用户密码
passwd username
删除用户
删除用户,并不会删除用户相关的文件
userdel userName
删除用户且一起删除家目录
userdel -r userName
添加新组
groupadd groupname
删除组
groupdel groupname
组内新增用户(用户增加附属组)
groupmems -a username -g groupname
groupmems介绍
格式如下:
groupmems [opentions] [action]
参数如下:
-g 指定组(只有root可以使用)
-a 指定用户加入组
-d 从组中删除该用户
-p 从组中清楚所有成员
-l 显示组成员列表
- groupmems -l -g root
此命令表示查看root组中存在的成员,成员不包括与组名同名的用户。 - groupmems -a Father -g root
此命令表示将Father用户加入root组中。
权限
linux中每个文件都是有权限的。每个文件都有自己的所属用户和所属组,且拥有所属用户权限,所属组权限和其他权限3种。
权限一般分为读,写,执行3种,通过这样的机制来限制哪些用户或用户组可以对特定文件进行相应的操作。
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r(读) | 可读取文件内容 | 可列出目录中的文件(ls ll) |
w(写) | 可修改文件内容 | 可创建或删除目录中的文件 |
x(执行) | 可将文件做为命令执行 | 可进入目录(cd) |
目录有x权限才可以cd进入该目录。目录有r权限才能在该目录中使用ll或者ls查看目录。一个目录中的文件能否被删除或者创建取决于该目录是否有w权限。
执行ll命令后显示如下,我们解读一下
drwxr-xr-- 2 xiaoyu xiaoyu 4096 Feb 24 14:11 xiaoyu
从左到右发现一共有7段
- 权限:该段一共有10位。第一位如果是
d
,则说明该文件为目录,如果是-
则说明是文件。剩余9位3位一组,分为3组,分别对应所属用户权限
,所属组权限
,其他权限
。可以看出用户权限为rwx,二进制表示为7
。组权限为r-x,二进制表示为5。其他权限为r--,二进制表示为4
,组合一起该文件的权限就是754
。 - 连接数
- 所属用户:表示该文件的所属用户是xiaoyu
- 所属分组:表示该文件的所属分组是xiaoyu
- 文件大小
- 文件的最后修改时间
- 文件名或者目录名
现在这个文件的所属者是xiaoyu,所属分组是xiaoyu。
当前用户
如果是xiaoyu的话,也就是具有所属用户权限
,具有对该文件的rwx权限。如果当前用户不是xiaoyu的话,在判断当前用户是否属于xiaoyu分组,如果属于xiaoyu分组,也就是具有
所属组权限
,则具有对该文件的r-x权限。如果当前用户即不是xiaoyu用户,也不属于xiaoyu分组的话,也就是具有
其他权限
,则具有对文件的r--权限。
命令
- chmod
该命令用于修改文件的用户权限。
比如文件ll如下
drwx------ 2 test test 4096 Feb 19 14:47 test
然后执行如下命令
chmode 755 test.php
test文件的权限改为
drwxr-xr-x 2 test test 4096 Feb 19 14:47 test
常用的参数为-R
,常用于修改目录权限,该参数表示为该目录以及目录下的所有子文件都修改为相同的权限。
chmod -R 777 test
- chown
该命令用于修改文件的所属用户和所属组
比如文件ll如下
drwx------ 2 test test 4096 Feb 19 14:47 test
然后执行如下命令
chown xiaoyu:xiaoyu test
再次查看test文件
drwx------ 2 xiaoyu xiaoyu 4096 Feb 19 14:47 test
常用的参数为-R
,常用于修改目录,该参数表示为该目录以及目录下的所有子文件都修改为相同的用户及用户组。
chmod -R 777 test
切换用户
想切换到root用户,直接使用su命令即可
su root
总结
- 一个用户可以加入不同的组,但是有且只有一个初始组。
- 一个用户的权限为他所属的多个组的累加权限 。假设user账户附加组group1 = write group2 = read ,那么user就拥有 write + read权限。
- 组和用户的关系是多对多 一个用户可以有多个组,一个组也可以有多个用户。
网友评论