Linux笔记——用户与用户组

应用篇(常用命令)

用户:useradd,userdel usermod passwd
用户组:groupadd groupdel groupmod gpasswd(修改用户组的用户)
查询:groups id
只要记得关键词,其它需要用时直接man 查询就好啦
甚至只需要记得user和group,然后tab补全就行了

关于查询

查询UID,GID 等用户信息

id spaceman(查询spaceman的UID,GID的信息,只有root有权限)
id(查询当前用户自己的UID,GID的信息)

关于用户

简单添加用户useradd spaceman (新增一个spaceman用户,并默认添加名称相同的用户组)
添加系统账号useradd -r spaceman (添加一个spaceman的系统账号)
多参数添加useradd -u 1500 -g Mars spaceman ( 新增一个用户spaceman并将其UID设置为1500,将它添加入用户组Mars中)
修改用户信息: usermod(一般添加用啥参数,修改就修改啥参数,或直接man usermod查)
删除用户: userdel -r spaceman(连用户的家目录一起删除)

给用户设置密码passwd spaceman (root权限可以给其它用户设置密码)
给当前用户设置密码passwd(没有加用户,就是给直自己当前的用户添加密码)
使用 standard input 建立用户的密码: echo "abc123 " | passwd --stdin spaceman (利用管道流,将“abc123 ”设置为spaeman的密码)

关于用户组

新增用户组groupadd Mars(新增Mars这个用户组,默认给你GID,也可以加 -g 200 指定GID为200)
删除用户组groupdel Mars (删除Mars这个用户组)
修改用户组的信息groupmod -g 201 -n Moon Mars (将群组Mars改为Moon,并将GID改为201)

(提醒一下:关于用户和用户组的增加和删除都得root才有权限)

用户与用户组的关系

(查询用户的用户组:group spaceman)

如何把用户添加到某一个用户组中:

用户视角:

  1. 最简单的就是在创建用户的时候就指定 (useradd -u 1500 -g Mars spaceman)
  2. 如果创建用户的时候忘记了,就只能修改用户的用户组 usedmod
    -g :后面接初始群组,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!
    -aG:usermod -aG Moon spaceman(增加Moon为spaceman的有效群组)
    (关于初始群组和 次要群组的区别在原理篇会讲解)

用户组视角:

gpasswd -a spaceman Moon(将分组添加到spaceman的次要群组当中)
但是这个命令只有root和群组管理员有权限
那么如果给一个群组分配管理员呢?
(root权限) gpasswd -A spaceman Moon(让spaceman作为Moon的群组管理员)

原理篇

关于GID,PID

关于/etc/passwd,/etc/shadow /etc/group

当我们登录linux主机时,我们输入的是我们的账号,但其实linxu并不记住我们的账号名称,linux记住的只是ID。就是我们的UID

对于系统内的群组,虽然有群组名,但是linxu记住的也是ID,也就是GID。

关于用户账号名称与UID的对应在 /etc/passwd 文件中
关于用户组名称与GID的对应在 /etc/group文件当中

当我们用lsll命令去查询文件属性是,会发现文件属性后面有文件所属的用户名称和用户组名称。这是因为在要显示文件属性的需求时,系统会依据/etc/passwd 与/etc/group 的内容, 找到 UID / GID 对应的账号与组名再显示出来!(如下图的第一个dmtsai为用户名,第二个dmtsai为用户组名)
也就是说在文件系统中,记录的文件的属性都是用UID和GID来记录。

[root@study ~]# ll -d /home/dmtsai
drwx------. 17 dmtsai dmtsai 4096 Jul 17 19:51 /home/dmtsai

/etc/passwd文件

我们可以查看一下 /etc/passwd文件,如下所示
有我们自己创建的用户(如图一)也有一些系统提供的用户(如图二)

在这里插入图片描述
图一
在这里插入图片描述图二

那让我们讲一下/etc/passdw每一行每个参数的意义
在这里插入图片描述

/etc/shadow

在这里插入图片描述
参数意义:
在这里插入图片描述

etc/group

在这里插入图片描述
第一字段:为群组名
第二字段:为群组密码
第三字段:GID
第四字段:为群组支持的用户
如上图的Mars,spaceman和mr.chao都为其组员

在这里插入图片描述
上图的这些群组为什么没有支持组员,其实是因为这些用户组时某些账号的初始群组,而新版的linxu中,初始群组的用户群已经不会加入第四字段了。比如root这个账号的主要群组(初始数组)为root,所以root不会出现第四个字段中。

而上图的Mars不是初始群组,所以会显示。

初始群组 有效群组

那么什么是有效群组,什么是初始群组呢?
每个用户在etc/passwd里面第四栏有所谓的GID吧,那个GID就是所谓的初始群组。它是在我们创建用户时,默认给我们提供的,且群组名和用户名相同。

如果我的账号(mr.chao)同时支持mr.chao,wheel两个群组,因此,在读取/写入/执行文件时,针对群组部分,只要是 wheel 与 mr.chao 这两个群组拥有的功能,我mr.chao 这个使用者都能够拥有喔!但是这只是针对存在的文件而言,如果今天要新建一个新的文件或者新的目录,新文件的群组时mr.chao 还是wheel呢

这就要讲到有效群组的概念,这时候新建文件支持的群组是支持有效群组。

而有效群组可以用groups来查看,第一个就为有效群组

在这里插入图片描述
比如这里显示的第一个为wheel 就是有效群组
那么这时建立的文件,支持的群组就应该为wheel

在这里插入图片描述
那么如何切换用户的有效群组呢?

很简单,就是使用newgrp
比如 newgrp mr.chao 就是将有效群组变为mr.chao,不过不能变一个用户原本没有支持的分组为有效分组

注:在这里插入图片描述
(鸟哥的linux私房菜)

/etc/gshadow

在这里插入图片描述
这个文件内同样还是使用冒号『:』来作为字段的分隔字符,而且你会发现,这个文件几乎与 /etc/group 一模一样啊!是这样没错~== 不过,要注意的大概就是第二个字段吧~第二个字段是密码栏, 如果密码栏上面是『!』或空的时,表示该群组不具有群组管理员! ==至于第四个字段也就是支持的账号名称啰~ 这四个字段的意义为:

  1. 组名
  2. 密码栏,同样的,开头为 ! 表示无合法密码,所以无群组管理员
  3. 群组管理员的账号 (相关信息在 gpasswd 中介绍)
  4. 有加入该群组支持的所属账号 (与 /etc/group 内容相同!)

以系统管理员的角度来说,这个 gshadow 最大的功能就是建立群组管理员啦! 那么什么是群组管理员呢?由于系统上面的账号可能会很多,但是我们 root 可能平时太忙碌,所以当有使用者想要加入某些群组时, root 或许会没有空管理。此时如果能够建立群组管理员的话,那么该群组管理员就能够将那个账号加入自己管理的群组中! 可以免去 root 的忙碌啦!不过,由于目前有类似 sudo 之类的工具, 所以这个群组管理员的功能已经很少使用了。

useradd 新建账号的过程

在这里插入图片描述

在这里插入图片描述
但是如果我们建立的是指定一个已经存在的群组作为使用者的初始群组,因为群组已经存
在,所以在 /etc/group 里面就不会主动的建立与账号同名的群组了!

而如果建立的是系统账号,因为系统账号主要是用来进行运作系统所需服务的权限设定, 所以系统账号默认都不会主动建立家目录的!

添加删除修改用户的本质

其实你会发现无论是我们增加用户,删除用户,或者是修改用户参数的本质其实就是去修改配置文件,也就是去修改/etc/passwd,/etc/shadow,/etc/group.

所以我们使用useradd 命令的本质就是在/etc/passwd中添加一行,不过我们刚刚也有看到,一行中有很多参数,那么我们使用useradd时 那些参数应该怎么填,是不是应该有一些默认参数,确实是有的,而这些默认参数在哪呢?就在 == /etc/default/useradd ==中
在这里插入图片描述

看到SKEL=/etc/skel:用户家目录参考基准目录
当我们创建一个非系统用户时,会同时创建一个家目录,而这个家目录的数据就是从/etc/skel复制过去.
(未来如果我想要让新增使用者时,该用户的环境变量 ~/.bashrc 就设定妥当的话,您可以到 /etc/skel/.bashrc 去编辑一下,也可以建立 /etc/skel/www 这个目录,那么未来新增使用者后,在他的家目录下就会有 www 那个目录了!)

这就是我们使用usedadd时的默认参数,而我们使用passwd为用户添加密码时,本质也是在shadow增加一行,一行也有一些参数,而这些参数也是在一个文件中, 就是 == /etc/login.defs ==这个文件

在这里插入图片描述
在这里插入图片描述
我们也懂得了一些本质,就是useradd,passwd的本质都是在去**/etc/passwd** 和 /etc/shadow 中添加一行,而添加时的参数就是参考**/etc/default/useradd,/etc/login.defs** 这些文件,所以要改useradd,passwd时的默认参数时,就得去这些文件**/etc/default/useradd,/etc/login.defs** 改

补充

chsn(change shell)

chsh -s /bin/shell 修改当前用户的shell为/bin/shell

chage

在这里插入图片描述
其实原理就是将密码中的失效时间啥改了,导致下一次登录必须修改!

如果不想让某个用户不可登入,就将它的shell改为/sbin/nologin

参考资料:《鸟哥的linux私房菜——基础篇》鸟哥

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值