【Linux学习(五)管理用户和用户组】万字长文

管理账号和用户组

在之前多篇文章中,我们反复的提到过普通用户和 root用户的一些区别。也多多少少涉及了多用户和用户组的概念

如果你是初学者,不出意外你一直使用的应该都是 root用户(俺也一样);那前面说到的普通用户可能会存在的问题,你应该大部分都不会碰到。

但仅限于在你自己的电脑中,以后工作的话你就不一定能拿到 root用户了。

root用户作为管理员账户 拥有系统的最高权限,工作中自然是不会人手一个,那就失去了意义 而且不安全 …

管理员的工作中相当重要的一环就是管理账户,普通用户的创建都需要经过管理员的协助

所以无论你以后工作拿不拿得到 root用户,本篇文章对你来说都尤为重要;先让我们了解 Linux是如何辨别每一个用户的。

用户标识符

虽然我们一般登录 Linux都使用的是用户名加密码方式,但其实 Linux并不能直接辨别各个账户的用户名。

Linux辨别用户靠的是用户的 ID,所谓的用户名对 Linux来说没什么意义;只是为了方便人来记忆和区分。

我们可以做个小测试:

如下,我的 /home目录下存在着属于我自己(moluu)的工作目录;

如果你是初学者,还不清楚如何创建用户可以使用 cat /etc/passwd,在该文件中随便选一个用户;

为该用户在 /home目录下新建工作目录,将原本的属主和属组修改为该用户

我创建该工作目录时使用的是 root用户(现在也是),所以默认该工作目录的所属者和所属用户组为 root root。

但我对其都进行了修改,此时该工作目录的所属用户和所属用户组改变为了 moluu moluu

[root@izbp1az353cisf510keg74z home]# ll
total 4
drwxr-xr-x 2 moluu moluu 4096 Jan  2 21:06 moluu

我们使用 vim /etc/passwd命令,打开我们的用户信息存放文件,并对 moluu用户进行修改【Linux学习(五)管理用户和用户组】万字长文_第1张图片

我们将用户 id进行修改,看看 Linux的反应如何

# 将我自己所属账号的 用户ID修改为 1001
moluu:x:1001:1000::/home/moluu:/bin/bash

修改完成后再次使用 ll命令,查看工作目录 moluu所属的用户和 用户组

【Linux学习(五)管理用户和用户组】万字长文_第2张图片

可以看到,之前的 moluu(也就是该目录的所属用户)变成了 “1000”;

为什么会如此呢?

很简单 就如前面所说的,Linux其实只认识 用户的ID(以下简称为 UID);

我们使用 chown命令时写的 用户名参数;Linux并不认识,它会根据这个参数在 /etc/passwd中寻找对应的 UID

Linux会将这个 UID作为该目录的所属用户信息记录在这个目录中,而不是将我们使用的 用户名参数作为 该目录所属用户信息进行记录。

而我们对 UID"1000"进行了修改,/etc/passwd中就不存在 UID"1000",Linux也就无法从 /etc/passwd中找到 UID"1000"对应的用户名

找不到记录 UID对应的用户名怎么办呢?还能怎么办 把记录的 UID显示出来呗,文件总得有个属主吧。(使用 chown命令修改用户的属主时,如果写的用户参数为 UID;即便不存在该 UID也不会报错,所以显示文件的属主为一个 不存在的 UID是允许的)

我们将原本修改的 UID"1001"改回 “1000”;

【Linux学习(五)管理用户和用户组】万字长文_第3张图片

该目录记录的 UID能够找到对应的用户名后,会恢复正常 继续显示记录 UID对应的用户名

用户 UID和工作目录记录的 UID对不上是很严重的事情,如果该目录的权限还是 “7 0 0”,那么你下次登录时甚至没办法进入自己的家目录。

怎么办呢?只能麻烦管理员帮忙修改一下属主了 ╮(╯-╰)╭

所以权限和 用户相关一定要学好啊,不然碰到这种误操作的情况还是蛮致命的。

用户账号

使用账户登录 Linux系统是十分简单的事情,虽然登录简单 但不代表背后的东西也很简单

我们先来了解一下 Linux账号的登录流程:

  1. 首先系统会读取你输入的用户名在 /etc/passwd中是否存在,如果存在则将对应的 UID和 GID(GroupID 即用户组ID)、家目录、shell设置一并读出;如果不存在则退出。
  2. 确认用户名存在且读取完需要读取的信息后,系统会开始核对你的密码;即 Linux会进入 /etc/shadow中寻找对应 UID的加密密码,将该加密密码和你输入的密码进行对比
  3. 如果一切都 OK,就会进入 shell管理阶段

从上述登录流程我们能够得知 与用户账号相关的文件有两个,这两个文件主要存储 用户的UID、GID和加密后的密码。

对这两个文件的充分理解有助于我们之后的学习

/etc/passwd

我们先来看看这个目录的结构是什么样子的

【Linux学习(五)管理用户和用户组】万字长文_第4张图片

可以看到,每一行对应的是一个账户,账户的信息使用 " : " 分隔

除了我们一直在使用的 root账户和刚刚创建的 个人账户(moluu),还存在着一大堆的其他账户;

这些账户是 Linux系统运行时所必需的账户,为避免出现修电脑或系统异常,建议不要对其进行改动。

我们把视野放到第一行 也就是我们一直在使用的 root用户

root:x:0:0:root:/root:/bin/bash

这一行中有七个字段,字段之间都使用 " : "分隔

我们依次来对这七个字段进行解释

  1. 显而易见,第一个字段是用户名 需要用来对应 UID,也就是第三条字段

  2. 所有的账户信息的第二个字段都是 " x ",这个字段原本存放的是对应用户密码。

    1. 早期的 UNIX系统的密码就是存放于该字段上
    2. 但出于安全,密码存放位置改变为了 /etc/shadow,因此你只能看到 一个 " x "
  3. 这个字段是用户的 UID,十分关键。

    1. 一般来说,UID并不能随意进行更改,Linux对 UID的区间进行了一些限制,这些限制我们需要了解
UID区间 该 UID区间用户的特性
0(系统管理员) 当用户的 UID为0时,代表这个账号具备管理员权限;系统允许除 root 外还存在其他管理员,但并不建议这么做。
1~999(系统账号) 保留给系统使用的 UID;默认 1000以下的数字留给系统作为保留账号只是一个习惯。这些特殊的账号默认是不可登录的,通常 1-200指的是 Linux发行版自行建立的系统账号,201~999 是用户有系统账号需求时可建立的 UID区间
1000~60000(可登录的账号) 一般用户使用的 UID区间;事实上 目前的Linux内核(3.10.x)已经支持到 4294967295 (2^32-1)了
  1. GID,该用户的初始用户组 ID;这个字段与 /etc/goup下的用户组有关,它使 GID和组名对应
  2. 用户信息说明栏;这个字段用于解释账号的作用,甚至可以省略
  3. 家目录;可以通过这个字段准确的寻找对应用户的家目录
  4. shell;当用户登陆系统后就会获取一个 shell来和系统内核沟通,以进行用户的操作认为。默认 shell会使用 bash就是这个字段指定的,需要注意的是 有一个 shell可以使用户登录时无法获取 shell环境。也就是 /sbin/nologin这个东西

/etc/shadow

我们知道很多程序的运行都与权限有关,读取当前用户的权限需要先读取该用户的 UID和GID;

因为 UID和 GID需要被频繁读取,所以存放它们的文件/etc/passwd设置的权限必须为所有人可读。

前面提到早期的用户密码也存放于/etc/passwd中,虽然是以被加密的形式存放在第三个字段,但所有人可读后还是有所隐患。

因此 密码被单独存放在了 /etc/shadow中,我们先来看看该文件的构造

【Linux学习(五)管理用户和用户组】万字长文_第5张图片

/etc/passwd一样,/etc/shadow也以 " : "作为分隔符,数一数应该能够发现 存在九个字段。

同样的我们也需要对这九个字段进行分解

  1. 毋庸置疑第一个字段为账号名称;密码不可能脱离账号名称单独存在,因此需要和 /etc/passwd下的账户名称有所对应。

  2. 密码;这个字段的数据才是真实的密码,而且是经过了编码的密码 你只会看到一些特殊字符和字母数字。

    1. 虽然加密后的密码很难被破解,但不等于不会被破解。
    2. 因此该文件的权限一般被设置为: 仅拥有者可读写 或所有人均无权限读写执行。
    3. 一般这个文件权限的开放 是密码泄露的开端,你要十分谨慎对这个文件权限的修改。
  3. 密码最后修改时间;可以看到大部分密码的最后修改时间都是 16659

    1. 首先解释一下 16659是什么,它指的是 2015年 5月 4号那天。
    2. 相信这么解释后大家应该都能猜到是类似时间戳的东西
    3. 因为 Linux的时间比较特殊,它是从 1970/1/1到现在的总天数。这些东西也没必要深究 以后有机会再讲
  4. 密码再次修改需要等待的天数;这个字段限制了对应账号密码修改的 cd,防止没事瞎折腾把密码给忘了,如果为 0表示随时可以修改。

  5. 密码需要修改的天数;经常改密码未必是个好习惯,但从来不改肯定是个坏习惯。防人之心不可无,这个字段规定了你再多少天之内必须修改一次密码。

    1. 如果你在规定时间内未对该密码进行一次修改操作,则该密码会变为过期特性。
    2. 在上述截图中基本上所有存在密码的用户,这个字段都是 99999(也就是 273年)意为 你爱改不改
  6. 密码需要修改期限的警告天数;也就是设置了 第五个字段后,你可以设置该字段在密码过期前对你进行提醒

    1. 从上述截图中可以看到这个字段的值为 7,也就是在密码过期前的七天之内,系统会给出警告
  7. 密码过期后的账号宽限时间;该字段可以允许你在多少时间内仍可以继续使用过期密码登录账号

    1. 一般来说如果你在第五个字段给出的时间内未修改密码,你的密码就会过期。
    2. 但就和食物一样,过期不代表不能继续使用,只是每次登录时系统都会强制要求你重新设置密码。
      1. 你必须在登录时输入一次旧密码和两次新密码来重置你的密码,才能够开始使用系统的各项资源
    3. 而你在该字段给出的时间内仍不对密码进行修改,你的密码会从过期状态变为失效状态。
    4. 失效就比过期严重了,你将无法使用该密码登录你的账号
  8. 账号失效日期;该字段可以设置账号失效的时间(也是使用的 1970/1/1到某一天的总天数形式),设置后 在指定时间到来时,无论账号的密码是正常或过期,该账号都将无法使用。

    1. 该功能如果正常使用 Linux感觉是有点华而不实的功能,但如果使用在收费方面还是很有用的。
  9. 这个字段为保留字段,看以后有没有新功能加入

其实一般这些密码忘记了都不要紧,只要记得 root账户的密码即可。

其他用户的密码你都可以通过 root账户来执行重置操作,如果 root账户密码忘记了 emmm(这题我不会啊,但其实是可以通过一些特定手法来解决该问题的)

用户组

用户组能够保证多个团队在一个 Linux系统下工作时,各个团队之间的数据保密性。

将用户进行组与组的划分,是十分有必要的

在 Linux中有一个文件专门用来存放用户组,即 /etc/group

同上,我们需要对这个文件结构进行认识

/etc/group

【Linux学习(五)管理用户和用户组】万字长文_第6张图片

这个文件的结构比较简单,字段也不是很多 理解起来也比较轻松。

我们对这些字段进行一个分解

  1. 组名;与用户名类似 是来让人方便记忆方便区用户组而存在的,它需要与第三个字段 GID对应
  2. 用户组密码;这个字段通常不需要设置,这个设置一般有用户组管理员使用,目前很少有机会设置这个用户组管理员。同样 密码已经移动到了 /etc/gshadow中,因此此字段你只能看到一个 " x "。
  3. GID;这个字段表示用户组 ID,/etc/passwd中的第四个字段
  4. 用户组中的成员;一个账号可以加入多个用户组,如果想让账户加入该用户组只需要将用户名填入该字段即可。
    1. 填入多个用户名时,用户名之间使用 " , "(英文逗号)分隔,不能存在空格。
    2. 但个人不建议这么做,该文件是极其重要的;你不能保证你对其写入时不会出错。
    3. 我们可以使用 命令的方式,将用户加入到指定用户组中,这在下面会讲到

【Linux学习(五)管理用户和用户组】万字长文_第7张图片

虽然一个用户可以加入多个用户组,但当我们使用该用户进行工作时;创建的文件和目录所属用户组并不会因为该用户加入了多个用户组而受影响,这就涉及到所谓的有效用户组

一般来说每一个用户在 /etc/passwd文件中的第四个字段都会存在一个 GID,这个 GID是该用户的初始用户组(initial group)

每当用户登录 Linux系统时,立刻就会获得这个用户组的相关权限。

初始用户组在用户登录时就已经主动获取了,所有不需要去 /etc/group修改第四个参数;而非初始用户组就需要手动添加了。

我们通过 groups可以看到当前用户所支持的全部用户组,追加一个用户名参数 可以查看指定用户所支持的全部用户组

[root@izbp1az353cisf510keg74z ~]# groups moluu
# moluu用户所支持的全部用户组有 它的初始用户组和 root用户组
moluu : moluu root

返回信息的 第一个用户组为有效用户组

当我们创建文件或目录时 文件或目录的所属用户组会以当前创建用户的有效用户组为准

有效用户组是可以被切换的,我们可以使用 newgrp命令来选择一个支持的用户组进行有效用户组的切换。

​ 使用该命令需要使用另一个 shell,在该命令执行后需要使用 exit退出该 shell 返回原本的 shell

/etc/gshadow

前文提到该文件中存放了 用户组真实的密码;这个文件的结构和 /etc/group类似,也是四个字段

【Linux学习(五)管理用户和用户组】万字长文_第8张图片

需要特别注意的是第二个字段,如果这个字段为空或者是 " ! "表示该用户组没有管理员。

第二第三个字段为 用户组管理员和支持该用户组的用户

以系统管理员的角度来说,该文件最大的作用就是设立用户组管理员

用户组管理员有权限使普通用户加入它所管理的用户组,即分担 root用户的压力。

但现在有类似 sudo之类的工具,用户组管理员功能使用得也就越来越少了;我们在后续的 gpasswd中会介绍这方面的内容

增删改用户

讲了这么多铺垫,终于到了大家感兴趣的环节,用户的添加删除与修改。

我们一个一个说,虽然都不用大费笔墨 但我还是会讲得连初学者也能够看懂。

添加用户

添加用户十分简单,我们可以使用 useradd命令;使用该命令至少需要追加一个 用户名参数。

其他七七八八的选项其实都可以省略,虽然可以省略但讲还是要讲的:

  • -u:我们可以使用 -u选项指定创建用户的 UID(必须是数字,最好为 1000+)
  • -g:我们可以使用 -g选项指定创建用户的初始用户组;这个初始用户组的 GID会被写入 /etc/passwd的第四个字段
  • -G:我们可以使用 -G选项指定该用户创建时加入那些用户组;这个选项和参数会修改 /etc/group中的相关内容
  • -M:使用 -M选项可以在创建用户时 强制不建立家目录(系统账号默认值)
  • -m:使用 -m选项可以在创建用户时 必须建立家目录(一般账号默认值)
  • -c:这是账号的说明,也就是 /etc/passwd中第五个字段;可以看心情写点啥
  • -d:使用 -d选项可以在创建用户时 指定某个目录成为该用户的家目录(务必使用绝对路径)
  • -r:使用该选项表示建立的账号是一个系统账号,这个账号的 UID会有所限制;默认的一些选项也会有所不同
  • -s:使用 -s选项后,我们可以追加一个 shell;如果不追加的话默认为 /bin/bash
  • -e:使用 -e选项可以让我们在创建用户时写一个日期,格式为【yyyy-MM-dd】;
    • 这里写的时间就是 /etc/shaodw中的第八个字段,也就是账号失效时间
  • -f:使用 -f选项可以设置密码过期后是否会失效,如果为 0表示立刻失效;为 -1表示不会失效,只会过期

可以使用的选项有这么多,而我们添加用户时 仅追加用户名参数就能够完成用户的创建;可想而知系统存在许多的默认值

一部分默认值可以使用 useradd -D来查看

[root@izbp1az353cisf510keg74z ~]# useradd -D
# 新建账号的初始用户组 GID为 100,即 users
GROUP=100
# 用户的家目录通常与用户名一致,且会存在于该值的目录后
# 即 moluu用户的家目录默认会是 /home/moluu
HOME=/home
# -1表示 该用户密码过期后不会立即失效
INACTIVE=-1
# 账号失效的日期,为空表示不会自然失效
EXPIRE=
# 默认的 shell程序
SHELL=/bin/bash
# 用户家目录参考基准目录
SKEL=/etc/skel
# 表示默认建立 mailbox
CREATE_MAIL_SPOOL=yes

这些数据其实是存在于 /etc/default/useradd中的,你可以使用 vim查看一下

这里的 GROUP在我使用的 CentOS中并不会生效,CentOS默认的用户组会和 用户名一致 GID也会与 UID一致

这里需要补充一点东西,即"私有用户组机制"和"公有用户组机制"

  • 私有用户组机制:

系统会建立一个和用户名同名的 用户组,来作为该用户的初始用户组;

这种用户组的设置机制会比较有保密性,这是因为用户都有自己的用户组,而且家目录的权限默认为 700即除自己外其他人不可访问。

使用这种机制后,将不会考虑 GROUP=100这个设置值;代表性的发行版本有 RHEL、Fedora、CentOS等。

  • 公有用户组机制

这种机制会使用 GROUP=100这个设置值,因此每个新建账号的初始用户组都为 users。

且默认家目录的权限通常会是 “731”,这种机制下所有用户都可以共享家目录内的数据;代表发行版本为 SUSE等。

当然,这些默认值并不是全部;我们还可以前往 /etc/login.defs查看剩下的默认值

MAIL_DIR        /var/spool/mail
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN               201
SYS_UID_MAX               999
GID_MIN                  1000
GID_MAX                 60000
SYS_GID_MIN               201
SYS_GID_MAX               999
CREATE_HOME     yes
UMASK           077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

一个一个看

  • MAIL_DIR

    • 该设置的值为 mailbox所在的目录
    • 用户的默认的 mailbox 文件存放目录是 var/spool/mail,所以moluu用户的mailbox目录为 /var/spool/mail/moluu
  • 以 PASS_开头的设置

    • 这些设置除去已经失效的 PASS_MIN_LEN外,分别对应的是 密码需要重新修改的天数(PASS_MAX_DAYS)、密码再次修改需要等待的天数(PASS_MIN_DAYS)、密码需要修改期限的警告天数(PASS_WARN_AGE)
    • 这也就是为什么进入 /etc/shadow能够发现每一行第四、五、六个字段都为 [0:99999:7]
    • PASS_MIN_LEN失效是因为我们登录时使用的是 PAM模块来进行密码校验
  • UID_MIN

    • 这个设置的值为 可登录系统普通用户的最小 UID
  • UID_MAX

    • 这个设置的值为 可登录系统普通用户的最大 UID

这里需要注意的是,当我们新建用户且不追加 -u参数时;系统会前往 /etc/passwd中寻找最大的 UID,将该 UID与 UID_MIN的值进行比对。

如果这个 UID比 UID_MIN的值小,则系统会使用 UID_MIN的值来作为 新建用户的UID

如果这个 UID比 UID_MIN的值大(或相等),则系统会在该 UID的基础上 +1,将这个 +1后的 UID作为新建用户的 UID

剩下的 SYS_UID_MIN和 SYS_UID_MAX是系统用户相关,不扩展;GID相关和 UID一样,不多赘述

  • CREATE_HOME yes
    • 这个设置值为 yes表示会在新用户创建时自动加上 -m参数也就是会自动创建家目录。
  • UMASK 077
    • 这个设置的值为新建家目录的默认权限;将现有的存取权限(777)减掉该设置的值后,即可产生建立家目录时预设的权限。
    • 这也就是为什么我们的家目录创建时权限默认为 "700"了
  • USERGROUPS_ENAB yes
    • 这个设置的值为 yes后,如果我们删除创建的用户 导致该用户的初始用户组成员为空,则将该用户组自动解散。
      • 默认情况下是会为新用户创建一个用户名同名的初始用户组
  • ENCRYPT_METHOD SHA512
    • 这个设置的值表示使用 SHA-512来作为密码的加密方式

如果要说一个账号什么最关键,毫无疑问是 密码。

而我们在添加用户时并没有任何选项和密码相关,也就导致了我们创建的用户 密码其实都为空。

虽然没有密码,但系统仍会将该用户的密码相关参数写入到 /etc/shadow中,即便写入的密码数据为空。

写入后 /etc/shadow文件中仅有密码参数,而不存在加密过的密码数据;

这种情况呢,我们创建的用户会被锁定,即 无法使用该账号来完成登录。

所以我们还需要使用 passwd命令来为创建的用户设置密码,设置完密码才算正式的完成了用户的创建。

如果单独使用 passwd命令表示修改自己的密码,如果你当前使用的是 root用户 即 修改 root用户的密码

如果新建用户后,要为新用户创建密码,则用passwd 用户名,注意要以root用户的权限来创建。

# 使用 passwd命令为 moluu用户设置密码
[root@izbp1az353cisf510keg74z ~]# passwd moluu
Changing password for user moluu.
# 会提示你输入新的密码,出于安全考虑 你输入的密码是不可见的(甚至位数都看不见)
# 输入密码需要遵循规范,不能过短也不能有非法字符
New password: 
# 按下回车后出现 Retype字样表示你的密码合法,再次输入该密码可以完成密码的修改
Retype new password: 
# 返回该提示表示密码设置成功
passwd: all authentication tokens updated successfully.

passwd命令还有一些比较常用的选项 比如 -l选项,在修改密码时使用 -l选项可以让指定用户的密码不合法;即 锁定账号(lock)

# 追加 -l选项,使指定用户的账户锁定
[root@izbp1az353cisf510keg74z ~]# passwd -l moluu

该命令执行后对应用户在 /etc/shadow中第二个字段 即加密后的密码会被修改为 " ! ",也就是不合法的意思

如果想解开可以再使用 -u选项 (unlock)

# 追加 -u选项,使指定账号解锁
[root@izbp1az353cisf510keg74z ~]# passwd -u moluu

到这里用户的创建就告一段落,虽然操作起来很简单,但背后要了解的东西还是蛮多的

删除用户

一般来说"增删改查"中的 都是比较简单的 在 Linux中也是一样,删除账号十分容易;

删除用户使用 userdel命令,通常我们要删除一个账号可以手动将 /etc/passwd/etc/shadow 里面的账号取消。

如果账号只是暂时不启用,我们将其 /etc/shadow中第八个字段设置为 0即可;

虽然设置后该账号无法使用,但与该账号相关的数据会保留下来。

userdel的实际应用场景一般是你 确定真的不让该用户在主机上使用任何资源时

示例:

userdel linuxde       # 删除用户linuxde,但不删除其家目录及文件;
userdel -r linuxde    # 删除用户linuxde,其家目录及文件一并删除;

不要轻易用-r选项;他会在删除用户的同时删除用户所有的文件和目录,切记如果用户目录下有重要的文件,在删除前请备份。

修改用户

俗话说 人有失手,在创建用户时难免会有一些误操作或你存在特定需求;导致需要修改当前用户的一些数据和信息。

修改用户的信息除了下面要说到的 usermod命令,我们还可以直接进到 /etc/passwd/etc/shadow中直接修改。

这样做有好处也有坏处,好处是比较方便 坏处则是有点不安全。

这两个文件都是极为重要的文件,所以能用命令的话 就不建议手动对其进行修改了。

usermod命令的使用没什么难度,唯一需要多费些口舌的就是它的选项;

它的选项也及其多,但我把他放到这个位置来讲后,你已经看一眼都能够理解了。

usermod命令的一些选项:

  • -c:使用该选项允许我们修改用户的说明信息
    • 也就是修改 /etc/passwd中的第五个字段内容
  • -d:使用该选项允许我们修改用户的家目录,通常和-m一起使用;
    • 也就是 修改/etc/passwd中的第六个字段内容
  • -m:移动用户家目录到新的位置,不能单独使用,一般与-d一起使用。
  • -e:使用该选项我们可以修改或追加 账号过期的时间;格式为 【yyyy-MM-dd】
    • 也就是修改 /etc/shadow的第八个字段内容
  • -f:使用该选项我们可以修改或追加 账号过期的宽限时间
    • 也就是修改 /etc/shadow的第七个字段内容
  • -g:使用该选项允许我们修改用户初始用户组
    • 也就是修改 /etc/passwd中的第四个字段(GID)
  • -G:使用该选项允许我们修改用户所支持的次要用户组
    • 也就是 /etc/group中的内容
  • -a:该选项和 -G选项合用表示为用户 添加所支持的次要用户组,而非修改
  • -s:使用该选项允许我们修改用户 shell的实际文件;例如 /bin/bash、/bin/csh
  • -l:使用该选项允许我们修改用户名,也就是 /etc/passwd的第一个字段
  • -u:从选项能应该能看出是允许我们修改用户的 UID,也就是 /etc/passwd的第三个字段(尽量为 1000+的非重复UID)
  • -L:使用 -L选项会使该账号冻结,即修改了 /etc/shadow的第二个字段也就是将密码设置为 " ! "
  • -U:使用该选项后 /etc/shadow第二个字段的 " ! "会被拿掉,即 将该账号解锁

其大部分选项都和 useeadd命令类似,唯一不同的是 -L-U;但实际上还是和 passwd命令中的 -l-u没什么区别

理解起来基本上没有太多成本,但需要注意的是 这两个选项未必会在所有的 Linux发行版本上都存在。

一部分示例:

# 使用 -c选项将指定字符串作为账号说明,即写入 /etc/passwd中第五个字段
[root@izbp1az353cisf510keg74z ~]# usermod -c "我的私人账号" moluu

# ------------------------------------------------------------

# /etc/passwd
moluu:x:1000:1000:我的私人账号:/home/moluu:/bin/bash
# 使用 -e选项将该账号的过期时间设置为 2030年最后一天,即 写入 /etc/shadow中第八个字段
[root@izbp1az353cisf510keg74z ~]# usermod -e "2030/12/31" moluu

# --------------------------------------------------------------

# /etc/shadow;22279 为 2030年最后一天
moluu:*/p./:18631:0:99999:7::22279:
# 将用户 moluu的家目录修改为 /home/test
[root@izbp1az353cisf510keg74z ~]# usermod -md /home/test lutixiaya
# -aG参数同时使用表示 将 moluu用户加到 root组
[root@izbp1az353cisf510keg74z ~]# usermod -aG root moluu 
# 将用户名 "moluu"修改为 "newMoluu"
[root@izbp1az353cisf510keg74z ~]# usermod -l newMoluu moluu 

增删改用户组

了解完了账号的增删改,我们紧接着来看看用户组的增删该;

和学习账号的增删该一样,无非是学习一些命令的使用和选项的解释,还有一些可有可无的扩展。

我们一个一个看

新增用户组

想新增一个用户组我们可以使用 groupadd命令,该命令的使用不会很难;我们直接通过演示来了解

新建 test用户组,该用户组的 GID为350
groupadd -g 350 test

一般来说建立用户组我们能用到的参数仅有 -g-r

-g选项可以让我们指定用户组创建时的 GID;-r则表示建立的用户组为系统用户组

如果不指定 GID,默认也会和 UID的默认值一致

新建用户组时的 GID的规范和 UID有所不同,曾经有一些教育培训手册谈到:为了使用户的 UID和初始用户组的 GID成对,建议新建与用户无关的私有用户组时 使用小于 1000的 GID为宜。

也就是说,如果要建立用户组的话最好使用 -r选项(因为系统用户组的默认最大 GID为 1000)

不过这就见仁见智了,看你自己的选择 都可以。

修改用户组

想修改用户组的信息和数据可以使用 groupmod命令,该命令和 usermod类似 但简单很多(其实用户组的增删改都很简单)

我们仍然通过示例来先了解

# 使用 groupmod命令对 test用户组进行修改,将其 GID修改为 351;组名修改为 newTest
groupmod -g 351 -n newTest test

毋庸置疑 -g参数仍和 GID相关,在这里表示命令执行后的 GID,-n则表示修改命令执行后的组名。

不过不是很建议总是修改 GID,容易造成系统资源的错乱

删除用户组

删除用户组使用 groupdel命令,删除命令是最简单的;但用户组的删除需要你了解删除的用户组是否为空

如果是一个为空的用户组,则可以使用 groupdel 组名的方式直接删掉。

如果不是你有两种方法使其为空

  • 将该用户组中的成员使用 userdel命令删除
  • 使用 usermod命令将该用户组中存在的用户移出需要删除的用户组

哪种方式几看你自己的需求和想法了

用户组管理员

如果管理员太忙了,没有空闲来处理用户组相关的问题,导致你想要加入某个用户组时只能干等着;

这个时候你就可以提议让管理员为用户组建立用户组管理员,用户组管理员来替代管理员处理用户组相关的问题。

用户组管理员拥有将其他账号加入或移除用户组的权限

我们先来看看如何设立用户组管理员

设立用户组管理员使用 gpasswd命令,该命令也只能由 管理员使用。

一般情况下 管理员直接使用该命令加用户组名,是修改当前用户组的密码

[root@izbp1az353cisf510keg74z home]# gpasswd test
Changing the password for group test
New Password:

所以我们如果要为用户组设立管理员应该 追加 -A选项,除了 -A外还有一些其他选项需要了解

  • -A:使用该选项我们可以将用户组的权限交给指定用户,也就是设立管理员
# 将 test用户组的管理权限交给 moluu用户
gpasswd -A moluu test
  • -M:使用该选项我们可以将某些用户加入到该用户组中,多个用户之间使用 “,”(英文逗号)分隔
# 将用户 zhangsan lisi加入到 test用户组中
gpasswd -M zhangsan,lisi test
  • -r:删除指定用户组的密码
  • -R:使指定用户组的密码失效

好了 现在 test用户组存在用户管理员了,而管理员添加或删除用户也是使用的 gpasswd命令;只是参数有所改变

  • -a:为当前用户组添加用户
# 将用户 wangwu加入 test用户组
gpasswd -a wangwu test
  • -d:删除用户组中的某位成员
# 将用户 zhangsan从 test用户组中删除
gpasswd -d zhangsan test

放松一下眼睛

【Linux学习(五)管理用户和用户组】万字长文_第9张图片

原图P站地址

画师主页


你可能感兴趣的:(Linux学习,linux,shell)