Linux账号管理及ACL权限设定

1. 账号与群组

1.1 账号及相关文件

  • 每一个文件都有拥有人与拥有群组的属性,分别为使用者ID(User ID:UID)群组ID(Group ID:GID)
  • id username 可以查看用户的相关信息
    在这里插入图片描述

1.1.1 /etc/passwd文件结构

以 :为分隔符,总共7个字段

在这里插入图片描述

段号 内容
1 账号名称
2 密码
3 UID及其范围:
0(系统管理员root);
1~999(系统账号):1 ~ 200(由distributions自行建立的系统账号); 201 ~ 999(用户有系统账户需求,可使用的id);
1000~MAX(给一般使用者使用,最大值在/etc/login.defs文件中设定)。
4 GID,与/etc/group有关,该id对应的是用户的初始群组
5 用户信息说明栏
6 家目录
7 Shell

1.1.2 /etc/shadow文件结构

也是以 : 为分隔符 ,总共9个字段

在这里插入图片描述

段号 内容
1 账号名称,与/etc/passwd的账号名称对应
2 密码 ,这个字段内的数据才是真正的密码,而且是经过编码的密码(加密),使用authconfig --test | grep hashing查询当前加密方式
3 最近更动密码的日期,是以1970 年1 月1 日作为1 而累加的日期
4 密码不可被更动的天数:(与第3 字段相比)
5 密码需要重新变更的天数:(与第3 字段相比)
6 密码需要变更期限前的警告天数:(与第5 字段相比)
7 密码过期后的账号宽限时间(密码失效日):(与第5 字段相比)
8 账号失效日期,也是使用1970 年以来的总日数设定
9 保留,最后一个字段是保留的,看以后有没有新功能加入。

1.2 群组及其相关文件、相关命令

1.2.1 /etc/group文件结构

在这里插入图片描述

段号 内容
1 组名
2 群组密码 ,设定给群组管理员
3 GID,群组的ID
4 此群组支持的账号名称,某个账号想要加入此群组时,将该账号填入这个字段即可

1.2.2 /etc/gshadow文件结构

由于有了sudo功能,所以群组管理员的使用已经很少了,而该文件最大功能就是建立群组管理员,所以只做了解即可。
在这里插入图片描述

1.2.3 有效群组(effective group)与初始群组(initial group)

  • 对于gavin用户,通过系统安装时的设定和当场的设定,支持gavin、wheel、users三个群组,如下图:
    在这里插入图片描述
  • 若是新建一文件或目录,新文件所在的群组与当前的有效群组是一致的,使用groups指令显示有效与支持群组,其中第一个输出的群组即为有效群组
    在这里插入图片描述
  • 若是想要切换有效群组使用newgrp 群组名指令

1.3 账号管理

1.3.1 新增用户账号useradd

useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名

选项与参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
-g :后面接的那个组名就是我们上面提到的 initial group 啦~
该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的组名则是这个账号还可以加入的群组,通常是-a -G配合使用添加次要群组。这个选项与参数会修改 /etc/group 文件。
-M :强制!不要建立用户家目录!(系统账号默认值)
-m :强制!要建立用户家目录!(一般账号默认值)
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设定的啦~
-d :指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径!
-D : 可以查看useradd指令的默认值显示的内容为/etc/default/useradd文件中的内容
  GROUP参数为默认初始群组,分为私有群组和公共群组;HOME为用户家目录的基准目录;SKEL为用户家目录参考基准目录;
-r :建立一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
-s :后面接一个 shell ,若没有指定则预设是 /bin/bash 的啦~
-e :后面接一个日期,格式为『YYYY-MM-DD』此项目可写入 shadow 第八字段,亦即账号失效日的设定项目;
-f :后面接 shadow 的第七字段项目,指定密码是否会失效。0 为立刻失效,-1 为永远不失效(密码只会过期而强制于登入时重新设定而已。)

在使用useradd指令添加用户的时候,CentOS做了如下事项:

  • 在/etc/passwd 里面建立一行与账号相关的数据,包括建立UID/GID/家目录等;
  • 在/etc/shadow 里面将此账号的密码相关参数填入,但是尚未有密码;
  • 在/etc/group 里面加入一个与账号名称一模一样的组名,或许还会在/etc/gshadow文件中添加内容;
  • 在/home 底下建立一个与账号同名的目录作为用户家目录,且权限为700,权限设置在/etc/login.defs文件中。

**在useradd -D中可查看基本的账号设定值,UID/GID和密码参数的设定在/etc/login.defs文件当中。**由上可知useradd建立Linux账号时,会参考/etc/default/useradd(useradd -D显示该文件内容,见下图)、/etc/login.defs/etc/skel/*这些文件。
在这里插入图片描述

1.3.2 修改用户密码passwd

在这里插入图片描述
root的密码设定可以不遵循PAM模块的要求,但是最好不要这样做。
此外passwd -S的功能chage指令也能完成,且更详细。
在这里插入图片描述

1.3.3 对账号设置进行调整usermod

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

1.3.4 删除账号userdel

在这里插入图片描述

1.3.5 更改用户的shell指令chsh

在这里插入图片描述
可以发现,所有用户都可以更改自己的账户设置,即访问/etc/passwd文件,所以为了实现这个特性,chsh是使用了SUID功能的!证明如下:

在这里插入图片描述

1.3.6 对群组的操作

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

2. ACL实现细部权限划分

ACLAccess Control List 的缩写,主要的目的是在提供传统的owner,group,others 的read,write,execute 权限之外的细部权限设定。ACL 可针对单一使用者,单一文件或目录来进行r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。可以对以下方面进行权限控制:

  • 使用者(user):可以针对使用者来设定权限;
  • 群组(group):针对群组为对象来设定其权限;
  • 默认属性(mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;

2.1.1 setfacl:设定某个目录/文件的ACL规范

在这里插入图片描述
acl参数的方式有:

  • 对单一使用者进行权限的设置:u:使用者:权限
  • 对特定的单一群组进行权限的设置:g:群组名:权限
  • 针对有效权限(使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效)的设定:m:权限
  • 使用默认权限设定目录未来文件的权限:d:[u|g]:[user|group]:权限

注: 当设定一个用户/群组没有任何权限的 ACL 语法中,在权限的字段不可留白,加上一个减号(-) 才是正确的,比如将用户pro3不能使用目录/srv/projecta应该下达的指令为:setfacl -m u:pro3:- /srv/projecta

2.1.2 getfacl: 查阅某个目录/文件的ACL设定

3. Quota实现用户或群组的磁盘配额

以XFS文件系统为例,quota可以针对用户、群组和个别用户进行配额限制。配额限制又分为容量限制(block限制)和文件数量限制(inode限制),对于超过限额时又会有柔性劝导(soft)和硬性规定(hard),对于超过柔性劝导又有倒计时的宽限时间(grace time)。
在这里插入图片描述

3.1 Quota的用途和使用限制

quota常用的网络情况:

  • 针对WWW server ,例如:每个人的网页空间的容量限制。
  • 针对mail server,例如:每个人的邮件空间限制。
  • 针对file server,例如:每个人最大的可用网络硬盘空间。

quota常用的主机情况:

  • 限制某一群组所能使用的最大磁盘配额(使用群组限制)
  • 限制某一用户的最大磁盘配额(使用用户限制)
  • 限制某一目录(directory, project) 的最大磁盘配额

quota的使用限制

  • 在EXT 文件系统家族仅能针对整个filesystem
  • 核心必须支持quota
  • 只对一般身份使用者有效
  • 若启用SELinux,非所有目录均可设定quota

3.2 Quota在xfs上的实操

VFAT文件系统不支持Linux Quota功能,XFS系统支持,要在/etc/fstab文件中第四个字段添加usrquota,grpquota/prjquota(群组配额和目录配额是互斥的,不能同时存在),再解除fs挂载并重新挂载使得quota生效。
设置quota的指令:
在这里插入图片描述
列出目前系统的各个文件系统对quota的支持:xfs_quota -x -c "print"
列出/home支持quota的载点文件系统使用情况:xfs_quota -x -c "df -h" /home
列出目前/home的所有用户的quota限制值:xfs_quota -x -c "report -ubih" /home
列出现有文件系统的quota启用情况:xfs_quota -x -c "state"
在这里插入图片描述
对目录的quota限制略。
此外,还可以对quota进行关闭开启的操作(具体指令形式见3.3):

  • disable:暂时取消quota 的限制,但其实系统还是在计算quota 中,只是没有管制而已!应该算最有用的
    功能啰!
  • enable:就是回复到正常管制的状态中,与disable 可以互相取消、启用!
  • off:完全关闭quota 的限制,使用了这个状态后,你只有卸除再重新挂载才能够再次的启动quota 喔!也
    就是说, 用了 off 状态后,你无法使用enable 再次复原quota 的管制喔!注意不要乱用这个状态!一般
    建议用disable 即可,除非你需要执行remove 的动作!
  • remove:必须要在off 的状态下才能够执行的指令~这个remove 可以『移除』quota 的限制设定,例如要
    取消project 的设定, 无须重新设定为0 喔!只要remove -p 就可以了!

3.3 XFS指令对照表

在这里插入图片描述

4. 用户身份的切换

4.1 su

su - 直接将身份变成root ,该指令需要root 的密码,如果要以su 变成root 的话,一般使用者就必须要有root 的密码。

在这里插入图片描述
su用法总结:

  • 若要完整的切换到新使用者的环境,必须要使用su - usernamesu -l username, 才会连同PATH/USER/MAIL 等变量都转成新用户的环境;
  • 如果仅执行一次root 的指令,可以利用su - -c "指令串" 的方式来处理,当执行多个指令时,使用 sh -c "一串指令" 来执行
  • 使用root 切换成为任何使用者时,并不需要输入新用户的密码;

4.2 sudo

以sudo 指令执行root 的指令串的好处是,由于sudo 需要事先设定妥当,只需要输入用户自己的密码,防止了root密码的流出。

在这里插入图片描述在这里插入图片描述
sudo 执行的重点是:能否使用sudo 必须要看/etc/sudoers 的设定值, 而可使用 sudo 者是透过输入用户自己的密码来执行后续的指令串。

sudo执行流程如下:

  1. 当用户执行sudo 时,系统于/etc/sudoers 文件中搜寻该使用者是否有执行sudo 的权限;
  2. 若使用者具有可执行sudo 的权限后,便让使用者『输入用户自己的密码』来确认;
  3. 若密码输入成功,便开始进行sudo 后续接的指令(但root 执行sudo 时,不需要输入密码);
  4. 若欲切换的身份与执行者身份相同,那也不需要输入密码。

除了root 之外的其他账号,若想要使用sudo 执行属于root 的权限指令,则root 需要先使用visudo 去修改/etc/sudoers ,让该账号能够使用全部或部分的root 指令功能。

修改/etc/sudoers文件有两种方法:
1. 直接修改/etc/sudoers文件,将账号添加到白名单当中;
2. 利用wheel群组以及免密码的功能处理visudo,使用usermod将账号加入wheel群组当中即可。

sudoers文件语法:

在这里插入图片描述

  1. 『使用者账号』:系统的哪个账号可以使用sudo 这个指令的意思;
  2. 『登入者的来源主机名』:当这个账号由哪部主机联机到本Linux 主机,意思是这个账号可能是由哪一部网
    络主机联机过来的, 这个设定值可以指定客户端计算机(信任的来源的意思)。默认值root 可来自任何一部
    网络主机
  3. 『(可切换的身份)』:这个账号可以切换成什么身份来下达后续的指令,默认root 可以切换成任何人;
  4. 『可下达的指令』:可用该身份下达什么指令?这个指令请务必使用绝对路径撰写。预设 root 可以切换任
    何身份且进行任何指令之意。
  5. ALL是特殊关键词,代表任何身份、主机或指令的意思。
  6. 可以对在/etc/sudoers中的账号进行指令的限制,如!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root就是可设置除root外的任何账户的密码。
  7. 还可通过别名,来简化sudoers文件中的内容,比如将某一命令设置别名,将某些账号设为一个别名组,比如:
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM

5. PAM模块简介

PAM (Pluggable Authentication Modules)可以说是一套应用程序编程接口(Application Programming Interface, API),他提供了一连串的验证机制,只要使用者将验证阶段的需求告知PAM 后, PAM 就能够回报使用者验证的结果(成功或失败)。

工作流程:

  1. 用户开始执行/usr/bin/passwd 这支程序,并输入密码;
  2. passwd 呼叫PAM 模块进行验证;
  3. PAM 模块会到/etc/pam.d/ 找寻与程序(passwd) 同名的配置文件;
  4. 依据/etc/pam.d/passwd 内的设定,引用相关的PAM 模块逐步进行验证分析;
  5. 将验证结果(成功、失败以及其他讯息) 回传给passwd 这支程序;
  6. passwd 这支程序会根据PAM 回传的结果决定下一个动作(重新输入新密码或者通过验证!)

6. 主机在线使用者的交流

w, who, 可以查询当前已登入系统的用户
last, lastlog, 可以查询每个账号的最近登入的时间
write 使用者账号 [用户所在终端接口],然后输入对话内容以ctrl+d结束
mesg (y/n),查看当前对话状态,也可以选择时候开启或屏蔽对话
wall, 对所有系统上面的用户广播信息

7.重点回顾

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

猜你喜欢

转载自blog.csdn.net/yueguangmuyu/article/details/108681246