在Linux系统中,登录时,输入的是 用户名和密码,但是Linux系统并不会直接认识 系统名称,而是认识一个 ID,这个ID 与账号的对应关系,就存储在 /etc/passwd 中,每次在登录一个 账号的时候,就是识别两个ID,一个是 USer ID(简称UID)、一个是 Group ID(简称 GID)
Linux系统就通过 UID 和 GID 识别不同的用户,进而实现不同 的文件权限控制

用户在输入 用户名和密码之后,进入系统的这个过程中,操作系统实现了如下的校验:
/etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的 UID 与/etc/group 中) 读出来,另外,该账号的家目录与 shell 设定也一并读出所以 攻击者会将特殊账号 写入到
/etc/passwd文件中;
如果备份 Linux系统的账号,也要记得备份这两个文件
/etc/passwd 文件主要负责管理 使用者 的UID/GID , 每一行都代表一个账号,有几行就代表有几个账号在 该系统 中,这其中有很多账号是系统正常运行所需要的,就是系统账号,比如bin、daemon、adm、nobody等,轻易不要修改或删掉它们。

下面介绍这个文件中的各个字段的含义:
/etc/shadow 中了,这里就使用 x 表示这是 未知字段
/etc/group 有关,/etc/group 的观念与 /etc/passwd 差不多,只是用来规范 组名与GID 的对应而已cd 默认就是 回到 该用户的 家目录/etc/passwd 文件主要负责管理 密码相关的数据;Linux下很多程序的运行都与 权限有关,权限又与 UID/GID 有关,所以很多程序就需要 读取 /etc/passwd 来了解不同账号的权限,所以 /etc/passwd的权限需要设定为 -rw-r--r--, 并且为了 安全,还在 该文件中加入了很多 密码限制参数

各个字段的含义如下:
/etc/passwd 中必须一致!或*, 从而改变密文长度,进而实现密码失效1970-1-1 而累加的日期一般用户如果忘记密码了,可以通过 root 管理员直接重置密码,但如果是 root 管理员的密码忘记了,那就比较费劲了,由于无法进入系统,也就无法操作或修改密码了,可以通过 重启进入单人维护模式,再通过passwd 命令修改密码
群组管理文件/etc/group 和 /etc/gshadow 文件负责 用户组名和权限管理
/etc/group 目录 记录了GID 与组名对应的内容,每一行就代表一个 群组,其中各个字段的含义如下:

/etc/shadow 文件设定,所以这里就只需要 x 表示密码字段就可以了上面三个文件的关系如下:

在 /etc/passwd 文件中,有 GID 域,这里指定的 群组,就是 初始群组(initial group),用户一登录系统,就立刻拥有这个群组的相关权限,不需要再 /etc/group 中写入该 群组就在该群组中了
但是 非初始群组 就不同了,非初始群组就是 在 /etc/group 文件中的第四个字段中 写入的数据,这样 该账号就加入了这个群组,该账号就拥有了 写入的群组的文件访问权限,但是 如果该账号 建立了一个新文件,该文件的 群组属性该是哪个呢?
当然是 初始群组啦
每个账号可以通过 输入 如下的命令,获得 所在的群组:
# 获取当前账号所支持的群组,要注意s
[root@AliComputer ~]# groups
root docker
[root@AliComputer ~]#
如下:

如果要切换 有效群组,可以通过 newgrp 命令实现,该命令 只能切换 该账号 支持的群组,这样影响的就是 在建立新文件时,该文件的 群组访问属性不同了
还可以通过/etc/gshadow 文件来 建立群组管理员,该文件的内容字段如下,四个字段的含义与 /etc/group 文件中的含义也比较类似

!表示没有合法密码,即 无群组管理员如果 root 管理员太忙碌,就可以通过 群组管理员来实现 将其他用户放入到本群组中
添加一个新账号,只要设置好 账号ID 和 密码,其他设置,就会由系统根据预设直接实现了
user add [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录的绝对路径] [-s shell] 使用者账号
-u 指定特定的 UID给该账号
-g 初始群组,该群组的GID 就会被放到 /etc/passwd 文件的第四个字段中
-G 该账号还要加入的群组
-M 强制,不建立用户家目录
-m 强制,建立用户家目录,权限位 700
-c /etc/passwd 文件的说明内容
-r 建立一个系统账号,该账号的UID有限制,一般都是1000以下
-s 指定shell,如果没有指定,就是用默认的 /bin/bash
-e 接日期,此项目写入 shadow的第八个字段,就是 该账号失效的日期
-f 写入 shadow 的第七个字段,指定密码是否会失效,0为立刻失效,-1为永不失效(后期密码过期只是强制在登录是更新密码,而不是失效)
系统已经预先设定好了很多 默认值,所以只要使用useradd 账号名称 直接建立 使用者即可,系统会默认处理以下项目:

在建立好账号后,需要设定 密码,否则该站好就是 暂时封锁的状态,无法登入,使用 如下命令设定密码:
passwd [--stdin] [账号名称]
passwd [-l][-u][--stdin][-S] [-n 天数] [-x 天数] [-w 天数] [-i 日期] 账号
--stdin 透过前面的 管道符,作为密码输入
-l 即LOCK,将 修改/etc/shadow,使 密码失效
-u 与-l 相对,unlock 的意思
-s 列出密码相关的参数,是 shadow文件的大部分信息
-n 天数,shadow文件的第四个字段,不可修改密码天数
-x shadow文件的第五个字段,多久内必须更改密码
-w shadow文件的第六个字段,密码过期前的警告天数
-i shadow文件的第七个字段,密码失效日期
passwd使用一定要注意!!root管理员在给其他账号建立密码是 passwd 账号 方式,给自己修改密码是 passwd 方式,千万不要该错密码
非管理员在使用 passwd修改密码时, 一般需要先输入 旧密码,才能输入新密码,系统对于密码的检查是 非常严格的,太短、密码与账号相同、密码为常见字符串等都不会被系统接收!(但root管理员在修改其他用户密码时就不用担心这个问题),一般密码需要满足一下要求才可以通过:


使用 change 命令可以实现更加详细的密码参数显示功能:

如果要微调 新账号的权限,可以通过usermod 命令实现:

还可以通过 userdel 命令删除用户的相关数据,主要有以下数据:
/etc/passwd、/etc/shadow/etc/group、/etc/gshadow/home/username、/var/spool/mail/username该命令的主要参数如下:
userdel [-r] username
-r 连同用户的家目录也一起删除
要移除一个账号的时候,你可以手动的将 /etc/passwd 与/etc/shadow 里头的该账号取消即可!一般而言,如果该账号只是『暂时不启用』的话,那么将/etc/shadow 里头账号失效日期 (第八字段) 设定为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来! 使用 userdel 的时机通常是『真的确定不要让该用户在主机上面使用任何数据了!』
所以,如果想要完整的将某个账号完整的移除,最好可以在下达 userdel -r username 之前, 先以『 find / -user username 』查出整个系统内属于 username 的文件,然后再加以删除
一般用户常用的 账号数据变更与查询指令:
id:
# 查询某人或自己的 相关的 UID/GID 信息
id [username]
finger:
查询用户相关的信息
finger [-s] username
-s 列出用户的 账号名、全名、终端机代码和登入时间等
-m 列出后面接的 账号相同者,而不是利用部分比对
由于 此命令需要查询/etc/passwd 文件的信息,出于安全考虑,该命令已不再自动支持了
chfn: 类似 change finger 的意思,更改 用户信息,除非用户非常多,否则很少使用了

chsh: 就是 change shell 的缩写
chsh [-ls]
-l 列出目前系统上可用的shell,即 /etc/shells 中的内容
-s 设定修改自己的shell

上面是对用户的操作,下面考虑对群组的操作:
groupadd: 添加一个群组
groupadd [-g gid] [-r] 组名
-g 后面接某个特定的GID,用来直接给与某个 GID
-r 建立系统群组,与 /etc/lgon.defs 内的GID_MIN 有关
groupmod: 修改群组名称
groupmod [-g gid] [-n group_name] 群组
-g 修改既有的GID数字
-n 修改既有的组名
不要随意修改GID,容易造成系统资源的错乱
groupdel 删除群组

gpasswd: 群组管理员功能
让某个群组具有一个管理员,该管理员可以管理 哪些账号可以加入/移除群组
# 系统root管理员的操作命令
gpasswd groupname
没有任何参数表示给予 groupname一个密码
-A 将 groupname的主控权交由后面的 使用者管理,即设置 群组管理员
-M 将某些账号加入该群组中
-r 将 groupname 的密码移除
-R 将 groupname 的密码栏失效
# 群组管理员的动作
gpasswd [-ad] user groupname
-a 将某个使用者加入到 groupname 群组中
-d 将某个使用者移除 groupname 中

ACL 是 Access Control List的缩写,ACL 提供了对单一使用者、单一文件或目录的权限规范,对于特殊权限的使用非常有帮助。
ACL目前几乎已经预设在 Linux的启动挂载中了:

setfacl设定某个目录/文件 的ACL规范
基本使用语法:
setfacl [-bKRd] [{-m|x} acl参数] 目标文件名
-m 设定后续的acl参数给文件使用,不可以与 -x合用
-x 删除后续的acl参数,不可以与-m合用
-b 移除所有的 ACL 设定参数
-k 移除预设的 ACL 参数
-R 递归设定acl,所有的 子目录都设定相关ACL权限
-d 设定 预设acl参数,只对目录有效,在该目录新建的数据引用这个默认值
使用如下:

如果一个文件设置了ACL参数,那么它的权限部分就会多出一个+
getfacl取得某个文件/目录 的ACL 设定项目
基本使用语法:
getfacl filename
getfacl的选项参数几乎与setfacl一致!
使用如下:

显示的结果中,有的字段前面是有# 的,代表这个文件的默认属性,包括文件名、文件拥有者和文件的所属群组,底下出现的 user, group, mask, other 则是属于不同使用者、群组与有效权限(mask)的设定值
使用ACL 设定 使用者和群组的权限并没有太大的差异,在 查看群组的ACL信息时,还有一个mask选项,就类似 有效权限的意思:使用者或群组所设定的权限值必须要存在与mask的权限设定范围内才会生效

其他选项的使用多尝试就可以了,很好理解
一起提高,慢慢变强。