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
posted @   Edmond辉仔  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示