• Linux-用户和用户组的管理


    用户的基础概念

    在这里插入图片描述

    相关概念

    • 用户:用户是能够获取系统资源的权限的集合;每个用户都会分配一个特有的id号-uid。
    • 用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组,将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了管理工作。
    • UID指的是用户的ID(User ID),一个用户UID标示一个给定用户,UID是用户的唯一标示符,通过UID可以区分不同用户的类别(用户在登录系统时是通过UID来区分用户,而不是通过用户名来区分):
    • 超级用户:根用户也就是root用户,它的ID是0,也被称为超级用户,root账户拥有对系统的完全控制权:可以修改、删除任何文件,运行任何命令。所以root用户也是系统里面最具危险性的用户,root用户甚至可以在系统正常运行时删除所有文件系统,造成无法挽回的灾难。所以一般情况下,使用root用户登录系统时需要十分小心。
      root可以超越任何用户和用户组来对文件或目录进行读取、修改或删除(在系统正常的许可范围内);对可执行程序的执行、终止;对硬件设备的添加、创建和移除等;也可以对文件和目录进行属主和权限进行修改,以适合系统管理的需要(因为root是系统中权限最高的特权用户)。
    • 普通用户:也称为一般用户,它的UID为1000-60000之间,普通用户可以对自己目录下的文件进行访问和修改,也可以对经过授权的文件进行访问;在添加普通用户时,系统默认用户ID从1000开始编号。
    • 虚拟用户:也称为系统用户,它的UID为1-999之间,虚拟用户最大的特点是不提供密码登录系统,它们的存在主要是为了方便系统的管理。

    区分用户类别

    通过查看不同用户UID来区分用户的类别为超级用户、普通用户或是虚拟用户。
    查看UID命令:id [option] [user_name]。
    相关参数:
       -u,-user 只输出有效UID
       -n,-name 对于-ugG输出名字而不是数值
       -r,-real 对于-ugG输出真实ID而不是有效ID
    UID为0时,标识的是超级用户(即root用户),UID为1000-60000之间,标识的是普通用户,UID为1-999之间,标识的是虚拟用户(即系统用户)。

    用户相关管理命令

    创建用户-useradd

    useradd命令可用来创建用户账号,并保存在/etc/passwd文件中。配置文件 /etc/login.defs 也影响着创建新用户的各项参数。

    语法:useradd [options] user_name。
    其中的命令选项说明如下:
        -u 指定用户UID
        -o 配合“-u”属性,允许UID重复
        -g 指明用户所属基本组,既可为用户组名,也可为GID(该组必须已存在)
        -d 指定用户的home目录,并自动创建用户home目录
        -s 指明用户的默认shell程序
        -D 显示或更改默认配置
    
    常用用法:
    useradd -D          显示创建用户所使用的默认值
    useradd -D -g 500	修改创建用户所使用的默认值
    useradd user1	    创建名为user1 的用户
    useradd -m user1	创建时给用户创建家目录
    useradd -M user1	创建时不创建用户的家目录
    useradd -d / user1	指定新用户的家目录为根目录
    useradd -u 501 user1	指定新用户的uid
    useradd -g g1 user1	    指定新用户的gid,该组必须先存在
    useradd -G g1,g2,g3 user1	把用户加到g1, g2, g3 三个附加组里
    useradd -o -u 100 user1	-o  允许uid 重复
    useradd -s /bin/python user1	使用指定的shell 程序
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    修改用户-usermod

    usermod可用来修改用户账号的各类信息。用户基本信息保存在数据库 /etc/passwd 中,其记录由用冒号分隔的7个字段组成:

    name:password:uid:gid:comment:home:shell

    命令 usermod 可以修改其中的6个字段。

    语法:usermod [options] user_name。
    其中的命令选项说明如下:
        -u 修改用户UID
        -g 修改用户所属用户组
        -I 修改用户账号名称
        -d 修改用户home目录
        -s 修改用户默认shell程序
    
    其他参数说明:
        -c<备注>       修改用户帐号的备注文字。
        -d登入目录>    修改用户登入时的目录。
        -e<有效期限>   修改帐号的有效期限。
        -f<缓冲天数>   修改在密码过期后多少天即关闭该帐号。
        -g<群组>       修改用户所属的群组。
        -G<群组>       修改用户所属的附加群组。
        -l<帐号名称>   修改用户帐号名称。
        -L             锁定用户密码,使密码无效。
        -s<shell>      修改用户登入后所使用的shell。
        -u<uid>        改用户ID。
        -U             解除密码锁定。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    删除用户-userdel

    userdel用于删除指定的用户以及与该用户相关的文件。(userdel命令用于删除指定的用户以及用户相关的文件,实际上是对系统的用户账号文件进行了修改)
    如果想同时删除该用户的主目录以及其中所有内容,要使用-r参数递归删除。不建议直接删除已经进入系统的用户,如果需要强制删除,请使用 userdel -f Test 命令。
    若输入删除操作命令时,没有加入参数选项,则仅仅会删除用户账号,而不删除相关文件

    语法:userdel [options] user_name。
    其中的命令选项说明如下:
        -f 强制删除用户账号,即使用户当前处于登录状态
        -r 删除用户,同时删除与用户相关的所有文件
        -h 显示命令的帮助信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改用户密码-passwd

    passwd用来修改用户的密码。
    语法:passwd [OPTION…] user_name。
    其中的命令选项说明如下:
        -n 设置修改密码最短天数
        -x 设置修改密码最长天数
        -w 设置用户在密码过期前多少天收到警告信息
        -i 设置密码过期多少天后禁用账户
        -d 删除用户密码
        -S 显示用户密码信息
    (root用户可以修改任何用户的密码,普通用户只能修改自身的密码)
    注意:passwd命令行操作需在root权限下进行
    其他参数选项:
        -f      强制执行
        -k      保留即将过期的用户在期满后仍能使用
        -g      修改群组密码
        -e      使密码过期
        -l      锁定用户密码,被锁定的用户不能登录
        -u      接触用户密码的锁定状态
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    用户组的基础概念

    用户组的基础概念

    用户组:具有相同特性用户的逻辑集合,通过组的形式使得具有相同特性的多个用户能够拥有相同的权限,便于管理;

    • 每一个用户都拥有自己的私有组;
    • 同一组内的所有用户可以共享该组下的文件;
    • 每一个用户组都会被分配一个特有的id号-gid。

    用户组GID

    用户组ID(Group ID,简称为GID)和用户UID类似,作为唯一标识符来标示系统中的一个用户组:

    • 在添加账户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组;
    • GID与UID都会将0赋予给超级用户或者具有超级用户的用户组(也就是root用户组);
    • 系统会预留一些较前的GID给虚拟用户(也称为系统用户)。

    可以通过输入命令行id [option] [user_name],查看用户组gid以及每个用户组下拥有的用户数量。每个系统预留的GID都有所不同,比如Fedora 预留了500个;在创建目录和文件时,会使用默认的用户组。

    用户组分类

    linux用户组的分类:
       管理员 root :具有使用系统所有权限的用户,其UID 为0.
       普通用户 : 即一般用户,其使用系统的权限受限,其UID为500-60000之间.
       系统用户 :保障系统运行的用户,一般不提供密码登录系统,其UID为1-499之间.
    用户组分类;
       普通用户组:可以加入多个用户
       系统组:一般加入一些系统用户
       私有组(也称基本组):当创建用户时,如果没有为其指明所属组,则就为其定义一个私有的用户组,起名称与用户名同名.注:私有组可以变成普通用户组,当把其他用户加入到该组中,则其就变成了普通组

    将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作。

    用户和用户组的关系

    • 一对一:一个用户可以存在一个用户组中,作为组中的唯一成员;
    • 一对多:一个用户可以存在多个用户组中,该用户具有多个组的共同权限;
    • 多对一:多个用户可以存在一个用户组中,这些用户具有和组相同的权限;
    • 多对多:多个用户可以存在多个用户组中,其实就是以上三种关系的扩展。

    用户组的相关管理命令

    创建组-groupadd

    groupadd可用来创建一个新的用户组,并将新用户组信息添加到系统文件中。

    语法: groupadd [options] group_name
    其中的命令选项说明如下:
        -f 如果组已存在,则成功退出
        -g 为新用户组所使用的GID
        -h 显示此帮助信息并退出
        -o 允许创建有重复 GID 的组
        -p 为新用户组使用此加密过的密码
        -r 创建一个系统账户
    
    其它选项:
         -R, --root CHROOT_DIR         chroot 到的目录
         -P, --prefix PREFIX_DIR       directory prefix
         -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    修改组-groupmod

    groupmod可用来更改群组识别码或者名称。

    语法:groupmod [options] group_name
    其中的命令选项说明如下:
        -g 修改为要使用的GID
        -h 显示此帮助信息并退出
        -n 修改为要使用的组名称
        -o 允许使用重复的 GID
        -p 更改密码(加密过的) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    删除组-groupdel

    groupdel命令用于从系统中删除组,需要注意的是,若是在组中仍然包括某些用户,此时需要先删除这些用户后,才能删除组。
    功能说明:用于删除指定的用户组,此命令不能删除用户归属的主用户组。

    语法:groupdel [options] group_name
    其中的命令选项说明如下:
        -f 即便是用户的主组也继续删除
        -h 显示此帮助信息并退出
    
    • 1
    • 2
    • 3
    • 4

    关联用户和组-gpasswd

    gpasswd可以用来添加或删除用户到组中。

    语法:gpasswd [option] group_name。
    其中的命令选项说明如下:
        -a 向组 GROUP 中添加用户 USER
        -d 从组 GROUP 中添加或删除用户
        -M 设置组 GROUP 的成员列表
        -A 设置组的管理员列表
        -r 移除组 GROUP 的密码
        -R 向其成员限制访问组 GROUP
        -Q 要 chroot 进的目录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    添加用户到某一个组 可以使用 usermod -G group_name user_name 这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉。所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用 gpasswd 这个命令来添加操作用户
    chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 /,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 / 位置。

    Chroot的好处:
      增加了系统的安全性,限制了用户的权力;
      建立一个与原系统隔离的系统目录结构,方便用户的开发;
      切换系统的根目录位置,引导 Linux 系统启动以及急救系统等。

    用户关联的文件

    Linux涉及到管理用户信息的文件一般有以下两种:

    /etc/passwd

    /etc/passwd:用户账号信息文件。在这个文件中,保存着系统中所有用户的主要信息,每一行代表着一个记录;每一行用户记录中定义了用户各个方面的相关属性。
    在这里插入图片描述
    在这里插入图片描述
    /etc/passwd 由:分割成7个字段,每个字段的具体含义是:

    • 用户名(如第一行中的root就是用户名)。用户名字符可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。
    • 存放该用户的密码。早期的lunix系统口令确实是存放在这里,但是基于对安全因素的考虑,之后就将密码存放到 /etc/shadow中了,此处的x对应的就是/etc/shadow文件中的密码
    • 这个数字代表用户标识号,也叫做UID。系统就是通过这个数字来对用户进行识别,0就是root,我们可以修改test用户的UID为0,此时系统就会认为root和test为同一个账户。通常UID的取值范围是0~ 65535(但实际上已经可以支持到4294967294),0是超级用户(root)的标识号,1~499为系统用户保留,普通用户的标识号从500开始,如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于500的。
    • 代表用户组标识,也叫做GID。这个字段对应着/etc/group 中的一条记录,其实/etc/group和/etc/passwd基本上是类似的。
    • 备注信息,该字段没有实际意义,主要记录该用户的一些属性,例如姓名、电话、地址等等。
    • 用户的home目录,当用户登录时就处在这个目录下。root的home目录是/root,普通用户的家目录是/home/username,这个字段是可以自定义的,比如你建立一个普通用户test1,要想让test1的家目录在/data目录下,只要修改/etc/passwd文件中test1那行中的该字段为/data即可。
    • shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有很多种sh, csh, ksh, tcsh, bash等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash。由于/etc/passwd文件允许所有用户读取,容易导致密码泄露,因此将密码信息从该文件中分离出来,单独放置在/etc/shadow文件中。

    /etc/shadow

    /etc/shadow:用户账号信息加密文件(又称为“影子文件”)。用于存储系统中用户的密码信息;
    /etc/shadow文件只有超级用户(root用户)具有读权限,其他用户均没有权限,从而保证了用户密码的安全性。密码在经由/etc/shadow保护后,在/etc/passwd文件的用户记录中只会以“X”的形式呈现。与/etc/passwd文件相似,每一行记录代表一个用户,且以“:”隔开,不同之处在于/etc/passwd中每行记录被分为九个字段。
    在这里插入图片描述
    在这里插入图片描述
    加密的密码:这里可以看到3类,分别是字符串、*和!!其中,字符串就是加密过的密码文件。星号代表帐号被锁定,双叹号表示这个密码已经过期了。字符串是以 6 6 6开头的,表明是用SHA-512加密的, 1 1 1 表明是用MD5加密的、 2 2 2 是用Blowfish加密的、 5 5 5是用SHA-256加密的。
    在安装系统时,默认会自动开启shadow保护,若是发现未启用shadow保护,可以通过pwconv来启用,当然也可以通过pwunconv来取消shadow保护(这里说到的操作仅允许root用户执行)。

    我们常常会因为某些原因忘记自己的账号密码,这个时候该怎么办?难道我们就不能再次使用这个账户了吗?其实是有解决办法的,可以通过root账户来解决这个问题,它可以在不知道密码的情况下,重新为你配置好指定账户的密码(这步是利用了root的身份使用passwd命令)。但是若是root账户的密码忘记了,我们就需要重新启动进入单用户模式,系统会提供对应的bash接口,那么此时呢,我们就可以利用passwd命令来修改账户密码;也可以通过挂载根目录的形式,来修改/etc/shadow,从而将账户的root密码清空,这个方式可以使得root账户不需要密码就可以登录,这里建议登陆后来使用passwd命令配置对应的root密码。

    用户组关联的文件

    Linux下涉及到管理用户组信息的文件一般有以下两种:

    /etc/group

    /etc/group:组信息文件。在这个文件中,保存着用户组的所有信息,每一行记录代表一个用户组;将用户分组是对用户进行管理及控制访问权限的一种手段,每个用户都属于一个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
    /etc/group文件每一行由四个字段的数据组成,且字段之间用“:”隔开。这里我们以root用户为例,根据root用户的文件记录来了解/etc/group文件用户组记录中相关字段的意义:在这里插入图片描述
    在这里插入图片描述

    • 组名,也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。
    • 组密码和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。
    • 组ID (GID)就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。
    • 组中的用户列表,此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。

    /etc/gshadow

    /etc/gshadow:组信息加密文件。在这个文件中,会保存用户组加密信息,比如说用户组管理密码就保存在此(与/etc/shadow文件相似);与/etc/group文件互补,对于大型服务器来说,拥有很多用户和组,此时会针对这些用户和组来生成一些复杂的权限模型,此时设置并管理密码就显得尤为重要。
    /etc/gshadow文件每一行由四个字段的数据组成,且字段之间用“:”隔开。这里我们以root用户为例,根据root用户的文件记录来了解/etc/group文件中相关字段的意义:
    在这里插入图片描述
    在这里插入图片描述

    • 组名,同 /etc/group 文件中的组名相对应。
    • 组密码,对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 “!”,指的是该群组没有组密码,也不设有群组管理员。
    • 组管理员,从系统管理员的角度来说,该文件最大的功能就是创建群组管理员。考虑到 Linux 系统中账号太多,而超级管理员 root 可能比较忙碌,因此当有用户想要加入某群组时,root 或许不能及时作出回应。这种情况下,如果有群组管理员,那么他就能将用户加入自己管理的群组中,也就免去麻烦 root 了。由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了。
    • 组中的附加用户,该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同。

    创作不易,如果这篇【文章】有帮助到你,希望可以给作者点个赞👍,你的鼓励是我最大的动力!

  • 相关阅读:
    使用JavaRestClient查询文档&排序、分页、高亮
    Oracle SQL Developer 中查看表的数据和字段属性、录入数据
    MVC您正在查找的资源可能被移除
    用AI的智慧,传递感恩之心——GPT-4o助力教师节祝福
    非零基础自学Java (老师:韩顺平) 第14章 集合 14.9 Set 接口和常用方法
    渗透攻防Web篇-深入浅出SQL注入
    Nacos 的安装与服务的注册
    HtmlParse:一款超轻量级的HTML文件解析和爬取工具
    Z-YKR-pNA,108318-36-1,三肽Z-Tyr-Lys-Arg-对硝基苯胺
    ​python从小到大排序 青少年编程电子学会python编程等级考试三级真题解析2020年12月
  • 原文地址:https://blog.csdn.net/qq_51601649/article/details/125947311