这篇文章主要包括如下主题:
一、基础概念
二、安全上下文
三、基本权限
四、特殊权限
五、文件访问控制列表
一、基础概念
1、文件拥有者:属主
2、文件拥有组:属组
二、安全上下文
1、进程是以某用户发起从而运行的,故进程会以运行其用户的权限完成所有操作
2、进程访问文件的权限应用模型
(1)如果“进程的属主 == 被访问文件的属主”,则应用属主的权限,否则进入(2)
(2)如果“进程的属主 in 被访问文件的属组中”,则应用属组的权限,否则进入(3)
(3)直接应用其他人(Others)的权限
3、设置FACL后,进程访问文件的权限应用模型
(1)如果“进程的属主 == 被访问文件的属主”,则应用属主的权限,否则进入(2)
(2)检查属主的FACL设置,如果没有匹配,则进入(3)
(3)如果“进程的属主 in 被访问文件的属组中”,则应用属组的权限,否则进入(4)
(4)检查属组的FACL设置,如果没有匹配,则进入(5)
(5)直接应用其他人(Others)的权限
三、基本权限
1、文件权限说明
(1)通过ls命令的-l选项可以查看目标文件的详细属性信息,其中第一部分就包括文件类型和文件权限,具体说明示例如下:
- [[email protected] ~]$ ls -ld /var/
- drwxr-xr-x. 19 root root 4096 Oct 4 17:46 /var/ ( r --> 可读;w-->可写;x-->可执行)
- 1-3,rwx:定义属主的权限
- 4-6,rwx:定义属组的权限
- 7-9,rwx:定义其他人的权限
(2)权限对于普通文件和目录权限具有不同的意义,具体如下:
- 对于文件
- r:可获取文件的数据
- w:可修改文件的数据
- x:可将此文件运行为进程
- 对于目录
- r:可使用ls命令获取目录下的文件列表
- w:可修改目录下的文件列表,即创建或修改等操作
- x:可使用cd命令切换至目录下,其可使用ls -l命令来获取所有文件的详细属性信息
2、文件权限表示方法
(1)八进制表示法:r=4;w=2;x=1
- 文件权限: --- --x -w- -wx r-- r-x rw- rwx
- 二进制: 000 001 010 011 100 101 110 111
- 八进制: 0 1 2 3 4 5 6 7
(2)MODE表示法:u=owner;g=group;o=others;a=all
- 赋权表示法:值为rwx;可针对某一类用户的所有权限位进行设置,也可针对某一类用户的某一个权限位或某几个权限位进行设置
- u=;g=;o=;a=
- 授权表示法:值为rwx;可增加或减少某一类用户的所有权限位,也可增加或减少某一类用户中的某一个权限位
- u+,u-;g+,g-;o+,o-;a+,a-
3、文件权限管理命令:chmod、chown、umask
(1)chmod:change file mode bits,修改文件权限
【Synopsis】
- chmod [OPTION]... MODE[,MODE]... FILE...
- 使用MODE表示法中的赋权表示法和授权表示法
- chmod [OPTION]... OCTAL-MODE FILE...
- 使用八进制权限表示法
- chmod [OPTION]... --reference=RFILE FILE...
【Options】
- -R,--recursive:递归修改
- --reference=FILE:根据指定文件的权限修改目标文件的权限
【Common usage】
- 复制/etc目录到/tmp目录下,并递归修改其权限为属主可读可写、属主可读可写可执行、其他用户可读(三种方法)
- 方法一:[[email protected] ~]# cp -r /etc/ /tmp/etc_bak && chmod -R 674 /tmp/etc_bak/
- 方法二:[[email protected] ~]# cp -r /etc/ /tmp/etc_bak && chmod -R u=rw,g=rwx,o=r /tmp/etc_bak/
- 方法三:[[email protected] ~]# touch mode.txt && chmod 674 mode.txt && cp -r /etc/ /tmp/etc_bak && chmod -R --reference=/root/mode.txt /tmp/etc_bak
(2)chown:change file owner and group,修改文件的属主和属组
- (chgrp命令是专门为修改属组而设计的命令,由于chown可以实现chgrp的功能,故此处不再阐述)
【Synopsis】
- chown [OPTION]... [OWNER][:[GROUP]] FILE...
- chown [OPTION]... --reference=RFILE FILE...
【Options】
- -R,--recursive:递归修改
- --reference=FILE:根据指定文件的属主和属组修改目标文件的属组和属组
【Common usage】
- 复制/etc目录到/tmp目录下,并属主和属组均为hadoop(两种方法)
- 方法一:[[email protected] ~]# cp -r /etc/ /tmp/etc_bak && chmod -R hadoop:hadoop /tmp/etc_bak/
- 方法二:[[email protected] ~]# cp -r /etc/ /tmp/etc_bak && chown hadoop:hadoop mode.txt && chown -R --reference=/root/mode.txt /tmp/etc_bak
(3)umask:display and change umask,显示或修改umask
【Synopsis】
- umask
- umask umask_number
【Knowledge】
- umask默认值为0022
- 第一部分,0:特殊权限位,此处表示默认情况下无论普通文件还是目录文件均没有特殊权限
- 第二部分,022:基本权限位,此处表示默认情况下无论普通文件的权限还是目录文件的权限均会减去此数值
- 默认情况下,新建普通文件的权限为644=666-022;新建目录文件的权限为755(777-022)
- 将默认情况下的umask进行修改,如果普通文件最终计算出来的权限中如果出现了执行权限,则会自动将其加1,因为文件默认不可以出现执行权限
- 如将umask修改为0023,则新建普通文件的权限为666-023=643,3表示了2(写权限)+1(执行权限),此时需要将3+1,因为文件默认不可以出现执行权限
【Options】
- None
【Common usage】
- 查看当前系统的umask
- [[email protected] ~]# umask
- 设置当前系统的umask为023
- [[email protected] ~]# umask 023
四、特殊权限
1、SUID
(1)意义:当用户执行某个拥有SUID权限的程序文件时,则此时进程的属主不是其运行用户,而是程序文件的属主
(2)实现:SUID只针对属主权限
- chmod u+|-s FILE...
(3)位置:显示于属主权限的可执行权限应处的位置
- 如果被修改的文件原本拥有可执行权限,则显示为s
- [[email protected] etc_bak]$ ls -l updatedb.conf
- -rwSr--r--. 1 hadoop hadoop 508 Oct 4 23:19 updatedb.conf
- 如果被修改的文件原本没有可执行权限,则显示为S
- [[email protected] etc_bak]$ ls -l virc
- -rwsr-xr-x. 1 hadoop hadoop 1982 Oct 4 23:19 virc
2、SGID
(1)意义:当某个目录拥有GUID权限时,那么所有属于此目录属组的用户在此目录下新建的普通文件或目录文件的属组不是用户的基本组,而是此目录的属组
(2)实现:GUID只针对属组权限
- chmod g+|-s DIRECTORY...
(3)位置:显示于属组权限的可执行权限的位置
- 如果目录原本拥有可执行权限,则显示为s
- 如果目录原本没有可执行权限,则显示为S
3、STICKY
(1)意义:对于全局可写的目录,如果为其设置Sticky权限,则用户只能删除此目录下由自己创建的文件
(2)实现:
- chmod o+|-t DIRECTORY...
(3)位置:显示于其他用户权限的可执行权限的位置
- 如果目录原本拥有可执行权限,则显示为t
- 如果目录原本没有可执行权限,则显示为T
五、文件访问控制列表
1、文件访问控制列表
- 是指在原来u,g,o三类用户权限之外提供的让普通用户能控制赋权给其他普通用户或组的赋权机制
2、facl,file access control lists
- getfacl,获取文件访问控制列表
【Synopsis】
- getfacl FILE...
【Options】
- None
【Common usage】
- 获取/tmp/etc_bak/passwd文件的文件访问控制列表
- [[email protected] ~]# getfacl /tmp/etc_bak/passwd
- user:hadoop:rw-
- [[email protected] ~]# getfacl /tmp/etc_bak/passwd
- setfacl,设置文件访问控制列表
【Synopsis】
- setfacl [OPTION]... FILE...
【Options】
- -m:修改
【Common usage】
- 修改/tmp/etc_bak/passwd文件的文件访问控制列表,让user1用户拥有读写权限,让hadoop组拥有执行权限
- [[email protected] ~]# setfacl -m u:user1:rw /tmp/etc_bak/passwd
- [[email protected] ~]# setfacl -m g:hadoop:x /tmp/etc_bak/passwd
- [[email protected] ~]# getfacl /tmp/etc_bak/passwd
- user:user1:rw-
- group:hadoop:--x