Linux命令行(五)
用户身份与文件权限
用户身份与能力
在RHEL 8
系统中,用户身份有以下属性
- 管理员UID为
0
系统的管理员用户 - 系统用户UID为
1~999
Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围 - 普通用户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