一、基本概念
文件权限是指文件的访问控制,即哪些用户可以访问文件并执行什么样的操作。对某个文件执行某种操作,必须具有对应的权限方可执行成功。
[root@centos7 ~]#ll
drwxr-xr-x. 2 root root 6 Aug 2 2022 Downloads
-rw-r--r--. 1 root root 91 Feb 21 10:56 f1
利用ls -l
命令可以看到某个文件或目录的权限,它以显示数据的第一个字段为准。第一个字段由10个字符组成,如下:
第一位表示文件类型,-
表示文件,d
表示目录
2-4位表示文件所有者的权限,u
权限
5-7位表示文件所有者所属组成员的权限,g
权限
8-10位表示所有者所属组之外的用户的权限,o
权限
2-10位的权限总和有时称为a
权限
1.三个用户
Linux下权限的属组有 所有者、群组、其它组 三种。每个文件都可以针对这三个属组,设置不同的rwx(读写执行)权限。
u
文件所有者(owner):建立文件或者目录的用户 。g
组用户(group):文件所属组群中的所有用户。o
其他用户(other):既不是文件所有者,也不是同组用户的其他用户。
2.三个权限
r
读取权限:
文件:浏览文件(cat、more、less
)
目录:目录中内容的权限 (ls
)
w
写入权限:
文件:修改文件内容的权限 (vim
)
目录:删除、添加和重命名目录内文件的权限(mv/rm/cp
)
x
执行权限:
文件:对可执行文件而言,是允许执行的权限./
目录:进入目录的权限(cd
)。
通常情况下:
一个文件只能归属于一个用户和组,如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。
文件夹必须有执行权限
二、模式法
1.谁-操作-权限
每个Linux文件具有四种访问权限:可读r
、可写w
、可执行x
和无权限-
谁—操作—权限:
人:
所有者(user) —u
所属组(group)—g
其他人(other)—o
所有人(all)—a
操作:
增加权限 —+
减少权限 ——
赋予权限 —=
权限:
读取权限—r
写入权限—w
执行权限—x
案例1:chmod u+r
root@centos7 a]#ll f1
----------. 1 root root 83 Feb 25 21:13 f1
[root@centos7 a]#chmod u+r f1
[root@centos7 a]#ll f1
-r--------. 1 root root 83 Feb 25 21:13 f1
可以看出 f1文件的所有者增加了读(r)的权限。读、写、执行增加权限同样。
案例2:chmod g+w
[root@centos7 a]#ll f1
-r--------. 1 root root 83 Feb 25 21:13 f1
[root@centos7 a]#chmod g+w f1
[root@centos7 a]#ll f1
-r---w----. 1 root root 83 Feb 25 21:13 f1
可以看出 f1文件的所属组增加了写(w)的权限。
案例3:chmod o+x
[root@centos7 a]#ll f1
-r---w----. 1 root root 83 Feb 25 21:13 f1
[root@centos7 a]#chmod o+x f1
[root@centos7 a]#ll f1
-r---w---x. 1 root root 83 Feb 25 21:13 f1
可以看出 f1文件的其他组增加了执行(x)的权限。
案例4:chmod a= f1
[root@centos7 a]#chmod a= f1
[root@centos7 a]#ll f1
----------. 1 root root 83 Feb 25 21:13 f1
可以看出 f1文件的其他组增删除了所有的权限。
案例5:chmod u=rw,go=rw f1
[root@centos7 a]#ll f1
----------. 1 root root 83 Feb 25 21:13 f1
[root@centos7 a]#chmod u=rw,go=rw f1
[root@centos7 a]#ll f1
-rw-rw-rw-. 1 root root 83 Feb 25 21:13 f1
混合命令增加权限,可以看到f1文件权限变为-rw-rw-rw-
,说明可以直接使用u|g|o = r|w|x
的方式直接修改文件权限。
案例6:chmod u+x,go-w
[root@centos7 a]#ll f1
-rw-rw-rw-. 1 root root 83 Feb 25 21:13 f1
[root@centos7 a]#chmod u+x,go-w f1
[root@centos7 a]#ll f1
-rwxr--r--. 1 root root 83 Feb 25 21:13 f1
可以看到f1文件权限变为-rwxr--r--
,说明可以直接使用u|g|o +|- r|w|x
的方式直接给指定身份添加或删除文件权限。
案例7:chomod a-x
[root@centos7 a]#ll f1
-rwxr-xr-x. 1 root root 83 Feb 25 21:13 f1
[root@centos7 a]#chmod a-x f1
[root@centos7 a]#ll f1
-rw-r--r--. 1 root root 83 Feb 25 21:13 f1
可以看到tf1文件权限变为-rw-r--r--
,这里a代表的是所有用户的意思,所以直接将owner、group、others
的权限都删去了x权限。
三、数字法
1.r=4、w=2、x=1
二进制表示:相对应的权限位,有权限表示为1,无权限表示0,然后转换为八进制表示。
rwx=7
2^0=1x
2^1=2w
2^2=4r
可以看见r w x
的权限,对应数字4、2、1
数字法权限:
r —4
w—2
x—1
将所有的权限用二进制形式表现出来,并进一步转变成八进制数字
rwx = 111 = 7 #4+2+1
rw- = 110 = 6 #4+2+0
r-x = 101 = 5 #4+0+1
r-- = 100 = 4 #4+0+0
-wx = 011 = 3 #0+2+1
-w- = 010 = 2 #0+2+0
--x = 001 = 1 #0+0+1
--- = 000 = 0 #0+0+0
案例1:chmod 670
670对应的所有者读(r)写(w)权限,组用户读(r)写(w)执行(x),其他无权限。
[root@centos7 a]#ll f1
----------. 1 root root 83 Feb 25 21:13 f1
[root@centos7 a]#chmod 670 f1
[root@centos7 a]#ll f1
-rw-rwx---. 1 root root 83 Feb 25 21:13 f1
案例2:chmod 777
777是最大权限,全部都是读(r)写(w)执行(x)。
[root@centos7 a]#chmod 777 f1
[root@centos7 a]#ll f1
-rwxrwxrwx. 1 root root 83 Feb 25 21:13 f1
一旦有奇数,必有执行权限。
Chmod -R 777 f1
-R 递归使目录下的所有文件和目录,统一设置。
四、文件的判断方式
文件判断方式
1)先看文件所有者,是所有者就不看组了,直接生效。
2)再看组,判断是否在用户组。
3)最后是other。
权限是最终的结果,还是看用户。
自己的所属文件,自己可以改模式。 管理员root不受控制(读写),执行权限例外
任何用户无执行权限,将无法执行。
任何人有执行权限,root就能执行。
执行权限一般慎用。
至少得有一个执行权限
对目录写权限,才能删里面的内容
对目录有权限,才能修改里面的内容,目录的内容就是里面的文件名字。
对目录的含义
① 无读(r):无法看目录的文件列表,可以cd进去,可读文件内容
② 只写:没有用,不能创建,也不能删除
③ 无执行(x):不可以cd进到目录内,不可读目录内文件内容,在外面可以看见文件名字,属性看不见。
目录的执行权限是基本权限,通常会有。 一般给用户,是rx同时给,要不都给,要不都不给。
程序能不能运行,在于有没有执行权限,和读权限无关。
五、umask
umask 命令允许设定
umask的作用是在用户登录Linux系统环境下,设置用户创建目录和文件的初始化权限。
文件默认权限 666 目录默认权限 777。
文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相同的umask值中的数字。
[root@centos7 a]#vim /etc/profile
...省略...
60 umask 002
61 else
62 umask 022
63 fi
[root@centos7 a]#umask
0022
文件默认权限=666-umask值 666-022=644
目录默认权限=777-umask值 777-022=755
六、文件的特殊权限
1.SUID
Set UID,简称为SUID特殊权限。SUID是为了使“没有取得特权用户要完成一项必须要有特权才可以执行的任务”而产生的。
一般用于给可执行的程序或脚本文件进行设置,其中SUID表示对属主用户增加SET位权限。
当看到文件拥有者owner的x权限上有s标志,此时称为SUID特殊权限。
[root@centos7 ~]#ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
[root@centos7 ~]#
特性:
SUID权限仅对二进制程序(命令)有效,对shell script和目录无效。
用户对于该程序需要具有x的可执行权限。
此权限仅在执行该程序的过程中有效。
执行者将具有该程序拥有者(owner)的权限。(普通用户具有临时root权限执行此命令)
2.SGID
SGID是为了使“没有取得特权用户要完成一项必须要有特权才可以执行的任务”而产生的。
一般用于给可执行的程序或脚本文件进行设置,SGID表示对属组内用户增加SET位权限。执行文件被设置了,任何用户执行该文件时,将获得该文件属主、属组账号对应的身份。
如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上;如果文件设置了suid还设置了x(执行)位,则相应的执行位表示为s(小写)。但是,如果没有设置x位,它将表示为S(大写)。如:
1、-rwsr-xr-x 表示设置了suid,且拥有者有可执行权限
2、-rwSr--r-- 表示suid被设置,但拥有者没有可执行权限
3、-rwxr-sr-x 表示sgid被设置,且群组用户有可执行权限
4、-rw-r-Sr-- 表示sgid被设置,但群组用户没有可执行权限
命令如下:
chmod u+s 文件名 设置suid位
chmod u-s 文件名 去掉suid设置
chmod g+s 文件名 设置sgid位
chmod g-s 文件名 去掉sgid设置
3.SBIT
SBIT主要的作用是禁止文件的其他人删除、修改文件。
说明:
针对的是目录,对文件是无效的。权限设定:
如果有执行权限rwt显示。
如果没有执行权限rwT显示。
chmod o+t 文件名 设置SBIT位
chmod 0-t 文件名 去掉SBIT设置
七、ACL
ACL:是文件控制访问,文件的权限除了所有者、所属组,其他人的权限之外,还有一个额外的控制访问.
setfacl:
命令用于设置文件控制访问权限。
语法:setfacl+【选项】+【ugo】:【用户】:【rwx】+文件名
选项:
-m:添加acl权限
-x:取消一条acl权限
-b:取消文件的acl权限
-d:默认的acl权限
-R:递归acl全向
getfacl:
命令用于查看默认的acl权限
作用:
语法:getfacl+文件名
[root@centos7 a]#setfacl -m u:jack:rwx f2
[root@centos7 a]#getfacl f2
# file: f2
# owner: cyan
# group: root
user::rw-
user:cyan:rwx
user:jack:rwx
group::r--
mask::rwx
other::r--
添加ACL的文件,后面带个+
[root@centos7 a]#ll f2
-rw-rwxr--+ 1 cyan root 178189 Mar 19 21:50 f2
Setfacl 能改变基础权限,使用请注意
八、权限修改
chmod 修改权限
chown 修改属主,组
chgrp 修改数组
-R
递归使目录下的所有文件和目录,统一设置。
案例1 chown
命令
chown 用户 文件
chown 用户.组 文件
root@centos7 a]#ll
-rw-r--r--. 1 root root 178189 Mar 19 21:50 f2
[root@centos7 a]#chown cyan f2
[root@centos7 a]#ll
-rw-r--r--. 1 cyan root 178189 Mar 19 21:50 f2
[root@centos7 a]#chown cyan.cyan f2
[root@centos7 a]#ll
-rw-r--r--. 1 cyan cyan 178189 Mar 19 21:50 f2
案例2.chgrp
[root@centos7 a]#ll
-rw-r--r--. 1 cyan cyan 178189 Mar 19 21:50 f2
[root@centos7 a]#chgrp root /a/f2
[root@centos7 a]#ll /a/f2
-rw-r--r--. 1 cyan root 178189 Mar 19 21:50 /a/f2