linux-文件基本权限归属管理


1 文件基本权限及归属

1.1 权限和归属

基本权限

  • r 指read 读取-允许查看内容
  • w 指write 写入-允许修改内容
  • x 指excute可执行-允许运行和切换
种类普通文件目录
rcat less head tail查看目录内容 ls
wvim > >>新建/删除/改名 mkdir rm mv
x学习Shell脚本切换到目录 cd

共同决定最终权限

归属关系

  • u 所有者 : 拥有此文件/目录的用户-user
  • g 所属组 : 拥有此文件/目录的组- group
  • o 其他用户: 除所有者/所属组以外的用户 - other

查看权限归属

[[root@baidu /]# ls -l
total 28
lrwxrwxrwx.   1 root root    7 Aug 12  2018 bin -> usr/bin
dr-xr-xr-x.   6 root root 4096 Mar 31 07:40 boot
   //        //  //   //    //       //       //       //                                
权限位 硬连接数 所有者 属组 大小(字节) 修改时间  文件名称 符号链接(快捷方式)的内容
# dr-xr-xr-x.  第1个字符为文件类型(-普通(含文本)文件,d目录,l符号链接文件,b块特殊文件,c字符文件,p先进先出特殊文件,s本地套接字)
#  r-xr-xr-x 剩余9个字符,三集合,第一个3字符为所有者许可权,第二个为组中其它用户的许可权,第三个访问此文件的其他任何人的许可权         
#  r 读   w写(编辑)  x可执行(搜索)  -没有授予相应的许可权
# ‘ . ’字符表示具有安全上下文的文件,但没有其他替代访问方法

# 硬连接数 对于文件是硬链接数量   ,, 对于目录文件指的是子目录文件数量
  • root超级管理员,具有文件的一切权限
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EphHYpTz-1591624293689)(0BFFF35C82CA4D24B31EE64CF124E182)]

在根目录下,默认/tmp目录具有特殊权限???不是全部特权,仅归属用用户或属组的文件才能进行wx操作,是t特权

# 权限 777  ,最后一位位t,,特殊权限
[root@nb /]# ls -ld /tmp/
drwxrwxrwt. 27 root root 4096 Jun  6 12:49 /tmp/
[root@nb tmp]# ls -ld /var/tmp
drwxrwxrwt. 9 root root 4096 6月   6 10:45 /var/tmp
[root@nb tmp]# 

回到目录

1.2 权限控制

chmod设置基本权限

  • chmod [ugoa] [±=] [rwx] 文件
    • 使用g=时当遇见-时后面失效
    • 如设置chmod g=r-x /opt/learing 属组权限为r–
[root@server1 ~]# ls -ld /opt/learning
drwxrw-rwx. 2 root root 6 Jun  7 18:12 /opt/learning    #原有属组rw-
[root@server1 ~]# chmod g=r-x /opt/learning             #设置g=r-x
[root@server1 ~]# ls -ld /opt/learning
drwxr--rwx. 2 root root 6 Jun  7 18:12 /opt/learning    #实际属组r-- ,x设置不成功,
#可直接 chmod g=rx 即可
  • a 指all 包括ugo
  • o 其他用户拥有w权限后,文件会变绿
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hBBRw03r-1591624293691)(A7057036990E4622B406D2D688ED0EC2)]
  • 针对目录
    • r 查看目录内容
    • w 新建/删除/改名,该目录的内容(子目录及文件),而对目录本身无法进行修改

    • x 执行权限,切换到此目录 ,关系到用户能否切换(cd)到此目录
      • 目录无x权限,目录下子文件也无法操作
      • 只给一个w权限,是无效(不能进行新建/删除/改名 的操作),至少需要wx权限
[yyn@server1 ~]$ ls -ld /opt/learning                       #opt/learing无x权限
drwxr--rw-. 4 root root 33 Jun  7 19:10 /opt/learning/
[yyn@server1 ~]$ cd /opt/learning/
-bash: cd: /opt/learning/: Permission denied                #不能切换
[yyn@server1 ~]$ mv /opt/learning/nyy /opt/learning/y       #不能改名
mv: failed to access '/opt/learning/y': Permission denied
[yyn@server1 ~]$ ls -ld /opt/learning/yyn                   #不能访问子目录文件
ls: cannot access '/opt/learning/yyn': Permission denied
[yyn@server1 ~]$ ls /opt/learning/                          #只能查看本目录下第一层内容
ls: cannot access '/opt/learning/nyy': Permission denied
ls: cannot access '/opt/learning/root-yyn': Permission denied
nyy  root-yyn

  • 只给一个x权限,除除目录本身不能rw,其子目录文件仍为自身权限
[yyn@server1 ~]$ ls -ld /opt/learning                       #/opt/learning 的其他权限只有x 
drwxr----x. 4 root root 33 Jun  7 19:10 /opt/learning/
[yyn@server1 ~]$ mkdir -p /opt/learning/yyn000              #不能创建子目录
mkdir: cannot create directory ‘/opt/learning/yyn000’: Permission denied
#已有子目录下文件保持原有权限
[yyn@server1 ~]$ ls /opt/learning/nyy                       
[yyn@server1 ~]$ cd /opt/learning/nyy                       #切换已有子文件
[yyn@server1 nyy]$ ls /opt/learning/nyy                     #查看
[yyn@server1 nyy]$ mkdir -p /opt/learning/nyy/text          #新建已有文件的子文件
[yyn@server1 nyy]$ ls -ld /opt/learning/nyy/text            
drwxrwxr-x. 2 yyn yyn 6 Jun  7 19:30 /opt/learning/nyy/text
[yyn@server1 nyy]$ ls -ld /opt/learning/nyy                 
drwxrwxr-x. 3 yyn yyn 18 Jun  7 19:30 /opt/learning/nyy

[yyn@server1 nyy]$ ls -ld /opt/learning/root-yyn            
drwxr-xr-x. 2 root root 6 Jun  7 19:09 /opt/learning/root-yyn
[yyn@server1 nyy]$ mv /opt/learning/root-yyn /opt/learning/root-mv
mv: cannot move '/opt/learning/root-yyn' to '/opt/learning/root-mv': Permission denied
[yyn@server1 nyy]$ 
  • -R o=- 递归设置权限
// 递归设置其他用户的文件权限
[root@nb ~]# mkdir -p /opt/aa/bb/cc/dd
[root@nb ~]# chmod -R o=--- /opt/aa                 //递归设置其他o=---
[root@nb ~]# ls -ld /opt/aa                         //目录及其子目录均设为o为---,而不是默认属性r-x
drwxr-x---. 3 root root 16 Jun  6 10:27 /opt/aa
[root@nb ~]# ls -ld /opt/aa/bb
drwxr-x---. 3 root root 16 Jun  6 10:27 /opt/aa/bb
[root@nb ~]# ls -ld /opt/aa/bb/cc
drwxr-x---. 3 root root 16 Jun  6 10:27 /opt/aa/bb/cc
[root@nb ~]# ls -ld /opt/aa/bb/cc/dd
drwxr-x---. 2 root root 6 Jun  6 10:27 /opt/aa/bb/cc/dd
[root@nb ~]# 

权限位的8进制数

  • r 对应4
  • w 对应2
  • x 对应1
  • 使用数字权限形式
[root@nb /]# mkdir /nsd04
[root@nb /]# ls -ld /nsd04
drwxr-xr-x. 2 root root 6 Jun  6 11:45 /nsd04
[root@nb /]# chmod 750 /nsd04
[root@nb /]# ls -ld /nsd04
drwxr-x---. 2 root root 6 Jun  6 11:45 /nsd04

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XYT3xVOH-1591624293692)(061DF22D721E45E39DFC9684B170DA68)]

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

  • 普通(文本/二进制/数据)文件默认均不给x执行权限,其默认为644(root用户)或664(普通)
//root用户文本文件默认644
[root@server1 ~]# touch /opt/txt.txt
[root@server1 ~]# ls -ld /opt/txt.txt
-rw-r--r--. 1 root root 0 Jun  7 19:56 /opt/txt.txt
//二进制文件
[root@server1 ~]# ls -ld /etc/passwd
-rw-r--r--. 1 root root 2577 Jun  7 18:11 /etc/passwd
[root@server1 ~]# umask
0022

//普通用户文本文件默认664
[yyn@server1 nyy]$ touch /home/yyn/text.txt
[yyn@server1 nyy]$ ls -ld /home/yyn/text.txt
-rw-rw-r--. 1 yyn yyn 0 Jun  7 20:08 /home/yyn/text.txt
[yyn@server1 nyy]$ umask
0002
  • 目录文件默认权限为755(root)或775(普通用户)
  • 默认取决于umask值设置
//因umask值设置原因,root超级用户新建文件/目录的默认权限为755
[root@nb /]# umask  //第一个0特殊权限,,022位777-022=755
0022      
[root@nb /]# umask -S 
u=rwx,g=rx,o=rx
[root@nb /]# 

[yyn@server1 ~]$ umask
0002
[yyn@server1 ~]$ umask -S  //普通用户默认新建目录775
u=rwx,g=rwx,o=rx
[yyn@server1 ~]$ ls -ld /home/yyn/test
drwxrwxr-x. 2 yyn yyn 6 Jun  7 20:15 /home/yyn/test

回到目录

1.3 归属控制

chown设置归属关系

  • chown 属主 文件…
  • chown 属主:属组 文件…
  • chown :属组 文件…
  • -R 递归修改,子目录权限

属主指所有者,属组为所属组(???组)

[root@nb ~]# mkdir /chown-test
[root@nb ~]# ls -ld /chown-test/
drwxr-xr-x. 2 root root 6 6月   6 14:11 /chown-test/
[root@nb ~]# groupadd tmooc
[root@nb ~]# chown yyn:tmooc /chown-test/       //chown 属主:属组 文件...
[root@nb ~]# ls -ld /chown-test/
drwxr-xr-x. 2 yyn tmooc 6 6月   6 14:11 /chown-test/
//更改文件/chown-test的所有者(所属主)
[root@nb ~]# chown root /chown-test/            //chown 属主  文件...
[root@nb ~]# ls -ld /chown-test/
drwxr-xr-x. 2 root tmooc 6 6月   6 14:11 /chown-test/
//更改文件/chown-test的所属组()
[root@nb ~]# chown :boy /chown-test/            //chown :属组 文件...
[root@nb ~]# ls -ld /chown-test/
drwxr-xr-x. 2 root boy 6 6月   6 14:11 /chown-test/
[root@nb ~]# 

Linux系统的权限判定

  • 判断用户对于数据所处的身份
    • 所有者 → 所属组 → 其他人 ,匹配即停止
  • 查看相应身份权限位
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PaN1uoR7-1591624293694)(44A6737C23AC46EFA685D76B6CA0D635)]
  • 用户加入组,继承组所有权限,不会立即生效,需要重新登录后才能生效
  • 所有者没有x权限,所属组具有x权限,不能切换到目录
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q8H7myUL-1591624293696)(8BFFDE62A8C04FCEB6B189A55C42FDE0)]

2 附加权限

特殊权限的作用

  • 特殊权限: 叠加于权限u/g/o分组之上
  • 用于传递程序执行身份/限制目录写入权

Set UID

  • 占用属主(User)的 x 位
  • 显示为 s 或 S,取决于属主是否有 x 权限
  • 仅对可执行的程序有意义
  • 当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应权限

仅仅了解

Set GID

  • 占用属组(Group)的x(权限)位
  • 显示为s或S ,取决于属组是否有x权限
    • s 为覆盖的属组有x权限
    • S 没有x权限
  • 对目录有效
  • 在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份
  • chmod g+s 目录
    • 如chmod g+s /nsd15/
[root@nb /]# mkdir /nsd15       
[root@nb /]# chown :tmooc /nsd15        //修改所属组
[root@nb /]# ls -ld /nsd15
drwxr-xr-x. 2 root tmooc 6 6月   6 15:28 /nsd15
[root@nb /]# mkdir /nsd15/test01
[root@nb /]# ls -ld /nsd15/test01
drwxr-xr-x. 2 root root 6 6月   6 15:29 /nsd15/test01
[root@nb /]# chmod g+s /nsd15/          //设置SETGID
[root@nb /]# ls -ld /nsd15/
drwxr-sr-x. 3 root tmooc 20 6月   6 15:29 /nsd15/
[root@nb /]# mkdir /nsd15/test02
[root@nb /]# ls -ld /nsd15/test02       //查看所属组信息
drwxr-sr-x. 2 root tmooc 6 6月   6 15:30 /nsd15/test02
[root@nb /]# touch /nsd15/1.txt
[root@nb /]# ls -l /nsd15/1.txt
-rw-r--r--. 1 root tmooc 0 6月   6 15:31 /nsd15/1.txt
[root@nb /]# mkdir /nsd15/test02/aaa
[root@nb /]# ls -ld /nsd15/test02/aaa   //查看二层子目录所属组信息
drwxr-sr-x. 2 root tmooc 6 6月   6 15:31 /nsd15/test02/aaa
[root@nb /]# 

Sticky Bit粘滞位

  • 粘滞位,Sticky Bit权限(t权限)
    • [root@nb /]# ls -ld /tmp/
      drwxrwxrwt. 27 root root 4096 6月 6 15:37 /tmp/
    • 权限位中的t 表示为其他用户在/tmp目录下没有别人创建的子目录文件的w权限
    • 允许任何人写入,但禁止更改其他用户的文件
  • 占用其他人(Other)的 x 位
  • 显示t 或 T ,取决于其他人是否有 x 权限,如type为f/无则为 T
  • 适用于目录, 用来限制用户滥用写入权
  • 在设置了粘滞位的文件夹下,即使用户有写入权限,也不能删除或改名其他用户文档
[redhat@server1 ~]$ ls -ld /tmp             //目录/tmp具有t权限
drwxrwxrwt. 18 root root 4096 Jun  7 21:00 /tmp

[redhat@server1 ~]$ ls -ld /tmp/yyn/        //属主yyn属组yyn的目录/tmp/yyn
drwxrwxr-x. 2 yyn yyn 6 Jun  7 20:57 /tmp/yyn/
[redhat@server1 ~]$ mv /tmp/yyn/ /tmp/redhat //用户redhat无法重命名yyn目录
mv: cannot move '/tmp/yyn/' to '/tmp/redhat': Operation not permitted
[redhat@server1 ~]$ 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T9kXrRcn-1591624293697)(20699F735BCA4AD5AFFB6CD0872EAB90)]

特殊t权限示例

# 1  设置777权限 以及t权限
[root@nb /]# mkdir /nsd16
[root@nb /]# ls -ld /nsd16
drwxr-xr-x. 2 root root 6 6月   6 15:46 /nsd16
[root@nb /]# ls -ld /nsd16          //查看目录nsd16权限
drwxr-xr-t. 2 root root 6 6月   6 15:46 /nsd16
[root@nb /]# chmod 777 /nsd16       //设置目录全部权限
[root@nb /]# ls -ld /nsd16
drwxrwxrwx. 2 root root 6 6月   6 15:46 /nsd16
[root@nb /]# chmod o+t /nsd16   //设置t权限
[root@nb /]# ls -ld /nsd16
drwxrwxrwt. 2 root root 6 6月   6 15:46 /nsd16
[root@nb /]# 
  • 两个用户操作同一个目录验证
2 gelin用户验证
[gelin01@nb ~]$ ls -ld /nsd16
drwxrwxrwt. 2 root root 38 6月   6 15:49 /nsd16
[gelin01@nb ~]$ echo 222 > /nsd16/gelin.txt
[gelin01@nb ~]$ cat /nsd16/gelin.txt
222
[gelin01@nb ~]$ echo 333 > /nsd16/yyn.txt  //无法改其他人文件
-bash: /nsd16/yyn.txt: 权限不够
[gelin01@nb ~]$ ls -ld /nsd16/yyn.txt 
-rw-rw-r--. 1 yyn yyn 4 6月   6 15:52 /nsd16/yyn.txt
# 3 yyn用户验证
[yyn@nb ~]$ echo 111 > /nsd16/gelin.txt
-bash: /nsd16/gelin.txt: 权限不够
[yyn@nb ~]$ echo 111 > /nsd16/yyn.txt 
[yyn@nb ~]$ cat /nsd16/yyn.txt
111

回到目录

3 ACL策略管理

ACL策略的作用

  • 文档归属的局限性
    • 任何人只属于3种角色: 属主/属组/其他人
    • 无法更精细的控制
  • acl访问策略
    • 能够对个别用户/个别组设置独立的权限
    • 大多数挂载的EXT3/4、XFS文件系统默认已支持

定义ACL控制策略

  • setfacl命令
  • set file access control list ,即“设置文件访问控制列表”
  • 格式 setfacl [参数][文件]
    • setfacl [选项] u:用户名:权限 文件…
    • setfacl [选项] g:用户名:权限 文件…
  • 常用命令选项
  • -m modify定义一条ACL策略
  • -x 清除指定的ACL策略
  • -b 清除所有已设置的ACL策略
  • -R 递归设置ACL策略

设置ACL权限

setfack -m u:[用户]:[rwx]

# 用户yyn针对/nsd15设置acl权限,,实现单独设置
[root@nb /]# id yyn
uid=1001(yyn) gid=1001(yyn) 组=1001(yyn)
[root@nb /]# chmod o=--- /nsd15
[root@nb /]# setfacl -m u:yyn:rx /nsd15       #添加用户yyn对文件的rx权限
[root@nb /]# getfacl /nsd15
getfacl: Removing leading '/' from absolute path names
# file: nsd15
# owner: root
# group: tmooc
# flags: -s-
user::rwx
user:yyn:r-x
group::r-x
mask::r-x
other::---

[root@nb /]# su - yyn  #验证
上一次登录:六 6月  6 15:45:42 CST 2020pts/1 上
[yyn@nb ~]$ cd /nsd15
[yyn@nb nsd15]$ pwd
/nsd15
[yyn@nb nsd15]$ exit
登出
//三个用户设置acl
[root@nb /]# mkdir /nsd18
[root@nb /]# setfacl -m u:yyn:rwx /nsd18   #设置acl
[root@nb /]# setfacl -m u:yyn1:rx /nsd18
[root@nb /]# setfacl -m u:gelin01:rx /nsd18
// 查看acl
[root@nb /]# getfacl /nsd18
getfacl: Removing leading '/' from absolute path names
# file: nsd18
# owner: root
# group: root
user::rwx
user:yyn:rwx
user:yyn1:r-x
user:gelin01:r-x
group::r-x
mask::rwx
other::r-x

// 清除单个用户acl
[root@nb /]# setfacl -x u:yyn /nsd18
[root@nb /]# setfacl -x u:gelin01 /nsd18
[root@nb /]# getfacl /nsd18
getfacl: Removing leading '/' from absolute path names
# file: nsd18
# owner: root
# group: root
user::rwx
user:yyn1:r-x
group::r-x
mask::r-x
other::r-x

//清除所有用户acl
[root@nb /]# setfacl -b /nsd18
[root@nb /]# getfacl /nsd18
getfacl: Removing leading '/' from absolute path names
# file: nsd18
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@nb /]# 
  • 某文件为全局权限777,但单独拒绝某个人
[root@nb /]# mkdir /public
[root@nb /]# chmod 777 /public
[root@nb /]# setfacl -m u:yyn:- /public
[root@nb /]# getfacl /public
getfacl: Removing leading '/' from absolute path names
# file: public
# owner: root
# group: root
user::rwx
user:yyn:---
group::rwx
mask::rwx
other::rwx

[root@nb /]# 
  • 禁止某用户对某目录有任何权限,但不影响其他用户对此目录的访问,直接设置setfacl u:[某用户]:- [目录]

回到目录

练习:

例1:chmod权限设置

  1. 以root用户新建/nsddir/目录,在该目录下新建文件readme.txt
  2. 使用户zhangsan能够在/nsddir/目录下创建/删除子目录
  3. 使用户zhangsan能够修改/nsddir/readme.txt文件的内容

案例2:chown归属设置

  1. 新建/tarena1目录
    a)将属主设为gelin01,属组设为tarena组
    b)使用户gelin01对此目录具有rwx权限,其他人对此目录无任何权限

  2. 使用户gelin02能进入、查看/tarena1文件夹(提示:将gelin02加入所属组)

  3. 新建/tarena2目录
    a)将属组设为tarena
    b)使tarena组的任何用户都能在此目录下创建、删除文件

  4. 新建/tarena/public目录
    a)使任何用户对此目录都有rwx权限
    b)拒绝zhangsan进入此目录,对此目录无任何权限(提示:ACL单独拒绝)

案例3:权限设置

  1. 创建文件夹/data/test,设置目录的访问权限,使所有者和所属组具备读写执行的权限;其他人无任何权限。
  2. 递归修改文件夹/data/test的归属使所有者为zhangsan,所属组为tarena。
  3. 请实现在test目录下,新建的所有子文件或目录的所属组都会是tarena。
  4. 为lisi创建ACL访问权限,使得lisi可以查看/etc/shadow文件

案例4:虚拟机上操作

  • 将文件 /etc/fstab 拷贝为 /var/tmp/fstab,并调整文件 /var/tmp/fstab权限 满足以下要求:
    • 此文件的拥有者是 root
    • 此文件对任何人都不可执行
    • 用户 natasha 能够对此文件具备读和写操作
    • 用户 harry 对此文件既不能读,也不能写

案例5:虚拟机上操作

  • 创建一个共用目录 /home/admins,要求如下:
    • 此目录的所属组是 adminuser
    • adminuser 组的成员对此目录有读写和执行的权限,并且其他用户没有任何权限
    • 在此目录中创建的文件,其所属组会自动设置为 属于 adminuser 组
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值