Linux基础学习笔记(四)——账号与群组管理

文章目录

  • 前言
  • UID与GID
    • UID与GID在登录时候的作用
    • /etc/passwd文件结构
    • /etc/shadow文件结构
    • /etc/group文件结构
    • /etc/gshadow文件结构
  • 用户和组群管理
    • 新增用户——useradd
    • 给新用户设置密码——passwd
    • 修改账号数据——usermod
    • 删除账号数据——userdel
    • 用户详细信息的查询
    • 组群的管理
      • 新增——groupadd
      • 修改——groupmod
      • 删除——groupdel
      • 群组管理员——gpasswd
  • 小结

前言

前面关于文件和文件夹的普通权限,通过chmod等命令改变文件所有者,文件群组等的权限做了一个总结,但是从Linux系统层面来还存在账号管理以及ACL权限控制的问题,这篇博客简单记录以下自己的学习笔记,参考《鸟哥的Linux私房菜》一书中的第13章。

UID与GID

UID——使用者id。GID——群组id。Linux中每个文件都有对应的使用者id和组群id,每当用户要显示文件属性的时候,系统会根据/etc/passwd和/etc/group的内容,找到与UID和GID对应的用户名和组名,将其显示出来

## 查看指定用户的id
[root@localhost etc]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@localhost coderman]# ll
total 4
-rw-rw----. 1 thomas   thomas   27 Apr 30 10:57 coderman.txt
drwxr-xr-x. 2 coderman coderman  6 Apr 29 19:39 Desktop
drwxr-xr-x. 2 coderman coderman  6 Apr 29 19:39 Documents
drwxr-xr-x. 2 coderman coderman  6 Apr 29 19:39 Downloads
drwxr-xr-x. 2 coderman coderman  6 Apr 29 19:39 Music
drwxr-xr-x. 2 coderman coderman  6 Apr 29 19:39 Pictures
drwxr-xr-x. 2 coderman coderman  6 Apr 29 19:39 Public
drwxrwx---. 1 root     vboxsf    0 May 16 19:55 share
drwxr-xr-x. 2 coderman coderman  6 Apr 29 19:39 Templates
d-wxrwx--x. 2 coderman coderman 22 Apr 30 16:52 test
drwxr-xr-x. 2 coderman coderman  6 Apr 29 19:39 Videos

每次ll命令中显示的用户名和组名,其实是通过UID和GID进行过转换。

UID与GID在登录时候的作用

每次用户登录的时候,UID和GID信息也很重要。系统先从/etc/passwd中找寻是否有我们输入的用户名,如果有则将对应的UID和GID(GID在/etc/group文件中)读取出来。除此之外,还在/etc/passwd中读取用户的shell设定与home目录。之后Linux会通过/etc/shadow,匹配对应用户的UID和密码,如果一切符合,则进入用户的shell管控界面。下面分别总结一下/etc/passwd,/etc/shadow文件的结构。

/etc/passwd文件结构

这个文件中的每一行就代表一个账号,很多系统账号也保存在这个文件。

[root@localhost etc]# head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

每一列都使用[:]进行分割,关于每一列的内容,总结成如下表格

序号 含义
1 账号,即登录系统的用户名
2 密码,真正的密码是加密之后存在/etc/shadow文件中,这里就只显示一个X
3 UID,
0——超级管理员的UID。
1~999——系统账号的UID
1000~60000——一般使用者的UID
4 GID,关于组的配置信息存放在/etc/group文件中
5 用户信息说明
6 该用户的home目录
7 该用户的shell配置

/etc/shadow文件结构

存放系统所有用户的密码的,和/etc/passwd类似(早期的linux系统,密码也是直接存放在/etc/passwd的第二列,后来为了安全,将密码存放在/etc/passwd中)。

[root@localhost etc]# head -n 5 shadow
root:$6$32p8oIN1HwDuD85F$19Zsg97wCFi9GbFqqE2m7mxj3IJGiJpKDJH7T23N1A7oHZR0zH7r22.Qt82eQ7IvrF8n0kDRfAN/j6yye4g6Q0:19108:0:99999:7:::
bin:*:18397:0:99999:7:::
daemon:*:18397:0:99999:7:::
adm:*:18397:0:99999:7:::
lp:*:18397:0:99999:7:::

也是通过[:]进行分割,分割成9列

序号 含义
1 账号名称,这个与/etc/passwd中的一致
2 密码,这个是用户真正的密码(通过加密显示)
3 最近更改密码的日期(长整型的时间戳)
4 密码不可被更改的天数,0表示密码可以随时被更改。
5 密码的有效期,99999表示当前密码273年后失效
6 密码失效前的提醒天数,7表示密码失效7天前系统会给出提示
7 密码过期后的宽限天数,密码失效之后有几天临时有效期。
8 账号失效日期,这个值会设定为具体的年月日
9 保留字段,暂时无用

/etc/group文件结构

/etc/group文件用于存储系统用户组信息

[root@localhost etc]# head -n 5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:

以[:]符号分为4列

序号 含义
1 组名
2 群组管理员的密码,X显示
3 GID,组群ID
4 加入该组群的账号,
例如:root:\x:0:coderman,thomas
表示用户coderman和thomas属于root的用户组

/etc/gshadow文件结构

/etc/gshadow这个文件使用于管理组群的

[root@localhost etc]# head -n 5 /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::

以[:]符号分为4列

序号 含义
1 组名
2 密码栏,如果是**!**或空表示无群组管理员
3 群组管理员的账号
4 加入该群组的账号

用户和组群管理

在熟悉了UID和GID的内容之后,再来看账号管理,就变得容易些许。

新增用户——useradd

在上面我们看到,一个用户至少有用户名和密码两个数据,因此新增用户的主要工作也是在系统中新增这两个数据。useradd命令用于新增用户

Linux基础学习笔记(四)——账号与群组管理_第1张图片

这个命令中,系统已经帮我们设置好了很多默认值,我们只需要简单的useradd即可。在useradd操作之后,系统默认会帮我们完成以下几个事情

1、在/etc/passwd中新加一行与账号相关的数据,包括建立 UID/GID,以及home目录等

2、在/etc/shadow中增加与此账号相关的参数,但是没有密码

3、在/etc/group中增加一个与账号名称一样的群组名称

4、在/home文件夹下创建一个同名的目录作为当前新用户的home目录,且权限为700

##增加一个叫tom的用户
[root@localhost etc]# useradd tom
##/etc/passwd文件中增加了一行与账号相关的数据,UID=1002,GID=1002
[root@localhost etc]# tail -1 passwd
tom:x:1002:1002::/home/tom:/bin/bash
## /etc/shadow中增加了与此账号相关的参数,但是没有密码(!符号表示没有密码)
[root@localhost etc]# tail -1 shadow
tom:!!:19133:0:99999:7:::
## /etc/group中增加了一个与账号名称一样的群组名称
[root@localhost etc]# tail -1 group
tom:x:1002:
## /home文件夹下创建一个同名的目录作为当前新用户的home目录,且权限为700
[root@localhost etc]# ll /home
total 4
drwx------.  3 tom      tom        78 May 21 20:54 tom

关于useradd还有其他参数,这个对应/passwd文件的属性进行参考即可,这里就不总结了。

给新用户设置密码——passwd

在通过useradd增加了新用户之后,/etc/shadow中没有用户相关的密码,在预设的情况下,当前新加的账号暂时是被封锁的(无法登录)。需要设定密码之后才能登录。
Linux基础学习笔记(四)——账号与群组管理_第2张图片

在之前我们新建了tom用户之后,通过passwd来设置tom的密码

#通过root用户个tom用户赋予登录密码
[root@localhost etc]# passwd tom
Changing password for user tom.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost etc]# tail -1 shadow
tom:$6$UkmKrDXX$8Y0md7TTBRCQk2kBJWHN7HLKvXiDxONyC6PHUg7edYAMxUZGhAWPZ/azdicxp/opj6/dJYxVmzz1Oa2djqBAh1:19133:0:99999:7:::

之后可以通过tom用户进行系统登录了,《鸟哥的Linux私房菜》中还列举了如何通过passwd和chage命令来实现密码安全的各种措施。这里就不总结了。

修改账号数据——usermod

如果需要修改用户账号相关数据,可以通过usermod命令进行操作。当然,其实也可以直接去修改/etc/passwd和/etc/shadow文件中的数据,不过还是建议使用usermod指令。
Linux基础学习笔记(四)——账号与群组管理_第3张图片在这里插入图片描述

实例

## 设置tom用户在2022-5-22失效
[root@localhost etc]# usermod -e "2022-5-22" tom

删除账号数据——userdel

在这里插入图片描述

实例

##删除用户tom
[root@localhost etc]# userdel -r tom
##对应的home目录没有了,同样的/etc/passwd和/etc/shadow中相关的内容也没有了
[root@localhost etc]# ls /home/tom
ls: cannot access /home/tom: No such file or directory

用户详细信息的查询

除了上述用户账号管理的命令之外,还有普通用户可以用于查询和修改自己相关信息的命令,比如id命令,finger命令,因为安全问题finger命令已经不在新版本中默认安装了。《鸟哥linux私房菜》一书中针对这个finger命令,以及修改用户finger数据的chfn和chsh命令都有详细介绍,这里篇幅所限,不做总结。

[tom@localhost ~]$ id
uid=1002(tom) gid=1002(tom) groups=1002(tom) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[tom@localhost ~]$ finger
bash: finger: command not found...

这里遗留一个问题:普通用户也可以通过passwd指令修改自身的登录密码,我们知道用户相关的密码数据存放在/etc/passwd和/etc/shadow文件中,那也就意味着普通用户也有权限修改这两个文件。那……这两个文件的权限是什么呢?

ps:这涉及到文件的特殊权限的内容,这个后续在总结。

组群的管理

与用户数据相对应,组群数据的新增和修改分别是groupadd和groupmod命令。组群的相关信息存放于/etc/group和/etc/gshadow中

新增——groupadd

Linux基础学习笔记(四)——账号与群组管理_第4张图片

实例

## 增加tempgroup用户组
[root@localhost etc]# groupadd tempgroup
## 查看相关文件中tempgroup的内容
[root@localhost etc]# grep tempgroup /etc/group /etc/gshadow
/etc/group:tempgroup:x:1002:
/etc/gshadow:tempgroup:!::

修改——groupmod

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

实例

## 将tempgroup的GID改为201,并将其名称改为 groupone
[root@localhost etc]# groupmod -g 201 -n groupone tempgroup
[root@localhost etc]# grep groupone /etc/group /etc/gshadow
/etc/group:groupone:x:201:
/etc/gshadow:groupone:!::

通常不建议随意的更改GID,容易造成系统资源紊乱。

删除——groupdel

[groupdel 群组名]

实例:

## 删除groupone群组
[root@localhost etc]# groupdel groupone
## 相关数据已不存在
[root@localhost etc]# grep groupone /etc/group /etc/gshadow

在删除所属群组的时候,必须要确认/etc/passwd内的账号没有任何人使用这个群组。

群组管理员——gpasswd

在这里插入图片描述
Linux基础学习笔记(四)——账号与群组管理_第5张图片
实例:

下面这个实例稍微有点复杂

## root用户创建testgroup组群
[root@localhost etc]# groupadd testgroup
## 给这个组群建一个密码
[root@localhost etc]# gpasswd testgroup
Changing the password for group testgroup
New Password: 
Re-enter new password:
## root用户创建了两个用户,tom和jack,并分别设置密码
[root@localhost tom]# useradd tom
[root@localhost tom]# useradd jack
[root@localhost jack]# passwd tom
Changing password for user tom.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost jack]# passwd jack
Changing password for user jack.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

## root用户将tom用户设置为testgroup群组的管理员
[root@localhost etc]# gpasswd -A tom testgroup
[root@localhost etc]# grep testgroup /etc/group /etc/gshadow
/etc/group:testgroup:x:1002:
/etc/gshadow:testgroup:$6$LRgbM/A9eOc$SjmcHox3ysfw3wKdUI/Zha/Rk7cVj4AL8OGL6zk.cBWFwLHIkXh9YpvH3HJtclhk9jZSu6oCkeFDWxKzzJz.60:tom:

##以tom用户身份登录系统(这个时候tom还没加入到群组)
[tom@localhost ~]$ id
uid=1002(tom) gid=1003(tom) groups=1003(tom) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
## tom将自己加入到testgroup中
[tom@localhost ~]$ gpasswd -a tom testgroup
Adding user tom to group testgroup
## tom将jack加入到testgroup中
[tom@localhost ~]$ gpasswd -a jack testgroup
Adding user jack to group testgroup
## 查看testgroup中的内容
[tom@localhost ~]$ grep testgroup /etc/group
testgroup:x:1002:tom,jack
## tom还可以修改testgroup的群组密码
[tom@localhost ~]$ gpassword testgroup
bash: gpassword: command not found...
[tom@localhost ~]$ gpasswd testgroup
Changing the password for group testgroup
New Password: 
Re-enter new password:

小结

简单小结了一下Linux中账号与群组的内容,对应《鸟哥的Linux私房菜》中13章的部分内容。后面会总结一下账号管理的一个具体实例,以及文件的特殊权限和ACL访问控制。

你可能感兴趣的:(Linux,linux,学习,服务器)