文件系统的权限管理,主要分为:普通权限,特殊权限,文件的扩展属性,FACL(文件系统访问控制列表)再详细说之前,我们先得说一说DAC(自主访问控制)以及安全上下文。
在用户与组的介绍中我们大概说了说安全上下文:任何在计算机中执行的任务都是由进程来实现的;进程就有必要访问和使用文件或某些数据资源;进程和其要操作的文件之间的关系,定义为安全上下文。而在DAC模型中定义安全上下文的方式很简单:
所有权:
任何启动进程的用户就是该进程的所有者;进程的所有者也可以变更;
任何创建文件的用户就是该文件的所以者;文件的所有者是可以变更的;
使用权:
在文件上面所定义的对该文件的特定使用过滤规则;
三个权限:所有者权限,所属组权限,其他人权限
其中安全上下文匹配规则:
当某个进程试图操作某个文件时,DAC将做如下规则匹配:
1.判断进程的所有者和文件的所有者是否为同一用户,如果是,则直接应用文件的所有者权 限;
2.如果不是,则进一步判断进程的所有者是否为文件的所属组的成员,如果是,则直接应用文 件的所属组权限;
3.如果不是,直接应用其他人权限;
大家从上面所说,简单了解了之后,我们来说一下文件权限的构成:所有权,使用权。我们先来说使用权:MODE,Permission。默认的,它拥有三个基本权限:
r:Readble,可读;
w:Writable,可写;
x:Executable,可执行
但是这三种文对于两大类文件(目录文件以及非目录文件)是不同的:
目录文件:
r:可以使用ls命令获取其中所包含的所有文件的文件名列表;
w:可以在此目录中进行文件名修改(创建,删除,修改);即:可以创建文件名,删除文件名及 修改文件名;
x:可以使用ls -l命令来查看文件各个文件的属性信息;在路径中引用该目录;cd /DIR
非目录文件:
r:可以利用cat类的命令获取文件中存放的数据信息;
w:可以修改(添加,删除,修改)文件中所存放的数据信息;
x:可以将文件发起运行为进程;
你可以通过使用:ls -l /PATH/TO/SOMEFILE这个命令,可以查看到权限内容:
1.使用符号标识权限
-rwxr-xr-x.:三个权限位(属主/所有者,属组/所属组,其他用户)
属主权限:rwx ,此权限位标识为user,简写为u;
属组权限:r-x,此权限位可标识为gtoup,简写为g;
其他用户权限:r-
x,此权限位标识为other,简写为o;
所有的权限位可以统一用all标识,简写为a;
注意:"-"表示在该权限位上不具备指定权限;
rwx组合称为"权限标识三元组";
2.使用数字标识权限:二进制数字标识,在对应的权限位上有权限则为1,无权限则为0;
如:--- 000 0
--x 001 1
-w- 010 2
r-- 100 3
r-x 101 4
rw- 110 5
-wx 011 6
rwx 111 7
标识权限方式有这两种,那么它们之间有什么区别呢?
1.使用符号表示法可以只标识某个特定的权限位,也可以同时标识所有的权限位;
示例:
u=rx;ug=rwx;u=rwx,g=rx,o=r;
2.使用数字标识法只能同时标识所有权限位;
示例:
744;644;7 == 007;75==075
我们能够看到文件上相应权限,那么我们如果想要根据自己需要,应该如何去修改权限呢?
修改文件的使用权:
chmod - change file mode bits;
格式:
chmod [OPTION]... MODE[,MODE]... FILE...(符号标识)
chmod [OPTION]... OCTAL-MODE FILE...(数字标识)
chmod [OPTION]... --reference=RFILE FILE...
MODE:符号权限标识法;
u,g,o,a:表示权限位;
+,-,=:表示授权方式;
+:表示在指定的权限位上增加指定权限;如果新增的权限是已经存在的权 限,则结果相比较授权之前无变化;
-:表示在指定的权限位上撤销指定权限;如果被撤销的权限在原权限位并不 存在,则结果相比较授权之前无变化;
=:表示在指定的权限位上精确授权,此种授权方式不考虑该权限位原有的权 限设定的;
r,w,x:表示具体的权限;
[root@localhost ~]# ll 总用量 12 drwxr-xr-x. 2 root root 4096 10月 21 11:21 ad -rw-------. 1 root root 1787 8月 1 18:35 anaconda-ks.cfg -rw-r--r--. 1 root root 0 11月 4 19:32 b.txt drwxrwx---. 2 root project 4096 11月 4 15:43 projects [root@localhost ~]# chmod u-x,g+rw,o+r b.txt [root@localhost ~]# ll 总用量 12 drwxr-xr-x. 2 root root 4096 10月 21 11:21 ad -rw-------. 1 root root 1787 8月 1 18:35 anaconda-ks.cfg -rw-rw-r--. 1 root root 0 11月 4 19:32 b.txt drwxrwx---. 2 root project 4096 11月 4 15:43 projects
注意:
chmod +或者- r|x FILE;在所有的权限位上增加或撤销读或执行权限;
chmod +或者- w FILE:仅在所有者权限位上增加或撤销写权限;
注意:对于文件来说,执行权限是非常重要的安全上下文标识;因此默认情况下,所 有的非目录文件都不应该有执行权限;因为一旦非目录文件具有了执行权限,则意味这 该文件可以被执行发起为进程,则可以按需使用系统资源;
OCTAL-MODE:八进制数字权限标识法;
[root@localhost ~]# chmod 755 b.txt [root@localhost ~]# ll 总用量 12 drwxr-xr-x. 2 root root 4096 10月 21 11:21 ad -rw-------. 1 root root 1787 8月 1 18:35 anaconda-ks.cfg -rwxr-xr-x. 1 root root 0 11月 4 19:32 b.txt drwxrwx---. 2 root project 4096 11月 4 15:43 projects
--reference=RFILE:
[root@localhost ~]# chmod --reference=/etc/shadow b.txt [root@localhost ~]# ll 总用量 12 drwxr-xr-x. 2 root root 4096 10月 21 11:21 ad -rw-------. 1 root root 1787 8月 1 18:35 anaconda-ks.cfg ----------. 1 root root 0 11月 4 19:32 b.txt drwxrwx---. 2 root project 4096 11月 4 15:43 projects
//参考/etc/shadow文件将权限复制给b.txt
常用选项:
-R, --recursive:递归地设置目标文件或目录的权限;
修改文件的所有权
1.chown:
- change file owner and group;修改文件的属主、属组;
格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
示例:
# chown user3 test1
# chown user3: test2
# chown :user3 test3
# chown user3:mytuter test4
注意:使用chown命令时,代码中的":"可以用"."来代替;
常用选项:
-R, --recursive:递归地设置目标文件或目录的所有权;
[root@localhost ~]# ll /home 总用量 28 drwx------. 2 root root 16384 8月 1 18:17 lost+found drwx------. 4 wangcai wangcai 4096 11月 4 18:06 wangcai drwx------. 4 root root 4096 11月 4 18:15 xiaoming drwx------. 30 xwl xwl 4096 9月 24 08:20 xwl [root@localhost ~]# chown -R xiaoming:xiaoming /home/xiaoming [root@localhost ~]# ll /home 总用量 28 drwx------. 2 root root 16384 8月 1 18:17 lost+found drwx------. 4 wangcai wangcai 4096 11月 4 18:06 wangcai drwx------. 4 xiaoming xiaoming 4096 11月 4 18:17 xiaoming drwx------. 30 xwl xwl 4096 9月 24 08:20 xwl
注意:对于文件来说,普通用户可以修改所有者为自己的文件的使用权,但无法修改 文件的所有权;修改文件所有权的操作只有root可以完成;
2.chgrp(chown可以实现属主属组,这个命令不常用)
change group ownership
修改文件的属组
格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:chown和chgrp命令所指定的用户和组,既可以是用户名和组名,也可以是UID和GID;
3.
install:
install - copy files and set attributes;
格式:
install [OPTION]... [-T] SOURCE DEST
单源复制,为复制后的文件增加执行权限;
install [OPTION]... SOURCE... DIRECTORY
多源复制,为复制后的文件增加执行权限;
install [OPTION]... -d DIRECTORY..
创建目录
常用选项:
-g, --group=GROUP
set group ownership, instead of process’ current group
//设定目标文件的所属组为指定组,而不是进程所有者的主要组;
-m, --mode=MODE
set permission mode (as in chmod), instead of rwxr-xr-x
//设定目标文件的权限,而不是rwxr-xr-x
-o, --owner=OWNER
set ownership (super-user only)
//设定目标文件的所有者,仅root可用;
[root@localhost ~]# install -o wangcai -g xiaoqiang -m 740 /etc/fstab /var/tmp [root@localhost ~]# ll /var/tmp 总用量 4 -rwxr-----. 1 wangcai xiaoqiang 1025 11月 4 19:28 fstab
注意:install命令,不能复制目录,即不能以目录为源文件;如果其源文件时一个目录, 则install命令会进入这个目录,依次复制其中的所有非目录文件到目标位置;
特殊权限:
SUID,SGID,STICKY
1.SUID:SUID仅设置在可执行的文件上。默认情况下,当用户执行此类可执行文件时,被发起 的进程的所有者不是进程的发起者,而是可执行文件的所有者;换句话说,进程以文件所有者 的身份运行;
SUID权限所显示的位置:文件的属主的权限位中的执行权限位上;如果属主本来就具有执行权 限,则显示为"s";如果属主本来没有执行权限,则显示为"S";
管理SUID权限:
1.符号标识法:chmod u+s FILE
2.数字表示法:chmod 47555 FILE
[xiaoming@localhost ~]$ chmod u+s /tmp/xmcats [root@localhost xiaoming]# usermod -g 8089 wangcai [wangcai@localhost ~]$ /tmp/xmcat ~xiaoming/project.plan asdasd
2.SGID:SGID可设置在可执行文件或目录的属组权限位的执行权限上。
如果某个目录设置了SGID权限,并且对于某些用户有写权限,则所有在此目录中创建的新文件 和目录的所属组均为其父目录的所属组,而并非进程发起者的主要组;
SGID权限的显示位置:在文件属组权限位上的执行权限;如果属组本来就有执行权限,则显示 为"s",否则,就显示为"S";
管理SGID权限:
1.符号标识法:chmod g+s DIR(目录)
2.数字标识法:chmod 2770 DIR
3.STICKY:仅设置在目录的其他用户权限位的执行权限上。
如果在某个目录上的权限设置为多个用户都拥有写权限,那就意味着凡是拥有写权限 的用户都能够直接管理该目录中的所有文件名,包括改名文件及删除文件等操作;因此需要在 这样的目录上设置STICKY特殊权限;如果此类目录设置了STISKY,则所有用户即便拥有写权 限,也仅能删除或改名所有者为其自身的文件;
STICKY权限的显示位置:在目录的其他用户的权限位的执行权限上;如果该权限位本 来有执行 权限,则显示为"t",否则,显示为"T";
管理STICKY权限:
1.符号标识法:chmod o+t DIR
2.数字标识法:chmod 1770 DIR
权限遮罩码:umask
作用:在创建目录或文件时,被创建出来的文件或文件的默认权限上要删除遮罩码上所对应的 权限;
注意:在创建目录或文件时,默认不设置特殊权限;
对于目录来说:默认的权限为:0777-umask
对于非目录文件:默认的权限为:0666-umask
umask [OCTAL-MODE]
默认设置遮罩码的文件为:/etc/bashrc
规则:如果用户的UID>199并且用户名和基本组的组名相同,则遮罩码为002;否则遮 罩码 为022;
文件的扩展属性:
lsattr:
- list file attributes on a Linux second extended file system
格式:lsattr [ -RVadv ] [ files... ]
chattr:
chattr - change file attributes on a Linux file system
格式:chattr [ -RVf ] [ -v version ] [ mode ] files...
mode可以是:+-=[aAcCdDeijsStTu]
+
-
=
常用选项:
a:在向文件写数据时,只能以附加的方式进行写操作;文件的内容不能被更 除;一般会为日志文件设置此属性;
A:atime,文件的访问时间戳控制属性;对于并发访问量较大或者并发访问频率较高 的文件,应该设置此属性以降低IO成本;防止IO瓶颈;
c:设置是否自动压缩之后再存储;
C:是否开启“写时复制”;
d:使用dump备份文件系统时,跳过属性设置为d的文件;
D:设置文件再文件系统中的异步写操作;
i:设置文件不能被删除,改名及设定链接关系;
s:设置文件的保密性删除;
u:与s属性相反,如果此类文件被删除,则在存储器中会继续保存其内容;
FACL(文件系统访问控制列表):
Filesystem Access Control List,文件系统访问控制列表;
想要应用此功能,必须要让文件系统能够支持;
FACL为文件系统的额外赋权机制;
在原有的u,g,o权限位之外,让普通用户能够控制权限赋予另外的某个指定用户或组的一种赋权机制;
这种机制在CentOs或者RHEL7之后的发行版本中,才逐渐成熟;
与FACL相关的命令:
getfacl:
getfacl - get file access control lists
格式:getfacl [-aceEsRLPtpndvh] file ...
serfacl:
setfacl - set file access control lists
格式:
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl --restore=file
常用选项:
-m (--modify) acl_spec:未指定文件设定acl_spec;
-x (--remove) acl_spec:将acl_spec从指定文件上移除;
acl_spec:acl_specification,acl规格,访问控制列表;
u:USERNAME:MODE
g:USERNAME:MODE
MODE一般是使用符号权限标识法标识的权限;
示例:
为文件赋予指定用户的额外访问权限;
[user3@lab1~]$ setfacl -m u:link:rwx /tmp/temp
撤销指定文件的额外访问权限;
[user3@lab1~]$ setfacl -x u:link /tmp/temp
注意:如果设置了FACL之后,再修改目标文件的使用权限,那么FACL中设置的权限条目可能受影响而导致授权失败;因此,为了保证没有此项干扰,应该先调整目标文件或目录的权限,再设置FACL;