06.文件权限管理

发布于:2025-08-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

文件权限管理

1. chown

★ 修改文件的属主,也可以修改文件属组
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

★ 用法说明
OWNER   		# 只修改所有者
OWNER:GROUP 	# 同时修改所有者和属组
:GROUP   		# 只修改属组,冒号也可用 . 替换

-c|--changes          # 同-v选项,但只显示更新成功的信息
-f|--silent|--quiet   # 不显示错误信息
-v|--verbose          # 显示过程
--dereference         # 修改的是符号链接指向的文件,而不是链接文件本身
-h|--no-dereference   # 修改的是符号链接文件,而不是其指向的目标文件(只有当前系统支持修改符号链接文件属性时,此项才有效)
--from=user:group     # 根据原属主属组来修改,相当于一个查询条件
--no-preserve-root    # 不特别对待“/”,意思就是将根目录当成普通目录来执行,默认如此,所以不要对根目录进行操作
--preserve-root       # 不允许在"/"上递归操作
--reference=RFILE     # 根据其它文件权限来操作,就是复制该文件的属主属组信息给指定文件
-R|--recursive        # 递归操作

下列选项配合 -R 使用
-H                    # 如果参数是指向目录的软链接,则只修改指向的目录,不改变目录里面文件的属主属组
-L                    # 更改所有遇到的符号链接指向的目录
-P                    # 不更改符号链接指向的目录

★ 修改属主
[root@rocky8 day4]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 30 21:10 a1.txt
-rw-r--r--. 1 root root 0 Jan 30 21:10 a2.txt
-rw-r--r--. 1 root root 0 Jan 30 21:10 a3.txt
[root@rocky8 day4]# chown nan a1.txt  # 只修改属主
[root@rocky8 day4]# chown nan. a2.txt # 同时修改属主和属组
[root@rocky8 day4]# chown nan: a3.txt # 同时修改属主和属组
[root@rocky8 day4]# ll
total 0
-rw-r--r--. 1 nan root 0 Jan 30 21:10 a1.txt
-rw-r--r--. 1 nan nan  0 Jan 30 21:10 a2.txt
-rw-r--r--. 1 nan nan  0 Jan 30 21:10 a3.txt
上述写法,使用的组,是属主用户的主组

★ 使用UID来修改属主,UID不支持省略写法
[root@rocky8 day4]# id nan
uid=1000(nan) gid=1000(nan) groups=1000(nan)
[root@rocky8 day4]# chown 1000 a4.txt 
[root@rocky8 day4]# chown 1000. a5.txt 
chown: invalid user: ‘1000.’
[root@rocky8 day4]# chown 1000: a6.txt 
chown: invalid spec: ‘1000:’
[root@rocky8 day4]# ll a4.txt a5.txt a6.txt
-rw-r--r--. 1 nan  root 0 Jan 30 21:22 a4.txt
-rw-r--r--. 1 root root 0 Jan 30 21:22 a5.txt
-rw-r--r--. 1 root root 0 Jan 30 21:22 a6.txt

★ 修改属组
[root@rocky8 day4]# ll b*
-rw-r--r--. 1 root root 0 Jan 30 21:27 b1.txt
-rw-r--r--. 1 root root 0 Jan 30 21:27 b2.txt
-rw-r--r--. 1 root root 0 Jan 30 21:27 b3.txt
-rw-r--r--. 1 root root 0 Jan 30 21:27 b4.txt
-rw-r--r--. 1 root root 0 Jan 30 21:27 b5.txt
-rw-r--r--. 1 root root 0 Jan 30 21:27 b6.txt
以组名修改
[root@rocky8 day4]# chown .nan b1.txt 
[root@rocky8 day4]# chown :nan b2.txt 
[root@rocky8 day4]# ll b1.txt b2.txt 
-rw-r--r--. 1 root nan 0 Jan 30 21:27 b1.txt
-rw-r--r--. 1 root nan 0 Jan 30 21:27 b2.txt
以GID修改
[root@rocky8 day4]# chown .1000 b4.txt 
[root@rocky8 day4]# chown :1000 b5.txt 
[root@rocky8 day4]# ll b4.txt b5.txt 
-rw-r--r--. 1 root nan 0 Jan 30 21:27 b4.txt
-rw-r--r--. 1 root nan 0 Jan 30 21:27 b5.txt

★ 同时修改
[root@rocky8 day4]# ll c*
-rw-r--r--. 1 root root 0 Jan 30 21:33 c1.txt
-rw-r--r--. 1 root root 0 Jan 30 21:33 c2.txt
-rw-r--r--. 1 root root 0 Jan 30 21:33 c3.txt
-rw-r--r--. 1 root root 0 Jan 30 21:33 c4.txt
[root@rocky8 day4]# chown nan:tom c1.txt 
[root@rocky8 day4]# chown nan:123 c2.txt 
[root@rocky8 day4]# chown 456:123 c3.txt 
[root@rocky8 day4]# chown nan:nogroup c4.txt 
chown: invalid group: ‘nan:nogroup’
[root@rocky8 day4]# ll c*
-rw-r--r--. 1 nan  tom  0 Jan 30 21:33 c1.txt
-rw-r--r--. 1 nan   123 0 Jan 30 21:33 c2.txt
-rw-r--r--. 1  456  123 0 Jan 30 21:33 c3.txt
-rw-r--r--. 1 root root 0 Jan 30 21:33 c4.txt

★ 根据文件修改
[root@rocky8 day4]# ll f*
-rw-r--r--. 1  111  222 0 Jan 30 21:38 f1.txt
-rw-r--r--. 1 root root 0 Jan 30 21:38 f2.txt
[root@rocky8 day4]# chown --reference=f1.txt f2.txt 
[root@rocky8 day4]# ll f*
-rw-r--r--. 1 111 222 0 Jan 30 21:38 f1.txt
-rw-r--r--. 1 111 222 0 Jan 30 21:38 f2.txt

2. chgrp

★ 修改文件的属组(设置文件的属组信息)
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...

-c|--changes          # 同-v选项,但只显示更新成功的信息
-f|--silent|--quiet   # 不显示错误信息
-v|--verbose          # 显示过程
--dereference         # 修改的是符号链接指向的文件,而不是链接文件本身
-h|--no-dereference   # 修改的是符号链接文件,而不是其指向的目标文件(只有当前系统支持修改符号链接文件属性时,此项才有效)
--no-preserve-root    # 不特别对待“/”,意思就是将家目录当成普通目录来执行,默认如此,所以不要对根目录进行操作
--preserve-root       # 不允许在"/"上递归操作
--reference=RFILE     # 根据其它文件权限来操作,就是复制该文件的属主属组信息给指定文件
-R|--recursive        # 递归操作

下列选项配合 -R 使用
-H                    # 如果参数是指向目录的软链接,则只修改指向的目录,不改变目录里面文件的属主属组
-L                    # 更改所有遇到的符号链接指向的目录
-P                    # 不更改符号链接指向的目录

[root@rocky8 day4]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 30 21:42 f1.txt
-rw-r--r--. 1 root root 0 Jan 30 21:42 f2.txt
[root@rocky8 day4]# chgrp nan f1.txt 
[root@rocky8 day4]# chgrp 123 f2.txt 
[root@rocky8 day4]# ll
total 0
-rw-r--r--. 1 root nan 0 Jan 30 21:42 f1.txt
-rw-r--r--. 1 root 123 0 Jan 30 21:42 f2.txt

3. chmod

★ 修改文件权限
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

-c|--changes         # 同-v选项,但只显示更新成功的信息
-f|--silent|--quiet  # 不显示错误信息
-v|--verbose         # 显示过程
--no-preserve-root   # 不特别对待“/”,意思就是将家目录当成普通目录来执行,默认如此,所以不要对根目录进行操作
--preserve-root      # 不允许在"/"上递归操作
--reference=RFILE    # 根据其它文件权限来操作,就是复制该文件的权限信息给指定文件
-R|--recursive       # 递归操作

★ MODE
who opt permisson
who 		# u|g|o|a
opt 		# +|-|=
permission  # r|w|x

u+r 	# 属主加读权限
g-x     # 属组去掉执行权限
ug=rx   # 属主属组权限改为读和执行
o=     	# other用户无任何权限   
a=rwx   # 所有用户都有读写执行权限

★ 注意:
用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向右查看其权限
r和w权限对root 用户无效,对没有读写权限的文件,root用户也可读可写
只要所有者,所属组或other三者之一有x权限,root就可以执行

[root@rocky8 day4]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 30 21:54 f1
-rw-r--r--. 1 root root 0 Jan 30 21:54 f2
-rw-r--r--. 1 root root 0 Jan 30 21:54 f3
-rw-r--r--. 1 root root 0 Jan 30 21:54 f4
[root@rocky8 day4]# chmod a= f1
[root@rocky8 day4]# chmod u=r,g=w,o=x f2
[root@rocky8 day4]# chmod u+w,g-x,o-r f3
[root@rocky8 day4]# chmod a=rwx f4
[root@rocky8 day4]# ll
total 0
----------. 1 root root 0 Jan 30 21:54 f1
-r---w---x. 1 root root 0 Jan 30 21:54 f2
-rw-r-----. 1 root root 0 Jan 30 21:54 f3
-rwxrwxrwx. 1 root root 0 Jan 30 21:54 f4

[root@rocky8 day4]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 30 21:59 a1
-rw-r--r--. 1 root root 0 Jan 30 21:59 a2
-rw-r--r--. 1 root root 0 Jan 30 21:59 a3
[root@rocky8 day4]# chmod 644 a1
[root@rocky8 day4]# chmod 0 a2
[root@rocky8 day4]# chmod 777 a3
[root@rocky8 day4]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 30 21:59 a1
----------. 1 root root 0 Jan 30 21:59 a2
-rwxrwxrwx. 1 root root 0 Jan 30 21:59 a3

4. umask

★ 新建文件和目录的默认权限
   新建文件:666-umask,按位对应相减,如果所得结果某位存在执行(奇数)权限,则该位+1;
   新建目录:777-umask;

umask [-p] [-S] [mode]
显示或设定文件模式掩码。
-p    # 如果省略 MODE 模式,以可重用为输入的格式输入
-S    # 以字符显示

★ 查看umask
[root@rocky8 0626]# umask
0022
[root@rocky8 0626]# umask -p
umask 0022
[root@rocky8 0626]# umask -S
u=rwx,g=rx,o=rx

★ 修改umask
[root@rocky8 0626]# umask 123
[root@rocky8 0626]# umask 
0123
[root@rocky8 0626]# umask u=rw,g=r,o=
[root@rocky8 0626]# umask
0137

非特权用户umask默认是 002
root的umask 默认是 022

持久保存umask
 1.全局设置: /etc/bashrc , /etc/bash.bashrc(ubuntu)
 2.用户设置:~/.bashrc

5. chattr

★ 设定文件特殊属性
chattr [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...

-p project 	# 设置文件项目编号
-R     		# 递归执行
-V     		# 显示过程,并输出chattr 版本
-f     		# 不输出错误信息
-v version 	# 设置版本

操作符
+attribute 	# 添加该属性
-attribute 	# 去掉该属性
=attribute 	# 仅有该属性

常用属性
a 	# 对文件:可追加内容,不可被删除,不可被修改,不可被重命名;对目录,可新建,修改文件,但不可删除文件
A 	# 不更新atime,节省IO
c 	# 文件会被压缩保存
i 	# 对文件:不可被删除不可被修改不可重命名;对目录:可修改查看目录中的文件,不可新建文件,不可删除文件
s 	# 彻底删除文件,用0填充原来的数据块
u 	# 防止误删除,这里是指原来存储该文件的块不会被新的数据覆盖

★ 补充:
显示文件特殊属性
lsattr [-RVadlpv] [files...]

★ +i 防止误删除
[root@rocky8 ~]# echo "abcd">a.txt
[root@rocky8 ~]# chattr +i a.txt 
[root@rocky8 ~]# ll a.txt 
-rw-r-----. 1 root root 5 Jun 26 14:43 a.txt
[root@rocky8 ~]# lsattr a.txt 
----i--------------- a.txt
不可删除
[root@rocky8 ~]# rm -f a.txt 
rm: cannot remove 'a.txt': Operation not permitted
不可覆盖
[root@rocky8 ~]# echo "1234" > a.txt 
-bash: a.txt: Operation not permitted
不可追加
[root@rocky8 ~]# echo "1234" >> a.txt 
-bash: a.txt: Operation not permitted
不可移动
[root@rocky8 ~]# mv a.txt /tmp/
mv: cannot move 'a.txt' to '/tmp/a.txt': Operation not permitted
可复制
[root@rocky8 ~]# cp a.txt /tmp/
可读
[root@rocky8 ~]# cat a.txt 
abcd

★ +a 一般用于日志文件
[root@rocky8 ~]# echo "abcd">b.txt
[root@rocky8 ~]# chattr +a b.txt
[root@rocky8 ~]# ll b.txt 
-rw-r-----. 1 root root 5 Jun 26 14:49 b.txt
[root@rocky8 ~]# lsattr b.txt 
-----a-------------- b.txt
不可删除
[root@rocky8 ~]# rm -f b.txt 
rm: cannot remove 'b.txt': Operation not permitted
不可覆盖
[root@rocky8 ~]# echo "1234" > b.txt 
-bash: b.txt: Operation not permitted
可追加
[root@rocky8 ~]# echo "1234" >> b.txt 
不可移动
[root@rocky8 ~]# mv b.txt c.txt
mv: cannot move 'b.txt' to 'c.txt': Operation not permitted
可复制
[root@rocky8 ~]# cp b.txt /tmp/
可读
[root@rocky8 ~]# cat b.txt 
abcd
1234

6. ACL相关命令

setfacl 可设置ACL权限

getfacl 可查看设置的ACL权限

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...

网站公告

今日签到

点亮在社区的每一天
去签到