Linux11--权限管理之:文件权限、权限归属、文件权限对路径作用、特殊权限、umask
1 文件权限
权限管理:指的是操作文件的权限
# 超管用户root不受普通权限的限制
# 1 文件权限分类:
r (read) : 4 可读
w (write) : 2 可写
x (execute) : 1 可执行
- (N/A) : 0 没有权限
# 2 权限位的概念:
rw- --- ---
属主 属组 其他人 # 三个字符,为一个权限位
user group other
u g o
# 3 设置权限的命令
# 3.1 设置用户及用户组 (修改文件和文件夹的用户和用户组属性)
chown [选项] [用户].[用户组(非必须)] [路径]
选项:
-R:递归修改文件的属主、属组
# eg:只修改了/tmp下的tmp1文件 的用户名和用户组改成root和root
chown root:root /tmp/tmp1
# eg:把/tmp目录以及/tmp下的所有文件 的用户名和用户组都改成root和root
chown -R root:root /tmp/
# 3.2 设置权限
以每个权限位为单位,把 数字权限和 使用chmod来设置
chmod [选项] [数字权限和] [路径]
选项:
-R:递归设置
# 数字
# eg:将test目录对应 属主、属组、其他人 的权限,全是可读可写可执行 (4+2+0)
chmod 777 -R test/
# 加减法
chmod u+x,g-w,o+r a.txt
# 赋值
chmod a=rwx a.txt # a 表示所有用户
chmod ug=rw,o=r file1
# 注:
把某一个非属主用户添加到文件的属组里,他就拥有了该组的权限,而不再是其他人
2 文件权限的归属
# 1 归属
可读 r
可写 w (文件夹必须先有x权限,才可以在文件中新建文件 touch mkdir等操作)
可执行 x
属主 u
属组 g
其他人 o
所有用户 a
# 2 案例: 通过权限归属来修改权限,不需要再计算数字权限和
# 1.给1.sh的属主可执行权限
chmod 100 1.sh # 或 chmod u+x 1.sh
# 2.给1.sh的属组可读权限
chmod 040 1.sh # 或 chmod g+r 1.sh
# 3.在原权限不变的情况下,给一个其他人的可读权限
chmod 144 1.sh # 或 chmod o+r 1.sh
# 4.去掉1.sh的其他人的可读权限
chmod 140 1.sh # 或 chmod o-r 1.sh
# 5.要求把1.sh加上可执行权限
chmod +x 1.sh # 如果不跟用户,则默认所有用户
# 6.修改1.sh权限为属组只读,属主只写,其他人只读
chmod u=w,g=r,o=r 1.sh
3 文件权限对文件or目录的意义
# linux一般是最小化安装,为了提高性能;linux一般是设置最小权限,为了提高安全性
注:一定要使用普通用户,同时使用全路径来测试
### 1 文件:ls -l 文件名
r:可读取文件内容
w:可修改文件
x:可执行文件代码
若该文件的代码是编译好的结果,则只有x权限即可执行
但若该文件的代码是一个解释型的脚本程序,则需要r+x权限才可执行
### 2 目录:ls -dl 文件名
r:可浏览目录下的内容
w:可在目录下创建、删除、移动文件or目录
x:
可正常切换到目录下
涉及到多层目录如/a/b/c,需要对每一级都有x权限才可以正常走到下一级
可执行目录下的程序,除了对目录有执行权限外,还要对程序文件有执行权限才行
### 3 总结:目录必须有可执行权限,才能操作目录下的内容
1.读权限
当目录有可执行权限,文件有可读权限时,文件可读
2.写权限(用echo测试,vi和vim需要读文件)
当目录有可执行权限,文件有可写权限时,文件可写
3.可执行权限
文件可执行权限的最小权限是:目录有可执行权限,文件有可读可执行权限
### 4 vim的原理
将源文件删掉,然后再将内容的内容覆盖写入了新文件,新文件名重命名为原文件名
例子:
1.当前用户对沿途所有文件夹都有x权限 # 目录都可切换
2.并且当前用户对目标文件夹有w权限 # 目录可创建、删除文件
3.但是当前用户对目标文件没有w权限 # 文件不能修改
此时当前用户可以vim编辑文件内容,并且可以wq!强制保存退出完成文件修改
其实是将源文件删掉了-再新建-重命令,可通过查看前后操作的文件inode号来确定
4 特殊权限
suid 、sgid、sbit 分别是针对文件的 属主、属组、其他
特殊权限的权限位 是数字的第一位表示,分别为4、2、1
普通文件的权限位 默认第一位数字都为0,eg:文件a.txt为644,实际为0644;chmod u+s后,则为4644
4.0 UID/GID 、EUID/EGID
# UID、GID 与 EUID、EGID的区别
# 1 uid/gid 默认: 进程的uid/gid是以登录用户的uid/gid为准
真实用户id、真实用户组id
在进程中,UID是创建进程的用户信息
# 问题: 一个进程的uid和gid是如何得来的呢?
进程的uid继承至登陆的shell进程,也即每个用户的 进程 的uid/gid为 用户的uid/gid
# 2 euid/egid 进程执行时,真正执行的用户id和组id
有效用户id、有效用户组id
在进程中,EUID是创建进程的用户 对 进程所属可执行文件 的操作权限信息
包括是否有使用kill系统调用发送软中断信息到Linux内核结束进程的权限
官方解释:EUID目的是方便资源访问:它使得运行程序的用户 拥有该程序的 有效用户权限
操作系统根据有效用户id和有效用户组id来判断相应进程的运行权限
# 默认场景下:EUID = UID, EGID = GID
4.1 SUID
# 1 SUID set-user-id程序
是将进程(可执行文件程序)执行时,把该进程的有效用户id(EUID) 等于了 进程文件属主的uid
即 当前用户 执行该进程时,执行权限 由 默认的当前用户的权限 变成了 进程文件属主的权限
# 2 SUID的特点
1.SUID 权限仅对二进制可执行文件有效
2.若执行用户对于该二进制可执行文件具有x的权限,执行用户将具有 该文件的所有者 的权限
# 解释:前提是当前用户本来就对该命令有执行权限,才能切换成 命令属主的权限
3.本权限仅在 执行该二进制可执行文件 的过程中有效
# 3 eg:普通用户不是root也不属于root组,但能通过命令password修改密码(本质是修改/etc/shadow文件)
ll /etc/shadow
---------- 1 root root 1109 Aug 11 16:11 /etc/shadow
ll /usr/bin/passwd
-rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd
chmod 4755 `which cat` # 或者 chmod u+s `which cat`
# 详解:
shadow文件没有任何权限,仅仅只能超管用户root可修改
查看passwd命令文件的权限,发现属主权限位有个小写s(SUID权限),该程序也被称为set-user-id程序
它在程序运行时将EUID会变成程序所有者的UID,即 程序的有效用户 变成了 程序的所有者
passwd命令文件属主是root用户,故可进行/etc/shadow文件的修改
# 4 权限过程
# 在没有设置suid的情况下,登录一个用户,来执行操作目标文件的命令
会依次比对当前登录用户是否是目标文件的属主、属组、其他人来确定是否拥有操作权限
# 在设置了suid的情况下,登录一个用户,来执行操作目标文件的命令
若当前用户有执行权限,当前用户会转换成命令文件的属主身份,然后拿着该身份去对应目标文件,判断权限
4.2 SGID
# SGID
1.作用于普通文件
和SUID类似,在执行该文件时,用户将获得该 文件所属组的权限
2.作用于目录
当一个用户对某一目录有写和执行权限时,则该用户可在该目录下建立文件,且文件的属主、属组都是该用户
若该目录同时用 SGID 修饰,则该用户在该目录下建立的文件 的属组则是 该目录所属的组
# eg:
mkdir /test
chmod g+s /test # 等同于chmod 2755 /test/
ll -d /test
drwxr-sr-x 2 root root 6 8月 11 17:06 /test
chown .egon /test # 后期任何人在该目录下创建的文件or目录的属组都是egon
4.3 SBIT
# SBIT 或 Sticky
the restricted deletion flag or sticky bit 的简称
SBIT 目前只对目录有效,用来阻止 非文件的所有者 删除文件
当用户在该目录下 创建新文件或目录时,仅有 文件属主 和 root才有权力删除
主要作用于一个共享的文件夹
# eg: 常见的例子就是 /tmp 目录
ll -d /tmp/ # 权限信息中最后一位t,表明该目录被设置了 SBIT 权限
drwxrwxrwt. 13 root root 4096 8月 11 17:09 /tmp/
chmod o+t /test # 或者 chmod 1755 /test
5 默认权限umask
# 0 新建文件、目录的默认权限是由umask决定的
# 1 计算方式
文件默认的权限为666,跟umask值计算,用666 减 umask值
如果对应位置得到的值为奇数,那么+1,偶数不变
eg: umask为123 则 644 # 本来543,但奇数,则第1/3位+1
目录默认的权限为777,跟umask值计算,用777 减 umask值
# 注: umask设置的越小,权限越大,慎用
# 2 不同用户下,umask默认值,及文件、目录的默认权限
1.uid>199,且属主与属组相等的用户下,umask默认: 0002 # 第一位是特殊权限位的值
文件 默认权限:664 rw-rw-r--
目录 默认权限:775 rwxrwxr-x
2.除1之外的其他用户下,比如root用户,umask默认: 0022
文件 默认权限:644 rw-r--r--
目录 默认权限:755 rwxr-xr-x
# 3 设置umask值
# 3.1 临时设置umask # 一般不会额外指定第一位特殊权限位
umask 000
# 3.2 永久设置umask 设置系统环境变量
vim /etc/profile # 或者/etc/bashrc内容一样
......
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002 # 表示uid大于等于199的默认umask值,表示普通用户
else
umask 022 # 表示uid小于199的默认umask值,表示root
fi
# 4 案例
umask 文件 目录
123 644 654
456 220 321
分类:
Linux运维
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构