文件权限管理

本文详细介绍了Linux系统中文件权限的管理,包括chown、chgrp、chmod操作,umask对新建文件和目录的影响,以及特殊权限如SUID、SGID和Sticky。此外,还讲解了AccessControlList(ACL)的概念、操作和mask权限,以及ACL的备份与还原方法。
摘要由CSDN通过智能技术生成

## 一、文件权限管理

### 1.设置文件的所有者 chown
chown OWNER #只修改所有者
chown OWNER:GROUP #同时修改所有者和属组
chown :GROUP #只修改属组,冒号也可用"."替换

### 2.设置文件的属组信息 chgrp
chgrp 命令可以只修改文件的属组

### 3.修改文件权限 chmod

权限字母表达式授权授权

文件属主授予权限(说明:权限信息可以随意组合 rw rwx rx wx)

添加权限信息    chmod u+[ r / w / x ] 
删除权限信息    chmod u-[ r / w / x ]
设置权限信息    chmod u=[ r / w / x ]

文件属组授予权限
添加权限信息    chmod g+[ r / w / x ]
删除权限信息    chmod g-[ r / w / x ]
设置权限信息    chmod g=[ r / w / x ]

其他用户授予权限
添加权限信息    chmod o+[ r / w / x ]
删除权限信息    chmod o-[ r / w / x ]
设置权限信息    chmod o=[ r / w / x ]

所有用户授予权限
添加权限信息    chmod a+[ r / w / x ]
删除权限信息    chmod a-[ r / w / x ]
设置权限信息    chmod a=[ r / w / x ]

数字表达式授予权限

权限位表示:r        数字表示:4
权限位表示:w        数字表示:2
权限位表示:x        数字表示:1
权限位表示:-        数字表示:0

### 4.新建文件目录权限控制umask

对于root用户, umask数值默认是022
对于普通用户, umask数值默认是002

umask命令参数
umask -p     查看umask数值    
umask -S    按照字母表达式显示

超管用户:root
文件的默认权限:
666  -  022 = 644 
        
目录的默认权限:
777  -  022 = 755 

umask数值如何控制新建文件目录权限
新建文件的默认权限: 666-umask , 如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
新建目录的默认权限: 777-umask

## 二、特殊权限

### 1.特殊权限SUID

SUID作用:其他用户执行命令,以命令文件的属主身份运行命令
(当文件其他用户无查看权限时,给予命令s权限,使用户以命令文件的属主身份运行)

- 必须是可执行(x)的二进制命令文件或者一些脚本文件设定setUID权限
- 命令执行者(当前用户)要对该命令文件拥有执行权限(x)
- 命令的执行者在执行该程序时会以该程序文件的属主身份(在执行程序的过程中灵魂附体为文件的属主)
- setUID权限只在该程序的执行过程中有效,也就是说身份改变只在程序执行过程中有效

SUID设置方法
方法一:chmod u+s  文件
方法二:chmod 4644 文件
suid权限与执行权限位共用, 执行权限位出现小写s表示文件属主有执行权限, 大写S表示文件文件属主没有执行权限

SUID权限执行流程
第一步:判断执行命令用户是否对命令文件拥有执行权限
第二步:判断是否有suid权限, 如果有, 会以命令属主身份执行操作

例:普通用户admin25查看shadow文件
```
[root@centos7 ~]#su - admin25

[admin25@centos7 ~]$ tail /etc/shadow
tail: 无法打开"/etc/shadow" 读取数据: 权限不够

[admin25@centos7 ~]$ ll /etc/shadow
---------- 1 root root 1617 8月  18 15:17 /etc/shadow

[root@centos7 ~]#which tail
/usr/bin/tail

[root@centos7 ~]#chmod u+s /usr/bin/tail

[root@centos7 ~]#ll /usr/bin/tail
-rwsr-xr-x. 1 root root 66824 8月  20 2019 /usr/bin/tail

```

### 2.特殊权限 SGID
SGID作用:其他用户执行命令,以命令文件的属组身份执行

sgid权限作用在文件

只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行在执行程序的时候,组身份升级为该程序文件的属组
SUID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

sgid设置方法

方法一: chmod g+s  文件
方法二: chmod 2644 文件
guid权限与属组执行权限位共用, 执行权限位出现小写s表示文件属组有执行权限, 大写S表示文件文件属组没有执行权限

sgid权限作用在目录

默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有
写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录

### 3.特殊权限 Sticky

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权 

在目录设置Sticky权限位,只有文件的所有者或root可以删除该文件,sticky权限设置在文件上无意义

Sticky权限设置

方法一: chmod o+t  文件
方法二: chmod 1644 文件
sticky权限与其他用户执行权限位共用, 执行权限位出现小写s表示文件其他用户有执行权限, 大写T表示文件其他用户没有执行权限

## 三、隐藏权限

设置文件的特殊隐藏属性,可以访问 root 用户误操作删除或修改文件目录

chattr设置特殊权限

```
chattr -R    递归处理目录下的所有文件
chattr -v    设置文件或目录版本
chattr -V    显示指令执行过程
chattr +    开启文件或目录的该项属性
chattr -    关闭文件或目录的该项属性
chattr =    指定文件或目录的该项属性
```

lsattr查看特殊权限

```
-a     列出目录中的所有文件,包括隐藏文件
-d     只显示目录名称
-R    递归地处理指定目录下的所有文件及子目录
-v     显示文件或目录版本
-D    显示属性的名称、默认值
-E    显示从用户设备数据库中获得属性的当前值
```

隐藏权限模式

chattr +i root用户和所有用户不能删除,移动,重命名文件,修改文件内容
chatrr +a 只能追加内容, 不能删除,移动,重命名文件

## 四、访问控制列表
### 1.ACL功能

ACL:Access Control List,实现灵活的权限管理 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限 

CentOS7 默认创建的xfs和ext4文件系统具有ACL功能 

CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

### 2.ACL相关操作

setfacl用于设置ACL权限

```
格式: setfacl -m     [u / g]:user:[rwx] 文件
setfacl -m
设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 "u:用户名:权限" 的格式,
例如 setfacl -m u:st:rx /project 表示设定 st 用户对 project 目录具有 rx 权限

如果是给予组 ACL 权限,参数则使用 "g:组名:权限" 格式,
例如 setfacl -m g:tgroup:rx /project 表示设定群组 tgroup 对 project 目录具有 rx 权限。

setfacl -x
删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,
例如 setfacl -x u:st /project 表示删除 st 用户对 project 目录的 ACL 权限。

setfacl -b
删除所有的 ACL 权限,例如 setfacl -b /project 表示删除有关 project 目录的所有 ACL 权限

setfacl -R
递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效
命令格式为 "setfacl -m u:用户名:权限 -R 文件名"(群组使用 g:群组名:权限)
例如 setfacl -m u:st:rx -R /project 表示 st 用户对已存在于 project 目录中的子文件和子目录拥有 rx 权限。

===================================================================================================
setfacl -d 
对目录下创建新文件默认 ACL 权限,命令格式为 "setfacl -m d:u:用户名:权限 文件名"(如果是群组,则使用 d:g:群组名:权限)
只对目录生效,指目录中新建立的文件拥有此默认权限
例如 setfacl -m d:u:st:rx /project 表示 st 用户对 project 目录中新建立的文件拥有 rx 权限。

setfacl -k 
删除默认 ACL 权限
```

getfacl用于查看ACL权限

```sh
-a    显示文件的ACL
-d    显示默认的ACL
-c    不显示注释标题
-e    显示所有的有效权限
-E    显示没有的有效权限
-R    递归到子目录
```

### 3.mask权限

一旦设置了ACL权限,就会产生一个mask权限代替group所属组权限,默认权限是rw
mask只影响除所有者和other的之外的人和组的最大权限
用户或组的设置ACL权限必须是小于或者等于mask权限,否则mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

### 4.ACL备份与还原

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息

```
#备份ACL
getfacl -R /tmp/dir > acl.txt
#消除ACL权限
setfacl -R -b /tmp/dir
#还原ACL权限,注意按照文件最后一个ACL权限进行还原
setfacl -R  --set-file=acl.txt /tmp/dir
#还原ACL权限
setfacl --restore acl.txt
#查看ACL权限
getfacl -R /tmp/dir
```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值