用户身份与文件权限

用户身份与能力

RHEL 8系统中,用户身份有以下属性

  1. 管理员UID为0
    系统的管理员用户
  2. 系统用户UID为1~999
    Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围
  3. 普通用户UID从1000开始
    是由管理员创建的用于日常工作的用户

UID不允许冲突,管理员创建的普通用户的UID默认是从1000开始的(即使前面有闲置的号码)

为方便管理属于同一组的用户,Linux系统中还引入了用户组的概念,通过使用用户组号码(GID)可以把多个用户加入到同一个组中,从而方便为组中的用户同一规划权限或指定任务

另外,在Linux系统中创建用户的时候,将会自动创建一个与其同名的基本用户组,而且这个基本用户组只会有该用户一个人。如果该用户以后被归纳到其他用户组,则这个其他用户组称之为扩展用户组,一个用户只有一个基本用户组,但可以有多个扩展用户组,从而满足日常的工作需要

id命令

id命令用于显示用户组的详细信息

例:
查看root用户的详细信息
id root

useradd命令

useradd命令用于创建新的用户账户,常用参数如下表所示

参数 作用
-d 指定用户的家目录(默认为/home/username)
-e 账户到期时间,格式为YYYY-MM-DD
-u 指定该账户的默认UID
-g 指定一个初始的用户基本组用户基本组(必须已经存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定该用户的默认Shell解释器

例:
创建jack用户
useradd jack

groupadd命令

groupadd命令用于创建新的用户组

例:
创建test用户组
groupadd test

usermod命令

usermod命令用于修改用户的属性,常用参数如下表所示

参数 作用
-c 填写用户账户的备注信息
-d -m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e 账户到期时间,格式为YYYY-MM-DD
-g 变更所属用户组
-G 变更扩展用户组
-L 锁定用户禁止其登录系统
-U 解锁用户,允许其登录系统
-s 变更默认终端
-u 修改用户的UID

例:
修改jack用户UID为8888
usermod -u 8888 jack

passwd命令

passwd命令用于修改用户密码、过期时间等信息,常用参数如下表所示

参数 作用
-l 锁定用户,禁止其登录
-u 解除锁定,允许用户登录
—stdin 通过标准输入修改用户密码
-d 使该用户可用空密码登录系统
-e 强制用户在下次登录时修改密码
-S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称

例:
通过标准输入修改jack用户密码
echo “NewPassWord” | passwd —stdin jack

userdel命令

userdel命令用于删除已有的用户账户,常用参数如下表所示

参数 作用
-f 强制删除用户
-r 同时删除用户及用户家目录

例:
删除jack用户
userdel jack

文件权限与归属

在Linux系统中,每个文件都有归属的所有者和所属组,并且规定了文件的所有者、所属组以及其他人对文件所拥有的可读r、可写w、可执行x等权限
一般文件来说,可读为能够查看文件内容,可写为能够对文件进行编辑、新建、删除等操作,可执行为能够运行一个脚本程序
目录文件来说,可读为能够读取目录内的文件列表,可写为能够在目录内新建、删除、重命名文件,可执行为能够进入该目录
可读、可写、可执行权限对应的命令在文件和目录上是有区别的,具体如下表所示

文件 目录
可读r cat ls
可写w vim touch
可执行x ./scrip cd

文件的可读、可写、可执行权限可以用数字4、2、1来表示,文件所有者、所属组以及其他用户权限之间无关系,具体如下表所示

权限项 可读 可写 可执行 可读 可写 可执行 可读 可写 可执行
字符表示 r w x r w x r w x
数字表示 4 2 1 4 2 1 4 2 1
权限分配 文件所有者 文件所属组 其他用户

文件权限的数字表示法基于字符rwx的权限计算而来,其目的是简化权限的表示方法
例如,如果某个文件的权限为7,则代表可读、可写、可执行(4+2+1),字符表示为rwx;
如果文件的权限为761,则代表文件的所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限,其他用户只有可读的权限,字符表示为rwxrw--r-

rwxrw--r-中的减号为占位符,代表没有权限,数字表示为0

文件的特殊权限

SUID

SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者权限

SGID

SGID特殊权限有两种应用场景,当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有的用户组的名称

SBIT

SBIT特殊权限可确保用户只能删除自己的文件,而不能删除其他用户的权限

设置文件的特殊权限需要用到chmod命令,用法为chmod [参数] 文件名,特殊权限的参数如下表所示

参数 作用
u+s 设置SUID权限
u-s 取消SUID权限
g+s 设置SGID权限
g-s 取消SGID权限
o+t 设置SBIT权限
o-t 取消SBIT权限

文件的隐藏属性

chattr命令

chattr命令用于设置文件的隐藏权限,常用参数如下表所示

参数 作用
i 无法对文件进行修改,若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容
S 文件内容在变更后立即同步到硬盘
s 彻底从硬盘中删除,不可恢复
A 不再修改这个文件或目录的最后访问时间
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,一边日后恢复
t 让文件系统支持尾部合并
x 可以直接访问压缩文件中的内容

lsattr命令

lsattr命令用于查看文件的隐藏权限

文件访问控制列表

setfacl命令

setfacl命令用于管理文件的ACL权限规则,ACL权限提供的是在所有者、所属组、其他人的读/写/执行之外的特殊权限控制,常用参数如下表所示

参数 作用
-m 修改权限
-M 从文件中读取权限
-x 删除某个权限
-b 删除全部权限
-R 递归子目录

getfacl命令

getfacl命令用于查看文件的ACL权限规则

su命令与sudo服务

su命令可以解决切换用户身份的需求,使得当前用户不登出的情况下切换到其他用户

例:
切换到jack用户
su jack

sudo命令用于给普通用户提供额外的权限,常用参数如下表所示

参数 作用
-h 列出帮助信息
-l 列出当前用户可以执行的命令
-u 用户名或UID值 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语

如果担心直接修改配置文件会出现问题,可以使用sudo命令提供的visudo命令来配置用户权限,visudo命令用于编辑、配置用户sudo的权限文件

visudo命令操作方法与使用Vim编辑器方法一致

先来首ALL的小曲

例:
谁可以使用 允许使用的主机 = (以谁的身份) 可执行命令的列表
谁可以使用:稍后要为那位用户进行命令授权
允许使用的主机:可以填写ALL表示不限制来源的主机
以谁的身份:可以填写ALL便是系统最高权限
可执行命令序列:可以填写ALL表示不限制命令

例:
为jack用户提供额外的权限,100行左右添加
jack ALL=(ALL) ALL