linux权限与归属

概述

权限
  • 读取:允许查看内容-read r

  • 写入:允许修改内容-write w

  • 可执行:允许运行和切换-excute x #linux最重要的权限

    #s、t 是附加权限

对于文本文件

  • r读取权限:cat、less、grep、head、tail

  • w写入权限:vim、> 、 >>

  • x可执行权限:Shell与Python

对于目录

  • r读取权限:ls命令查看目录内容

  • w写入权限:能够创建、删除、修改等目录的内容

  • x 执行权限:能够cd切换到此目录下(进入此目录)

归属关系
  • 所有者(属主):拥有此文件/目录的用户 -user

  • 所属组(属组):拥有此文件/目录的组 -group

  • 其他用户:除所有者、所属组以外的用户 -other

文件/目录权限解析

ls -ld 文本文件/目录

输出7个字段

权限位 、硬连接、所属主、所属组、大小、最后修改时间 、文件/目录名称

#权限位第一个字符分为 - 、l、d 分别对应文件类型为 文本文件、链接、目录

八进制数值模式

chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。

数字权限的具体表达

文本文件权限

目录权限

chmod修改权限

格式【语法】:chmod [选项] [ugoa] [+-=] [rwx] /数字 文件...

  • u、g、o、a 对应所属身份为 所属者、所属组、其他人、所有人

  • +、-、= 指的是追加权限、解除权限、重写权限

  • -R: 递归修改权限

案例:解除文件的所属者写权限

案例:追加文件的所属组写权限

案例:重新写入文件的所有人全部权限

案例:递归修改所有子目录的权限

案例:以数字的方式修改权限【一般用于大范围修改权限】

chown修改归属

格式【语法】

  • –chown [选项] 属主 文件...

  • –chown [选项] 属主:属组 文件...

  • –chown [选项] :属组 文件...

选项

 -c或——changes:效果类似“-v”参数,但仅回报更改的部分;
 -f或--quite或——silent:不显示错误信息;
 -h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
 -R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
 -v或——version:显示指令执行过程;
 --dereference:效果和“-h”参数相同;
 --help:在线帮助;
 --reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
 --version:显示版本信息。

案例

 [root@localhost ~]# mkdir  /nsd15      #创建测试目录
 [root@localhost ~]# ls -ld   /nsd15    #展示测试目录权限
 [root@localhost ~]# groupadd   tmooc   #创建组tmooc
 [root@localhost ~]# useradd  lisi     #创建用户lisi
 [root@localhost ~]# chown   lisi:tmooc  /nsd15   #修改测试文件的所属者与所属组
 [root@localhost ~]# ls  -ld  /nsd15           #展示修改后测试目录权限    
 [root@localhost ~]# chown   zhangsan   /nsd15   #仅修改所有者
 [root@localhost ~]# ls   -ld   /nsd15       #展示
 [root@localhost ~]# chown   :root  /nsd15     #仅修改所属组
 [root@localhost ~]# ls   -ld    /nsd15      #展示

#修改测试文件的所属者与所属组

#修改测试文件的所属者

#修改测试文件的所属组

练习案例(权限修改)

 chmod修改数据的权限:
 ]# mkdir   /nsd10
 ]# ls   -ld   /nsd10
 ]# chmod   u-w    /nsd10    #所有者去掉w权限
 ]# ls -ld    /nsd10    
 ]# chmod   u+w  /nsd10     #所有者加上w权限
 ]# ls  -ld   /nsd10
 ]# chmod   g+w   /nsd10     #所属组加上w权限
 ]# ls   -ld    /nsd10
 ]# chmod    g=r    /nsd10    #所属组重新定义权限
 ]# ls    -ld    /nsd10
 ]# chmod    a=rwx    /nsd10   #a表示所有人
 ]# ls   -ld     /nsd10
 ]# chmod  u=---,g=rx,o=rwx     /nsd10
 ]# ls   -ld   /nsd10
 ​
 -R:递归修改权限
 [root@localhost ~]# mkdir   -p   /opt/aa/bb/cc
 [root@localhost ~]# chmod  -R   o=---   /opt/aa
 ​
 [root@localhost ~]# ls   -ld     /opt/aa
 [root@localhost ~]# ls   -ld     /opt/aa/bb
 [root@localhost ~]# ls   -ld     /opt/aa/bb/cc

练习案例(权限测试)

 1)以root身份新建/dir目录,在此目录下新建readme.txt文件
 [root@localhost ~]# mkdir  /dir      
 [root@localhost ~]# echo  123456   >  /dir/readme.txt
 [root@localhost ~]# cat    /dir/readme.txt   
 2)使用户zhangsan能够修改readme.txt文件内容
 [root@localhost ~]# chmod  o+w   /dir/readme.txt
 3)使用户zhangsan不可以修改readme.txt文件内容
 [root@localhost ~]# chmod  o-w   /dir/readme.txt
 4)使用户zhangsan能够在此目录下创建/删除子目录
 [root@localhost ~]# chmod  o+w   /dir/
 5)调整此目录的权限,使任何用户都不能进入,然后测试用户zhangsan是否还能查看readme.txt内容(测试结果是不能,对父目录没有权限)
 [root@localhost ~]# chmod  a-x   /dir/
 6)为此目录及其下所有文档设置权限 rwxr-x---(练习-R选项)
 [root@localhost ~]# chmod -R  u=rwx,g=rx,o=---   /dir

权限优先级判定

基本归属判定:是否所属者--->是否所属组--->其他人 #遇到’是‘,停止匹配并读取相应权限

原则:匹配即停

#ACL策略优先与基本归属判定【ACL > 基础权限判定】

【注意:只有文件的所属者root拥有对该文件权限进行修改】

总结

Linux中判断用户具备的权限

  • 首先查看该用户或者组是否有ACL策略

  • 查看用户,对于该数据所处的身份,顺序所有者>所属组>其他人,原则是匹配及停止

  • 查看相应身份的权限位

ACL策略管理

•文档归属的局限性:–任何人只属于三种角色:属主、属组、其他人

–针对特殊的人实现更精细的控制

•acl访问策略作用:

–能够对个别用户、个别组设置独立的权限

•setfacl命令

–格式:

  • setfacl [选项] u:用户名:权限 文件...

  • setfacl [选项] g:组名:权限 文件...

•常用命令选项

  • -m:修改ACL策略(modify)

  • -x:清除指定的ACL策略

  • -b:清除所有已设置的ACL策略

  • -R:递归设置ACL策略

 #设置测试目录的访问权限,让所有者和所属组具备读、写、执行的权限;其他人无权限
 [root@localhost ~]# mkdir    /nsd19     #测试目录
 [root@localhost ~]# chmod    770   /nsd19   #更改权限   
 [root@localhost ~]# ls   -ld   /nsd19     #展示权限
 [root@localhost ~]# useradd  dc
 [root@localhost ~]# su  -   dc
 [dc@localhost ~]$ cd     /nsd19
 -bash: cd: /nsd19: 权限不够
 [dc@localhost ~]$ exit
 ------------------------------------------------------------------------
 #通过acl,单独给用户dc权限
 [root@localhost ~]# setfacl   -m   u:dc:rx   /nsd19   #单独赋予dc用户权限
 [root@localhost ~]# getfacl   /nsd19         #查看ACL策略
 [root@localhost ~]# su  -   dc 
 [dc@localhost ~]$ cd    /nsd19
 [dc@localhost ~]$ pwd
 [dc@localhost ~]$ exit

ACL策略-黑名单的使用(单独拒绝某些用户)

 [root@localhost ~]# mkdir  /home/public                
 [root@localhost ~]# chmod  777  /home/public[
 root@localhost ~]# setfacl  -m   u:lisi:---    /home/public
 [root@localhost ~]# getfacl   /home/public

【注意:acl修改权限之后,ls表达的权限会有差异--具体体现在所属组权限。】

【acl后一切以getfacl为准】

-R:递归设置ACL策略

 [root@localhost ~]# setfacl -Rm    u:dc:rwx    /opt/aa

附加权限

附加权限概述

附加权限也被称为附加权限

  • -叠加于权限位的u、g、o分组之上

  • -用来传递程序执行身份、限制目录写入权

Set UID
  • 占用属主(User)的 x 位

  • 显示为 s 或 S,取决于属主是否有 x 权限

  • 仅对可执行的程序有意义

  • 当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应权限

    【不轻易使用,有极大的不安全性】

     [root@localhost ~]# which mkdir
     /usr/bin/mkdir
     [root@localhost ~]# /usr/bin/mkdir   /opt/abc01
     [root@localhost ~]# ls     /opt/
     [root@localhost ~]# cp /usr/bin/mkdir  /usr/bin/hahadir
     [root@localhost ~]# ls   -l    /usr/bin/hahadir
     [root@localhost ~]# /usr/bin/hahadir    /opt/abc02
     [root@localhost ~]# ls    /opt/
     [root@localhost ~]# chmod   u+s   /usr/bin/hahadir 
     [root@localhost ~]# ls  -l   /usr/bin/hahadir
     [root@localhost ~]# su  -  zhangsan
     [zhangsan@localhost ~]$ /usr/bin/mkdir    zs01
     [zhangsan@localhost ~]$ ls    -l
     [zhangsan@localhost ~]$ /usr/bin/hahadir      zs02
     [zhangsan@localhost ~]$ ls    -l
     创建目录时,指定目录的权限    
     [root@localhost ~]# mkdir  -m  700   /opt/cbd03
     [root@localhost ~]# ls   -ld   /opt/cbd03
     [root@localhost ~]# mkdir  -m  777   /opt/cbd04
     [root@localhost ~]# ls    -ld    /opt/cbd04
Set GID
  • –占用属组(Group)的 x 位

  • –显示为 s 或 S,取决于属组是否有 x 权限

  • –对目录有效

  • –在一个具有SGID权限的目录下,新建的文档会自动继承父目录的属组身份

     [root@localhost ~]# mkdir   /nsd18                    
     [root@localhost ~]# chown   :tmooc   /nsd18   #修改所属组
     [root@localhost ~]# ls  -ld   /nsd18
     [root@localhost ~]# chmod  g+s  /nsd18     #赋予SGID特殊权限
     [root@localhost ~]# ls -ld    /nsd18
     [root@localhost ~]# mkdir    /nsd18/abc01
     [root@localhost ~]# ls   -ld   /nsd18/abc01
     [root@localhost ~]# mkdir   /nsd18/abc02
     [root@localhost ~]# ls   -ld  /nsd18/abc02
     [root@localhost ~]# touch    /nsd18/1.txt
     [root@localhost ~]# ls  -ld  /nsd18/1.txt
Sticky Bit
  • –占用其他人(Other)的 x 位

  • –显示为 t 或 T,取决于其他人是否有 x 权限

  • –适用于目录,用来限制用户滥用写入权

  • –在设置了t权限的目录下,即使用户有写入权限,也不能删除或改名其他用户文档

 [root@localhost ~]# mkdir    /nsd26   
 [root@localhost ~]# chmod  777    /nsd26
 [root@localhost ~]# ls   -ld    /nsd26
 [root@localhost ~]# chmod   o+t    /nsd26
 [root@localhost ~]# ls   -ld    /nsd26

umask默认权限

新建文件/目录的默认权限

  • – 一般文件默认均不给 x 执行权限

  • – 其他取决于 umask(权限掩码) 设置

  • – 新建目录默认权限为755 (777-022)

  • – 新建文件默认权限为644 (777-122)

 # 以八进制数的形式输出创建文件的权限掩码。
 umask -p
 # 执行结果:
 umask 0022
 # 以符号组合的方式输出创建文件的权限掩码。
 umask -S
 # 执行结果:
 u=rwx,g=rx,o=rx

那么刚才以符号形式输出的结果u=rwx,g=rx,o=rx转化为八进制数等于0755

用八进制数来设置同样的权限,umask需要额外的执行减法0777 - 07550022,而chmod不需要。

符号组合模式的添加、删除、赋值权限

 # 添加权限:
 # 为组用户添加写权限。
 umask g+w
 # 删除权限:
 # 删除其他用户的写、执行权限
 umask o-wx
 # 赋值权限:
 # 赋值全部用户所有权限,等价于umask u=rwx,g=rwx,o=rwx
 umask a=rwx
 # 清除其他用户的读、写、执行权限。
 umask o=
 ​

验证:创建文件夹、文件(假设当前目录不存在),查看默认生成的权限

 # 创建文件
 touch test.sh
 # 查看权限,发现执行权限的设置不起作用。
 stat test.sh
 # 创建文件夹
 touch newdir
 # 查看权限,发现执行权限的设置可以起作用。
 stat newdir

【注意】

  1. 该命令是bash内建命令,相关的帮助信息请查看help命令。

  2. chmod用于更改已有对象的权限,umask影响之后新建对象的权限。

  3. 请谨慎使用该命令,特别是不要取消当前用户的读取权限,那样会导致你在终端使用TAB键补全时报错。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值