Linux-用户和用户组的管理

文章目录

  • 用户的基础概念
      • 相关概念
      • 区分用户类别
  • 用户相关管理命令
      • 创建用户-useradd
      • 修改用户-usermod
      • 删除用户-userdel
      • 修改用户密码-passwd
  • 用户组的基础概念
      • 用户组的基础概念
      • 用户组GID
      • 用户组分类
      • 用户和用户组的关系
  • 用户组的相关管理命令
      • 创建组-groupadd
      • 修改组-groupmod
      • 删除组-groupdel
      • 关联用户和组-gpasswd
  • 用户关联的文件
      • /etc/passwd
      • /etc/shadow
  • 用户组关联的文件
      • /etc/group
      • /etc/gshadow

用户的基础概念

在这里插入图片描述

相关概念

  • 用户:用户是能够获取系统资源的权限的集合;每个用户都会分配一个特有的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 程序

修改用户-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             解除密码锁定。

删除用户-userdel

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

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

修改用户密码-passwd

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

用户组的基础概念

用户组的基础概念

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

  • 每一个用户都拥有自己的私有组;
  • 同一组内的所有用户可以共享该组下的文件;
  • 每一个用户组都会被分配一个特有的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 中的默认值

修改组-groupmod

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

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

删除组-groupdel

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

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

关联用户和组-gpasswd

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

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

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

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

用户关联的文件

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

/etc/passwd

/etc/passwd:用户账号信息文件。在这个文件中,保存着系统中所有用户的主要信息,每一行代表着一个记录;每一行用户记录中定义了用户各个方面的相关属性。
Linux-用户和用户组的管理_第1张图片
Linux-用户和用户组的管理_第2张图片
/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中每行记录被分为九个字段。
Linux-用户和用户组的管理_第3张图片
Linux-用户和用户组的管理_第4张图片
加密的密码:这里可以看到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文件用户组记录中相关字段的意义:Linux-用户和用户组的管理_第5张图片
Linux-用户和用户组的管理_第6张图片

  • 组名,也就是是用户组的名称,有字母或数字构成。同 /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文件中相关字段的意义:
Linux-用户和用户组的管理_第7张图片
Linux-用户和用户组的管理_第8张图片

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

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

你可能感兴趣的:(Linux,linux,用户管理,用户组管理)