Linux文件权限管理

1.前言

  在Linux系统中使用权限对系统资源进行管理,既保证了安全性,又方便使用者操作。系统文件的权限有读(r)、写(w)、执行(x)这三种,分别对应的权限数值为4、2 和1。系统为每个文件和目录都设有默认的权限,每个文件中可分为所属用户(u)、所属组用户(g)和其他组用户(o)。
在这里插入图片描述

2.文件权限说明

文件的权限主要针对三类对象进行定义:

owner 属主, u
group 属组, g
other 其他, o

用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即
生效,不再向右查看其权限。
每个文件针对每类访问者都定义了三种权限:

r Readable	读权限
w Writable	写权限
x eXcutable	执行权限

在这里插入图片描述
权限

--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

例如:
rw-r----- 640 
rw-r--r-- 644
rwxr-xr-x 755

3.管理命令

(1)chown

chown 命令可以修改文件的所属用户和所属组
格式:

chown [OPTION] [OWNER]:[GROUP] FILE
chown [OPTION] --reference=RFILE FILE

用法:

OWNER   	#只修改所有者
OWNER:GROUP #同时修改所有者和属组
:GROUP   	#只修改属组,冒号也可用 . 替换
--reference=RFILE  #参考指定的的属性来修改   
-R 			#递归,处理指定目录以及其子目录下的所有文件,此选项慎用,非常危险!

示例:

[root@c7-1 /data]#cp /etc/fstab .
[root@c7-1 /data]#ll
total 4
-rw-r--r-- 1 root root 501 Aug  6 21:13 fstab
[root@c7-1 /data]#chown syhj:syhj fstab 
[root@c7-1 /data]#ll
total 4
-rw-r--r-- 1 syhj syhj 501 Aug  6 21:13 fstab

#按照 f1.txt 的格式来修改 f2.txt
chown --reference=f1.txt f2.txt

(2)chgrp

chgrp 命令可以只修改文件的属组
格式:

 chgrp [OPTION] GROUP FILE
 chgrp [OPTION] --reference=RFILE FILE

示例:

[root@centos8 data]#ll f1.txt
-rw-r--r-- 1 wang root 709 Dec 18 10:13 f1.txt
[root@centos8 data]#chgrp admins f1.txt 
[root@centos8 data]#ll f1.txt
-rw-r--r-- 1 wang admins 709 Dec 18 10:13 f1.txt

(3)chmod

chmod 用来修改文件权限
格式:

chmod [ugoa] [+-=] [rwx] [文件或目录]
chmod [nnn] [文件或目录]		#n为八进制数参考RFILE文件的权限,将FILE的修改为同RFILE
chmod [OPTION] --reference=RFILE FILE

在这里插入图片描述
说明:

[u,g,o,a] 分别代表属主,属组,其他用户,所有用户
[+,-,=]	  添加权限、去除权限、权限相等
[r,w,x]	  读权限、写权限、执行权限

-R: 递归修改目录及其子目录和文件权限

示例:

#将文件 file1.txt 设为所有人皆可读取
chmod ugo+r file1.txt	或	chmod a+r file1.txt

#将文件 file1.txt 与 file2.txt 设为该文件拥有者与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w file1.txt file2.txt

#为 ex1.py 文件拥有者增加可执行权限
chmod u+x ex1.py

#使属主,属组,其他用户都具有 file1 的全部权限
chmod 777 file1

(4)umask

umask 命令指定在建立文件时预设的权限掩码,权限掩码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
格式:

umask [-Sp][权限掩码]

实现方式:

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

普通用户的 umask 默认是 002
root 用户的 umask 默认是 022

持久保存 umask 配置:

  • 全局设置: /etc/bashrc
  • 用户设置:~/.bashrc
参数含义
-S以文字的方式来表示权限掩码
[root@c7-1 ~]#umask
0022
[root@c7-1 ~]#umask -S
u=rwx,g=rx,o=rx
[root@c7-1 ~]#umask -p
umask 0022
[root@c7-1 ~]#touch 1 && mkdir 2
[root@c7-1 ~]#ll
total 0
-rw-r--r-- 1 root root 0 Aug  7 08:49 1
drwxr-xr-x 2 root root 6 Aug  7 08:49 2
#文件 1 的权限为 666-022 = 644
#目录 2 的权限为 777-022 = 755

4.文件特殊权限

文件除了 r,w,x 三种权限之外还有三种特殊权限 SUID,SGID,Sticky

(1)SUID

前提:进程有属主和属组;文件有属主和属组
二进制的可执行文件上SUID权限功能:

  • 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
  • 启动为进程之后,其进程的属主为原程序文件的属主
  • SUID只对二进制可执行程序有效
  • SUID设置在目录上无意义

SUID权限设定:

chmod u+s FILE
chmod 6xxx FILE
chmod u-s FILE

示例:

[root@c7-1 ~]#ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Aug  9  2019 /usr/bin/passwd
[root@c7-1 ~]#touch test
[root@c7-1 ~]#ll
total 0
-rw-r--r-- 1 root root 0 Aug  7 14:47 test
[root@c7-1 ~]#chmod u+s test 
[root@c7-1 ~]#ll
total 0
-rwSr--r-- 1 root root 0 Aug  7 14:47 test

(2)SGID

二进制的可执行文件上SGID权限功能:

  • 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
  • 启动为进程之后,其进程的属组为原程序文件的属组

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

SGID权限设定:

chmod g+s FILE/DIR
chmod 2xxx FILE/DIR
chmod g-s FILE/DIR

示例:

[root@c7-1 ~]#ll
total 0
-rwSr--r-- 1 root root 0 Aug  7 14:47 test
[root@c7-1 ~]#chmod g+s test 
[root@c7-1 ~]#ll
total 0
-rwSr-Sr-- 1 root root 0 Aug  7 14:47 test

#为 user1/2/3 创建一个协作目录,其他普通用户无法操作
groupadd total
mkdir /opt/total
chgrp total /opt/total
chmod 2770 /opt/total
useradd -G total user1
useradd -G total user2
useradd -G total user3
echo "123456" | passwd --stdin user1
echo "123456" | passwd --stdin user2
echo "123456" | passwd --stdin user3

(3)Sticky

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权在目录设置 Sticky 位,只有文件的所有者或 root 可以删除该文件,sticky 设置在文件上无意义

Sticky权限设定:

chmod o+t DIR...
chmod 1xxx DIR
chmod o-t DIR...

示例:

[root@c7-1 ~]#ll
total 0
drwxr-xr-x 2 root root 6 Aug  7 15:00 test
[root@c7-1 ~]#chmod o+t test/
[root@c7-1 ~]#ll
total 0
drwxr-xr-t 2 root root 6 Aug  7 15:00 test

(4)SUID,SGID,Sticky特殊权限数字表示

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

示例:

[root@c7-1 ~]#ll
total 0
-rw-r--r-- 1 root root 0 Aug  7 15:06 test
[root@c7-1 ~]#chmod 7777 test
[root@c7-1 ~]#ll
total 0
-rwsrwsrwt 1 root root 0 Aug  7 15:06 test
[root@c7-1 ~]#chmod 6777 test
[root@c7-1 ~]#ll
total 0
-rwsrwsrwx 1 root root 0 Aug  7 15:06 test
[root@c7-1 ~]#chmod 4777 test
[root@c7-1 ~]#ll
total 0
-rwsrwxrwx 1 root root 0 Aug  7 15:06 test
[root@c7-1 ~]#chmod 2777 test
[root@c7-1 ~]#ll
total 0
-rwxrwsrwx 1 root root 0 Aug  7 15:06 test

5.设定文件的特殊属性

设置文件的特殊属性,可以防止 root 用户误操作删除或修改文件

chattr +i	#不能删除,改名,更改
chattr +a	#只能追加内容,不能删除,改名
lsattr		#显示特定属性

示例:

[root@c7-1 ~]#touch test
[root@c7-1 ~]#ll
total 0
-rw-r--r-- 1 root root 0 Aug  7 15:15 test
[root@c7-1 ~]#chattr +i test 
[root@c7-1 ~]#lsattr test 
----i----------- test
[root@c7-1 ~]#rm -rf test 
rm: cannot remove ‘test’: Operation not permitted
[root@c7-1 ~]#chattr -i test 
[root@c7-1 ~]#rm -rf test 
[root@c7-1 ~]#ll
total 0

6.ACL访问控制列表

  在linux中,文件与目录设置不止基础权限:r,w,x,特殊权限:suid,sgid,sticky,还有文件扩展权限ACL,ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。

  • ACL的作用:让特定用户对特定文件拥有特定权限
  • ACL生效顺序:所有者,自定义用户,所属组|自定义组,其他人
  • CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
  • CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt/test

ACL相关命令:

setfacl		#可以设置 ACL 权限
getfacl 	#可查看设置的 ACL 权限

(1)setfacl

格式:

setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

用法:

  -m, --modify=acl 			更改文件的访问控制列表
  -M, --modify-file=file 	从文件读取访问控制列表条目更改
  -x, --remove=acl 			根据文件中访问控制列表移除条目
  -X, --remove-file=file 	从文件读取访问控制列表条目并删除
  -b, --remove-all 			删除所有扩展访问控制列表条目
  -k, --remove-default 		移除默认访问控制列表
      --set=acl 			设定替换当前的文件访问控制列表
      --set-file=file 		从文件中读取访问控制列表条目设定
      --mask 				重新计算有效权限掩码
  -n, --no-mask 			不重新计算有效权限掩码
  -d, --default 			应用到默认访问控制列表的操作
  -R, --recursive 			递归操作子目录
  -L, --logical 			依照系统逻辑,跟随符号链接
  -P, --physical 			依照自然逻辑,不跟随符号链接
      --restore=file 		恢复访问控制列表,和“getfacl -R”作用相反
      --test 				测试模式,并不真正修改访问控制列表属性
  -v, --version          	显示版本并退出
  -h, --help              	显示本帮助信息

(2)getfacl

格式:

getfacl [-aceEsRLPtpndvh] file ...

用法:

  -a, --access            仅显示文件访问控制列表
  -d, --default           仅显示默认的访问控制列表
  -c, --omit-header       不显示注释表头
  -e, --all-effective     显示所有的有效权限
  -E, --no-effective      显示无效权限
  -s, --skip-base         跳过只有基条目(base entries)的文件
  -R, --recursive         递归显示子目录
  -L, --logical           逻辑遍历(跟随符号链接)
  -P, --physical          物理遍历(不跟随符号链接)
  -t, --tabular           使用制表符分隔的输出格式
  -n, --numeric           显示数字的用户/组标识
  -p, --absolute-names    不去除路径前的 '/' 符号
  -v, --version           显示版本并退出
  -h, --help              显示本帮助信息

(3)范例

[root@c7-1 ~]#ll
total 0
-rw-r--r-- 1 root root 0 Aug  7 15:28 test
[root@c7-1 ~]#getfacl test		#查看 test 文件的权限
# file: test
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@c7-1 ~]#setfacl -m u:syhj:rwx ./test		#设置 syhj 用户对 test 文件的权限
[root@c7-1 ~]#getfacl test 
# file: test
# owner: root
# group: root
user::rw-
user:syhj:rwx
group::r--
mask::rwx
other::r--
[root@c7-1 ~]#ll
total 4
-rw-rwxr--+ 1 root root 21 Aug  7 16:27 test

# mask 表示最大有效权限,特定用户的权限和 mask 的权限做与运算,得到的权限就是特定用户真正的权限,
# 我们一般不更改 mask 权限,只要给予 mask 最大权限 rwx,那么任何权限和 mask 权限相与,得出的值都是权限本身
[root@c7-1 ~]#getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:syhj:rwx
group::r--
mask::rwx
other::r--
[root@c7-1 ~]#setfacl -m mask::rw test
[root@c7-1 ~]#getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:syhj:rwx			#effective:rw- ,通过运算,syhj 用户有效权限为 rw
group::r--
mask::rw-
other::r--

#清除所有ACL权限
setfacl -b file1 

#复制file1的acl权限给file2
getfacl file1 | setfacl --set-file=- file2
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值