0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux用户与用户组的关系详解

马哥Linux运维 来源:未知 作者:胡薇 2018-06-13 14:30 次阅读

1、用户和用户组文件

linux 中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中的。

在 linux 系统中,所创建的用户帐号和其相关信息 (密码除外) 均是存放在 / etc/passwd 配置文件中。由于所有用户对 passwd 文件均有读取的权限,因此密码信息并未保存在该文件中,而是保存在了 / etc/shadow 的配置文件中。

在 passwd 文件中,一行定义一个用户帐号,每行均由多个不同的字段构成,各字段值间用 ":” 分隔,每个字段均代表该帐号某方面的信息。

在刚安装完成的 linux 系统中,passwd 配置文件已有很多帐号信息了,这些帐号是由系统自动创建的,他们是 linux 进程或部分服务程序正常工作所需要使用的账户,这些账户的最后一个字段的值一般为 / sbin/nologin,表示该帐号不能用来登录 linux 系统。

在 passwd 配置文件中,从左至右各字段的对应关系及其含义:

由于 passwd 不再保存密码信息,所以用 x 占位代表。

若要使某个用户账户不能登录 linux,只需设置该用户所使用的 shell 为 / sbin/nologin 即可。比如,对于 FTP 账户,一般只允许登录和访问 FTP 服务器,不允许登录 linux 操作系统。若要让某用户没有 telnet 权限,即不允许该用户利用 telnet 远程登录和访问 linux 操作系统,则设置该用户所使用的 shell 为 / bin/true 即可。若要让用户没有 telnet 和 ftp 登录权限,则可设置该用户的 shell 为 / bin/false。

在 / etc/shells 文件中,若没有 / bin/true 或 / bin/false,则需要手动添加:[root@localhost ~]# echo "/bin/false">>/etc/shells[root@localhost ~]# echo "/bin/true">>/etc/shells

2、用户密码文件

为安全起见,用户真实的密码采用 MD5 加密算法加密后,保存在 / etc/shadow 配置文件中,该文件只有 root 用户可以读取。

与 passwd 文件类似,shadow 文件也是每行定义和保存一个账户的相关信息。第一个字段为用户帐户名,第二个字段为账户的密码。

3、用户组帐号文件

用户组帐号信息保存在 / etc/group 配置文件中,任何用户均可以读取。用户组的真实密码保存在 / etc/gshadow 配置文件中。

在 group 中,第一个字段代表用户组的名称,第二个字段为 x,第三个为用户组的 ID 号,第四个为该用户组的用户成员列表,各用户名间用逗号分隔。

4、添加用户

创建或添加新用户使用 useradd 命令来实现,其命令用法为:

useradd [option] username该命令的 option 选项较多,常用的主要有:-c 注释 用户设置对账户的注释说明文字-d 主目录 指定用来取代默认的 / home/username 的主目录-m 若主目录不存在,则创建它。-r 与 - m 相结合,可为系统账户创建主目录-M 不创建主目录-e date 指定账户过期的日期。日期格式为 MM/DD/YY-f days 帐号过期几日后永久停权。若指定为 -,则立即被停权,若为 - 1,则关闭此功能-g 用户组 指定将用户加入到哪个用户组,该用户组必须存在-G 用户组列表 指定用户同时加入的用户组列表,各组用逗分隔-n 不为用户创建私有用户组-s shell 指定用户登录时使用的 shell,默认为 / bin/bash-r 创建一个用户 ID 小于 500 的系统账户,默认不创建对应的主目录-u 用户 ID 手动指定新用户的 ID 值,该值必须唯一,且大于 499-p password 为新建用户指定登录密码。此处的 password 是对应登录密码经 MD5 加密后所得到的密码值,不实真实密码原文,因此在实际应用中,该参数选项使用较少,通常单独使用 passwd 命令来为用户设置登录密码。

示例:

若要创建一个名为 nisj 的用户,并作为 babyfish 用户组的成员,则操作命令为:[root@localhost ~]# useradd -g babyfish nisj[root@localhost ~]# id nisjuid=502(nisj) gid=500(babyfish) groups=500(babyfish)[root@localhost ~]# tail -1 /etc/passwdnisj:x:502:500::/home/nisj:/bin/bash添加用户时,若未用 - g 参数指定用户组,则系统默认会自动创建一个与用户帐号同名的私有用户组。若不需要创建该私有用户组,则可选用 - n 参数。比如,添加一个名为 nsj820 的账户,但不指定用户组,其操作结果为:[root@localhost ~]# useradd nsj820[root@localhost ~]# id nsj820uid=503(nsj820) gid=503(nsj820) groups=503(nsj820)[root@localhost ~]# tail -1 /etc/passwdnsj820:x:503:503::/home/nsj820:/bin/bash[root@localhost ~]# tail -2 /etc/passwdnisj:x:502:500::/home/nisj:/bin/bashnsj820:x:503:503::/home/nsj820:/bin/bash #系统自动创建了名为 nsj820 的用户组,ID 号为 503

创建用户账户时,系统会自动创建该用户对应的主目录,该目录默认放在 / home 目录下,若要改变位置,可以利用 - d 参数指定;对于用户登录时使用的 shell,默认为 / bin/bash,若要更改,则使用 - s 参数指定

例如,若要创建一个名为 vodup 的账户,主目录放在 / var 目录下,并指定登录 shell 为 / sbin/nologin,则操作命令为:

[root@localhost ~]# useradd -d /var/vodup -s /sbin/nologin vodup[root@localhost ~]# id vodupuid=504(vodup) gid=504(vodup) groups=504(vodup)[root@localhost ~]# tail -1 /etc/passwdvodup:x:504:504::/var/vodup:/sbin/nologin[root@localhost ~]# tail -1 /etc/groupvodup:x:504:

5、设置帐号属性

对于已创建好的用户,可使用 usermod 命令来修改和设置账户的各项属性,包括登录名,主目录,用户组,登录 shell 等,该命令用法为:

usermod [option] username部分 option 选项

(1)改变用户帐户名

使用 - l 参数来实现,命令用法为:usermod -l 新用户名 原用户名

例如,若要将用户 nsj820 更名为 nsj0820,则操作命令为:[root@localhost ~]# usermod -l nsj0820 nsj820[root@localhost ~]# id nsj0820uid=503(nsj0820) gid=503(nsj820) groups=503(nsj820)[root@localhost ~]# tail -1 /etc/passwdnsj0820:x:503:503::/home/nsj820:/bin/bash从输出结果可见,用户名已更改为 nsj0820。主目录仍为原来的 / home/nsj820,若也要更改为 / home/nsj0820,则可通过执行以下命令来实现[root@localhost ~]# usermod -d /home/nsj0820 nsj0820[root@localhost ~]# id nsj0820uid=503(nsj0820) gid=503(nsj820) groups=503(nsj820)[root@localhost ~]# tail -1 /etc/passwdnsj0820:x:503:503::/home/nsj0820:/bin/bash[root@localhost home]# mv /home/nsj820 /home/nsj0820

(2)锁定账户

若要临时禁止用户登录,可将该用户账户锁定。锁定账户可利用 - L 参数来实现,其命令用法为:

usermod -L 要锁定的账户

linux 锁定用户,是通过在密码文件 shadow 的密码字段前加 “!” 来标识该用户被锁定。

[root@localhost home]# usermod -L nsj0820[root@localhost home]# tail -1 /etc/shadownsj0820:!$1$JEW25RtU$X9kIdwJi/HPzSKMVe3EK30:16910:0:99999:7:::

但通过 root 用户进去,然后 su 到被锁定的用户,是可以进去的。

(3)解锁账户

要解锁账户,可以使用带-U参数的 usermod 命令来实现。

[root@localhost ~]# usermod -U nsj0820[root@localhost ~]# tail -1 /etc/shadownsj0820:$1$JEW25RtU$X9kIdwJi/HPzSKMVe3EK30:16910:0:99999:7:::

6、删除账户

要删除账户,可以使用 userdel 命令来实现,其用法为:userdel [-r] 帐户名

-r 为可选项,若带上该参数,则在删除该账户的同时,一并删除该账户对应的主目录。

[root@localhost ~]# userdel -r nsj0820

若要设置所有用户账户密码过期的时间,则可通过修改 / etc/login.defs 配置文件中的 PASS_MAX_DAYS 配置项的值来实现,其默认值为 99999,代表用户账户密码永不过期。其中 PASS_MIN_LEN 配置项用于指定账户密码的最小长度,默认为 5 个字符。

7、设置用户登录密码

使用 passwd 命令来设置,其命令用法为:passwd [帐户名]若指定了帐户名称,则设置指定账户的登录密码,原密码自动被覆盖。只有 root 用户才有权设置指定账户的密码。一般用户只能设置或修改自己账户的密码(不带参数)。

例如, 若要设置 nisj 账户的登陆密码,则操作命令为:[root@localhost home]# passwd nisjChanging password for user nisj.New password:BAD PASSWORD: it is too shortBAD PASSWORD: is too simpleRetype new password:passwd: all authentication tokens updated successfully.账户登录密码设置后,该账户就可以登录系统了。

8、锁定 / 解锁账户密码及查询密码状态、删除账户密码

在 linux 中,除了用户账户可被锁定外,账户密码也可被锁定,任何一方被锁定后,都将无法登录系统。只有 root 用户才有权执行该命令,锁定账户密码使用带 - l 选项的 passwd 命令,其用法为:

passwd -l 帐户名passwd -u 帐户名 #解锁账户密码[root@localhost home]# passwd -l nisjLocking password for user nisj.passwd: Success[root@localhost home]# passwd -u nisjUnlocking password for user nisj.passwd: Success

要查询当前账户的密码是否被锁定,可以使用带 - S 参数的 passwd 命令来实现,其用法为:passwd -S 账户名例如[root@localhost home]# passwd -S nisjnisj PS 2016-04-18 0 99999 7 -1 (Password set, MD5 crypt.)

如要删除账户的密码,使用带 - d 参数的 passwd 命令来实现,该命令也只有 root 用户才有权执行,其用法为:passwd -d 帐户名帐户密码被删除后,将不能登录系统,除非重新设置密码。

9、创建用户组

用户和用户组属于多对多关系,一个用户可以同时属于多个用户组,一个用户组可以包含多个不同的用户。

创建用户组使用 groupadd 命令,其命令用法为:groupadd [-r] 用户组名称

若命令带有 - r 参数,则创建系统用户组,该类用户组的 GID 值小于 500;若没有 - r 参数,则创建普通用户组,其 GID 值大于或等于 500.

10、修改用户组属性

用户组创建后,根据需要可对用户组的相关属性进行修改。对用户组属性的修改,主要是修改用户组的名称和用户组的 GID 值。(1)改变用户组的名称若要对用户组进行重命名,可使用带 - n 参数的 groupmod 命令来实现,其用法为:groupmod -n 新用户组名 原用户组名

对于用户组改名,不会改变其 GID 的值

比如,若要将 student 用户组更名为 teacher 用户组,则操作命令为:[root@localhost home]# groupadd student[root@localhost home]# tail -1 /etc/groupstudent:x:505:[root@localhost home]# groupmod -n teacher student[root@localhost home]# tail -1 /etc/groupteacher:x:505:

(2)重设用户组的 GID用户组的 GID 值可以重新进行设置修改,但不能与已有用户组的 GID 值重复。对 GID 进行修改,不会改变用户名的名称。

要修改用户组的 GID,可使用带 - g 参数的 groupmod 命令,其用法为:groupmod -g new_GID 用户组名称

例如,若要将 teacher 组的 GID 更改为 506,则操作命令为:[root@localhost home]# groupmod -g 506 teacher[root@localhost home]# tail -1 /etc/groupteacher:x:506:

11、删除用户组

删除用户组使用 groupdel 命令来实现,其用法为:groupdel 用户组名

在删除用户组时,被删除的用户组不能是某个账户的私有用户组,否则将无法删除,若要删除,则应先删除引用该私有用户组的账户,然后再删除用户组。

[root@localhost home]# groupdel teacher[root@localhost ~]# grep teacher /etc/group #没有输出,说明 teacher 用户组以不存在,删除成功

12、添加用户到指定的组 / 从指定的组中移除用户

可以将用户添加到指定的组,使其成为该组的成员。其实现命令为:gpasswd -a 用户账户 用户组名

若要从用户组中移除某用户,其实现命令为:gpasswd -d 用户账户 用户组名例如:[root@localhost home]# groupadd student[root@localhost home]# gpasswd -a nisj studentAdding user nisj to group student[root@localhost home]# id nisjuid=502(nisj) gid=500(babyfish) groups=500(babyfish),505(student)[root@localhost home]# gpasswd -d nisj studentRemoving user nisj from group student[root@localhost home]# id nisjuid=502(nisj) gid=500(babyfish) groups=500(babyfish)[root@localhost home]# groups nisjnisj : babyfish

13、设置用户组管理员

添加用户到组和从组中移除某用户,除了 root 用户可以执行该操作外,用户组管理员也可以执行该操作。

要将某用户指派为某个用户组的管理员,可使用以下命令来实现;

gpasswd -A 用户账户 要管理的用户组命令功能:将指定的用户设置为指定用户组的用户管理员。用户管理员只能对授权的用户组进行用户管理 (添加用户到组或从组中删除用户),无权对其他用户组进行管理。

[root@localhost home]# gpasswd -a nisj studentAdding user nisj to group student[root@localhost home]# gpasswd -A nisj student[root@localhost home]# useradd stu[root@localhost home]# gpasswd -a stu studentAdding user stu to group student[root@localhost home]# groups stustu : stu student[root@localhost home]# su - nisj[nisj@localhost ~]$ gpasswd -d stu studentRemoving user stu from group student[nisj@localhost ~]$ gpasswd -d stu stugpasswd: Permission denied.

14、用户其他相关

另外,linux 还提供了 id,whoami 和 groups 等命令,用来查看用户和组的状态。id 命令用于显示当前用户的 uid,gid 和所属的用户组的列表;whoami 用于查询当前用户的名称;groups 用于产看指定用户所隶属的用户组。

同时,我们可以使用图形界面来管理用户和用户组,系统 ---> 管理 ---> 用户和组群可以打开相应的配置界面。

附:将用户添加到组中,也可以如下操作将一个用户添加到用户组中,千万不能直接用:usermod -G groupA这样做会使你离开其他用户组,仅仅做为这个用户组 groupA 的成员。应该用 加上 -a 选项:usermod -a -G groupA user(FC4: usermod -G groupA,groupB,groupC user)-a 代表 append, 也就是 将自己添加到 用户组 groupA 中,而不必离开其他用户组。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11303

    浏览量

    209456
  • 用户
    +关注

    关注

    0

    文章

    60

    浏览量

    14215

原文标题:详细到没朋友,一文帮你理清Linux 用户与用户组关系~

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux用户用户组的知识科普

    linux 中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中的。
    发表于 10-16 16:50 432次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>用户</b>与<b class='flag-5'>用户组</b>的知识科普

    [bug反馈] 为什么会无缘无故降级用户组!!

    你好,最近不清楚啥原因,我的用户组本来是高级工程师,用好多心血才达到的,一下子突然变为技术员,是什么原因能说明一下吗管理员,或是帮我恢复一下可以吗?现在发邮件 发QQ反馈没有任何回复,这样子我不开心咯。谢谢
    发表于 01-04 23:10

    水贴——用户组显示等待验证会员

    我的用户组一直显示等待验证会员,多次验证邮箱,可是显示邮件发送,但是邮箱却从来没收到过验证邮件,哪位管理员能帮忙解决一下这个问题,谢谢!
    发表于 08-02 13:13

    用户组问题

    我的用户组验证不了,怎么弄啊谢谢
    发表于 10-12 10:50

    想问一下如何升级用户组

    我已经输入了手机验证码了,但用户组却没有变化,是还需要什么别的条件吗?
    发表于 10-15 09:52

    我己经通过实名认证,怎么还在等待验证会员用户组

    我己经通过实名认证,怎么还在等待验证会员用户组?在用户组里点立即验证也没用。请版主解决,谢谢!
    发表于 10-20 16:16

    您所在的用户组无法下载或查看附件

    `好心人告诉我一下,为什么我想查看帖子或下载资料,为什么我的账号老是显示您所在的用户组无法下载或查看附件。`
    发表于 03-17 17:53

    【4412开发板】理解和掌握linux用户用户组、权限等方法

    列的 x,并不代表密码就是 x,这里只是隐藏了,另外只有超级用户可以修改其它用户的密码。2. Linux Linux 中的
    发表于 11-18 13:45

    Linux如何管理用户用户组

    用户用户组管理的作用Linux如何管理用户用户组
    发表于 12-17 07:41

    浅谈Linux用户管理

    文中对在Linux环境下如何创建、修改、删除用户用户组,限制用户使用磁盘空间和为普通用户设置特殊权限等方面进行了探讨,提出了一些常用方法。
    发表于 02-27 11:37 24次下载

    如何通过用户组和访问控制表(ACL)来管理用户

    本教程可以了解如何通过用户组和访问控制表(ACL)来管理用户
    的头像 发表于 12-25 14:30 3575次阅读
    如何通过<b class='flag-5'>用户组</b>和访问控制表(ACL)来管理<b class='flag-5'>用户</b>

    整理了 Linux 用户用户组管理的相关内容

    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理
    的头像 发表于 02-06 15:16 2954次阅读
    整理了 <b class='flag-5'>Linux</b> <b class='flag-5'>用户</b>及<b class='flag-5'>用户组</b>管理的相关内容

    Linux用户组和权限管理的简单理解

    Linux每个用户必须属于一个,不能独立于外,同样,Linux中的每个文件都会有所有者、所在
    发表于 06-23 16:13 376次阅读

    linux用户用户组关系是什么

    p password 为新建用户指定登录密码。此处的 password 是对应登录密码经 MD5 加密后所得到的密码值,不实真实密码原文,因此在实际应用中,该参数选项使用较少,通常单独使用 passwd 命令来为用户设置登录密码。
    发表于 08-21 10:12 893次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>用户</b>与<b class='flag-5'>用户组</b>的<b class='flag-5'>关系</b>是什么

    Linux学习之用户管理

    Linux学习——用户管理 1用户/概览 Linux系统是多用户、多任务的分时操作系统,系统上
    的头像 发表于 11-25 10:47 237次阅读