文件权限管理
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 ...