Linux基础知识与实操-篇六:用户权限控制与账号管理


本篇主要介绍Linux系统关于用户身份的控制原理与Linux下对不同用户权限的控制。

标识用户身份与登录控制

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

Linux系统就通过 UID 和 GID 识别不同的用户,进而实现不同 的文件权限控制
image

用户在输入 用户名和密码之后,进入系统的这个过程中,操作系统实现了如下的校验:

  1. 先找寻 /etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的 UID 与
    GID (在 /etc/group 中) 读出来,另外,该账号的家目录与 shell 设定也一并读出
  2. 再来则是核对密码表啦!这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚
    刚输入的密码与里头的密码是否相符
  3. 如果上面的都顺利通过,那么就进入了 shell 命令界面了

所以 攻击者会将特殊账号 写入到 /etc/passwd 文件中;
如果备份 Linux系统的账号,也要记得备份这两个文件

/etc/passwd 文件主要负责管理 使用者 的UID/GID , 每一行都代表一个账号,有几行就代表有几个账号在 该系统 中,这其中有很多账号是系统正常运行所需要的,就是系统账号,比如bin、daemon、adm、nobody等,轻易不要修改或删掉它们。
image

下面介绍这个文件中的各个字段的含义:

  • 账号名称:
    对应UID的可视化 名称,即用户名
  • 密码:
    早期 Unix系统的密码就放在这个字段上,但是这样就太容易被窃取了,所以为了安全起见,就将 密码放到 /etc/shadow 中了,这里就使用 x 表示这是 未知字段
  • UID:
    使用者标识符,Linux对UID有一定的限制:
    image
  • GID:
    /etc/group 有关,/etc/group 的观念与 /etc/passwd 差不多,只是用来规范 组名与GID 的对应而已
  • 用户信息说明栏
    没有什么用途,主要用来 解释账号的意义
  • 家目录
    用户的家目录,cd 默认就是 回到 该用户的 家目录
  • Shell
    用户登录系统后,会取得一个 shell 与系统进行交互

/etc/passwd 文件主要负责管理 密码相关的数据;Linux下很多程序的运行都与 权限有关,权限又与 UID/GID 有关,所以很多程序就需要 读取 /etc/passwd 来了解不同账号的权限,所以 /etc/passwd的权限需要设定为 -rw-r--r--, 并且为了 安全,还在 该文件中加入了很多 密码限制参数
image

各个字段的含义如下:

  • 账号名称
    该账号名称的显示 顺序与 /etc/passwd 中必须一致
  • 密码
    每个用户登录系统存储的密码,这里显示的是经过加密后的密码,而且这段密文的长度是固定的,如果改变 这个字段的长度,该密码就会失效,所以有的软件会在这个字段前加上!或*, 从而改变密文长度,进而实现密码失效
  • 最近改动密码的日期
    这里显示的是自 1970-1-1 而累加的日期
  • 密码不可改动的天数(显示与第三字段相同)
    该账号的密码在最近一个被更改后需要经过几天才可以被再次更改,这是为了防止 有人一再改动密码而设置的
  • 密码需要更新变更的天数(显示与第三字段相同)
    可以强制要求用户更改密码,该字段指定了在 最近一个更改密码后,在 多少天内需要再次修改密码,如果没有在指定天数内修改密码,该账号的密码就会变为 过期特性
  • 密码需要变更期限前的警告天数(显示与第三字段相同)
    在 密码更改期限到期前,系统会根据这个字段的设置,对该账户 发出警告
  • 密码过期后的账号宽限时间(密码失效日)(显示与第三字段相同)
    超过 密码需要更新的期限后,该密码就过期了,当再次登录系统时,系统就会强制要求 重新设定密码才能登入系统并继续使用
    如果继续超出了此字段规定的时间,那么该账号就无法再使用 旧密码登录了,因为原密码 过期了!
  • 账号失效日期(显示与第三字段相同)
    此账号在规定的日期之后,将无法再使用,无论密码是否过期,该账号都无法再使用
  • 保留
    保留字段,留作他用

一般用户如果忘记密码了,可以通过 root 管理员直接重置密码,但如果是 root 管理员的密码忘记了,那就比较费劲了,由于无法进入系统,也就无法操作或修改密码了,可以通过 重启进入单人维护模式,再通过passwd 命令修改密码


群组管理文件/etc/group /etc/gshadow 文件负责 用户组名和权限管理

/etc/group 目录 记录了GID 与组名对应的内容,每一行就代表一个 群组,其中各个字段的含义如下:
image

  • 组名:
    与第三个字段 GID 对应
  • 群组密码
    通常不需要设置,而且通常是由 群组管理员使用的,并且 所有密码都由 /etc/shadow 文件设定,所以这里就只需要 x 表示密码字段就可以了
  • GID
    群组ID
  • 此群组支持的账号名称
    一个账号可以加入多个群组,如果某个账号想要加入这个群组,该账号就需要填入这个字段,表示 该账号在此群组中

上面三个文件的关系如下:
image

群组与权限分配

/etc/passwd 文件中,有 GID 域,这里指定的 群组,就是 初始群组(initial group),用户一登录系统,就立刻拥有这个群组的相关权限,不需要再 /etc/group 中写入该 群组就在该群组中了

但是 非初始群组 就不同了,非初始群组就是 在 /etc/group 文件中的第四个字段中 写入的数据,这样 该账号就加入了这个群组,该账号就拥有了 写入的群组的文件访问权限,但是 如果该账号 建立了一个新文件,该文件的 群组属性该是哪个呢?
当然是 初始群组啦

每个账号可以通过 输入 如下的命令,获得 所在的群组:

# 获取当前账号所支持的群组,要注意s
[root@AliComputer ~]# groups
root docker
[root@AliComputer ~]#

如下:
image

如果要切换 有效群组,可以通过 newgrp 命令实现,该命令 只能切换 该账号 支持的群组,这样影响的就是 在建立新文件时,该文件的 群组访问属性不同了

还可以通过/etc/gshadow 文件来 建立群组管理员,该文件的内容字段如下,四个字段的含义与 /etc/group 文件中的含义也比较类似
image

  • 组名
  • 密码栏
    如果开头为!表示没有合法密码,即 无群组管理员
  • 群组管理员账号
  • 有加入该群组支持的所属账号

如果 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 账号名称 直接建立 使用者即可,系统会默认处理以下项目:
image

在建立好账号后,需要设定 密码,否则该站好就是 暂时封锁的状态,无法登入,使用 如下命令设定密码:

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管理员在修改其他用户密码时就不用担心这个问题),一般密码需要满足一下要求才可以通过:
image

image

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

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

还可以通过 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 的意思,更改 用户信息,除非用户非常多,否则很少使用了
    image

  • chsh: 就是 change shell 的缩写

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

    image

上面是对用户的操作,下面考虑对群组的操作:

  • 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 删除群组
    image

  • gpasswd: 群组管理员功能
    让某个群组具有一个管理员,该管理员可以管理 哪些账号可以加入/移除群组

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

    image

主机权限规划与ACL使用

ACL 是 Access Control List的缩写,ACL 提供了对单一使用者、单一文件或目录的权限规范,对于特殊权限的使用非常有帮助。

ACL目前几乎已经预设在 Linux的启动挂载中了:
image

setfacl

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

基本使用语法:

setfacl [-bKRd] [{-m|x} acl参数] 目标文件名

-m  设定后续的acl参数给文件使用,不可以与 -x合用
-x  删除后续的acl参数,不可以与-m合用
-b  移除所有的 ACL 设定参数
-k  移除预设的 ACL 参数
-R  递归设定acl,所有的 子目录都设定相关ACL权限
-d  设定 预设acl参数,只对目录有效,在该目录新建的数据引用这个默认值

使用如下:
image

如果一个文件设置了ACL参数,那么它的权限部分就会多出一个+

getfacl

取得某个文件/目录 的ACL 设定项目

基本使用语法:

getfacl filename

getfacl的选项参数几乎与setfacl一致!

使用如下:
image

显示的结果中,有的字段前面是有# 的,代表这个文件的默认属性,包括文件名、文件拥有者和文件的所属群组,底下出现的 user, group, mask, other 则是属于不同使用者、群组与有效权限(mask)的设定值

使用ACL 设定 使用者和群组的权限并没有太大的差异,在 查看群组的ACL信息时,还有一个mask选项,就类似 有效权限的意思:使用者或群组所设定的权限值必须要存在与mask的权限设定范围内才会生效
image

其他选项的使用多尝试就可以了,很好理解

最后

一起提高,慢慢变强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值