Linux系列之知识补充一:用户、组和权限

一、用户和组

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

用户在系统中是分角色的,在Linux系统中,由于角色的不同,权限和所完成的任务也不同;值得注意的是用户的角色是通过UID和GID识别的;特别是UID,在运维工作中,一个UID是唯一标识一个系统用户的账号。每个用户账号都拥有一个惟一的用户名和各自的口令。

1-1、用户和组类别说明

Linux用户的角色分为3类:

  • 管理员:uid为0(root用户)
  • 普通用户: uid在1-65535之间
    • 系统用户:uid在1-499之间。与真实用户区分开来,这类用户的最大特点是安装系统后默认就会存在的,且默认情况不能登录系统,它们是系统正常运行必不可少的,它们的存在主要是方便系统管理,满足相应的系统进程都文件属主的要求。例如系统默认的bin、adm、nodoby、mail用户等。由于服务器角色的不同,有部分用不到的系统服务被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务对应的虚拟用户也是可以处理掉的(删除或注释)。。
    • 真实用户:uid在500-65535之间。这类用户一般是由具备系统管理员root的权限的运维人员添加的。

组是权限的容器,用户组分类:

  • 管理员组:root用户所在组
  • 公有组:也称普通组/附加组,可以加入多个用户
  • 私有组:也称基本组/初始组,当创建用户时,如果没有为其指明所属组,则就为其定义一个私有的用户组,起名称与用户名同名。
    :私有组可以变成公有组,当把其他用户加入到该组中,则其就变成了公有组

用户和用户组的对应关系:

  • 一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。比如,root。
  • 一对多:即一个用户可以存在多个组中,这个用户就具有这些组。
  • 多对一:即多个用户可以存在一个组中,这些用户这些组的共同权限。
  • 多对多:即多用户可以存在于多个组中。并且几个用户可以归属相同的组;其实多对多的关系是前面三条的扩展。

1-2、用户和组相关文件

/etc/passwd:  #用户的配置文件, 保存用户账户的基本信息
/etc/shadow  #用户影子口令文件
/etc/group  #用户组配置文件
/etc/gshadow  #用户组的影子文件
  1. /etc/passwd文件:每行定义一个用户账号,有多少行就表示多少个账号,在一行中可以清晰的看出,各内容之间又通过”:”号划分了7个字段,这7个字段分别定义了账号的不同属性,passwd文件实际内容如下:
[root@docker200 ~]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

在passwd文件中,第一行内容就是超级用户root行,可以看到它的uid和gid都为0.为了方便理解,下面是各字段的描述:

字段1:帐号名,这是用户登陆时使用的账户名称,在系统中是唯一的,不能重名。
字段2:密码占位符x;早期的unix系统中,该字段是存放账户和密码的,由于安全原因,后来把这个密码字段内容移到/etc/shadow中了。这里可以看到一个字母x,表示该用户的密码是/etc/shadow文件中保护的。
字段3:UID;范围是0-65535。
字段4:GID;范围是0-65535;当添加用户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组。
字段5:用户注释说明;这个字段是对这个账户的说明。
字段6:宿主目录;用户登陆后首先进入的目录,一般与"/home/用户名"这样的目录。
字段7:登录Shell   当前用户登陆后所使用的shell,在centos/rhel系统中,默认的shell是bash;如果不希望用户登陆系统,可以通过usermod或者手动修改passwd设置,将该字段设置为/sbin/nologin 即可。大多数内置系统账户都是/sbin/nologin,这表示禁止登陆系统。这是出于安全考虑的。
  1. /etc/shadow:由于passwd文件必须要被所有的用户读,所以会带来安全隐患。而shadow文件就是为了解决这个安全隐患而增加的。

来看一下/etc/shadow的权限:

[root@docker200 ~]# ls -l /etc/shadow
----------. 1 root root 1059 4月  11 14:13 /etc/shadow

文件内容:

[root@docker200 ~]# head -5 /etc/shadow
root:$6$jmM2rFzPCFbmqBkf$oz3AUooR3qaV5uXU67HcXlYiE3hNf0sSsunk1eBTDPrGUOM1xYCyesGoj.ZLTIzdiXEdrnnqNyC5g8SsRnxQm.:16338:0:99999:7:::
bin:*:15615:0:99999:7:::
daemon:*:15615:0:99999:7:::
adm:*:15615:0:99999:7:::
lp:*:15615:0:99999:7:::

和/etc/passwd一样,shadow文件的每一行内容,也是以冒号(:)作为分隔符,共9个字段,其各个字段的意义如下表:

字段1:帐号名称
字段2:加密的密码
字段3:最近更改密码的时间;从1970/1/1到上次修改密码的天数
字段4:禁止修改密码的天数;从1970/1/1开始,多少天之内不能修改密码,默认值为0
字段5:用户必须更改口令的天数;密码的最长有效天数,默认值为99999
字段6:警告更改密码的期限;密码过期之前警告天数,默认值为7;在用户密码过期前多少天提醒用户更改密码
字段7:不活动时间;密码过期之后账户宽限时间 3+5;在用户密码过期之后到禁用账户的天数
字段8:帐号失效时间,默认值为空;从1970/1/1日起,到用户被禁用的天数
字段9:保留字段(未使用),标志

密码过期:一旦超过密码过期日期,用户成功登陆,Linux会强迫用户设置一个新密码,设置完成后才开启Shell程序
账户过期:若超过账户过期日期,Linux会禁止用户登陆系统,即使输入正确密码,也无法登陆

  1. /etc/group:文件是用户组的配置文件,也就是记录GID与用户组的文件,内容包括用户与用户组,并且能显示用户归属哪个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用户组的用户之间具有相似的特性。如果某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进入。/etc/group文件同/etc/passwd类似,其文件权限也是644:
[root@docker200 ~]# ls -l /etc/group
-rw-r--r--. 1 root root 832 4月  11 14:13 /etc/group

/etc/group的文件内容为:

[root@docker200 ~]# head -5 /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon

group文件各个字段的详细说明:

字段1:组账户名称。
字段2:密码占位符x;通常不需要设置该密码,由于安全原因,该密码被记录在/etc/gshadow中,因此显示为'x'。这类似/etc/shadow。
字段3:组账户GID号,用户组ID。
字段4:本组的成员用户列表;加入这个组的所有用户账号。
  1. /etc/gshaow是/etc/group的加密文件,比如用户组的管理密码就是存放在这个文件。/etc/group和/etc/gshadow是互补的两个文件;比如大型服务器,针对很多用户和用户组,定制一些关系结构比较复杂的额权限模型,设置用户组密码是极有必要的。比如不想让一些非用户组成员永久拥有用户组的权限和特性,这时就可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码;/etc/gshadow格式如下,每个用户组独占一行;
[root@docker200 ~]# ls -l /etc/gshadow
----------. 1 root root 682 4月  11 14:13 /etc/gshadow
[root@Web ~]# head -5 /etc/gshadow
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon

gshadow文件中各个字段详细说明:

字段1:组账号的名称。
字段2:加密后的密码字符串,这个字段可以空的或者!;如果是空的或有!,表示没有密码。
字段3:本组的管理员列表;这个字段也可为空;如果有多个用户组管理员,用,号分隔。
字段4:本组的成员列表;加入这个组的所有用户账户;列表中多个用户通过","分隔。

二、用户权限

Linux 一般将文件可存取访问的身份分为 3 个类别,分别是 owner、group、others,且 3 种身份各有 read、write、execute 等权限。

权限的三种身份:

  • 文件所有者(owner)
    用户级别的文件权限,通常为文件的创建者,可以通过 chown 修改文件所有者。

  • 用户组(group)
    如果把用户组比作团队,用户就是其中的成员,团队中的队员对于该文件都有相同的权限。可以通过 chgrp 修改文件的用户组。
    用户组最有用的功能之一,就是在团队开发资源的时候。两个项目 project1 和 project2 由两个团队开发,则分别给项目分配用户组权限1、2,然后上司同时支持1、2 权限,即:每个账号都可以有多个用户组的支持。

  • 其他人(others)
    不是文件所有者而且不属于文件的用户组,就是其他人。

图片.png

如图所示,r 代表读(read),w 代表写(write),x 代表执行(execute)
读,权限是二进制的100,十进制是4;
写,权限是二进制的010,十进制是2;
执行,权限是二进制的001,十进制是1;

具备多个权限,就把相应的 4、2、1 相加就可以了:
若要 rwx 则 4+2+1=7
若要 rw- 则 4+2=6
若要 r-x 则 4+1=5
若要 r-- 则 =4
若要 -wx 则 2+1=3
若要 -w- 则 =2
若要 --x 则 =1
若要 --- 则 =0
Linux下权限设置一共十个字符,分成四段。
例如:
-rw-rw-r--
第一个字符“-”表示普通文件;“d”表示目录;这个位置还可能会出现“l”表示链接。
第二三四个字符“rw-”表示当前所属用户的权限。 所以用数值表示为4+2=6,也就是110。
第五六七个字符“rw-”表示当前所属组的权限。 所以用数值表示为4+2=6,也就是110。
第八九十个字符“r--”表示其他用户权限。 所以用数值表示为2,也就是100。

图片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容