20170724 文件权限
2017-07-25 本文已影响15人
哈喽别样
概要
linux文件权限
linux文件特殊权限
ACL 访问控制列表
一、linux文件权限
(一)linux文件属性
ls -l 命令可以看到文件相关属性,每个字段的意义如下:
1. chown 设置文件所有者
- 语法:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
- 用法:
chown hellopeiyang a.txt <!--改变a.txt文件所有者为hellopeiyang-->
chown hellopeiyang:natasha b.txt <!--改变b.txt文件所有者为hellopeiyang,所属组为natasha-->
chown :natasha c.txt <!--改变c.txt文件所属组为natasha-->
chown hellopeiyang: d.txt
<!--改变d.txt文件所有者为hellopeiyang,所属组为所有者的主组hellopeiyang-->
chown -R hellopeiyang test1
<!--递归改变test目录和以下所有文件目录的所有者为hellopeiyang-->
-
实验结果如下图:
2. chgrp 设置文件所属组
- 语法:
chgrp [OPTION]... GROUP FILE...
- 选项:
-R 递归设置
-
chgrp
的功能chown
也能够实现
(二)linux文件权限
linux定义了以下三类用户:
- 所有者 (owner,u)
- 所属组 (group,g)
- 其他人 (other,o)
linux文件为每类用户规定了三种权限
- 读权限 (readable,r)
- 写权限 (writable,w)
- 可执行权限 (executable,x)
1. 三种权限在文件与目录中的不同效果
- 文件:
- r: 可以查看文件内容
- w: 可以修改文件内容
- x: 可以被系统运行
- 目录:
- r: 可以通过
ls
命令查看目录内文件列表 - w: 可以在目录下新建、删除文件
- x: 可以通过
cd
命令进入目录内 - X:只给目录x权限,不给文件x权限
- r: 可以通过
2. 文件权限描述方法
- 描述方法一:模式法
用户描述:u:所有者,g:所属组,o:其他人,a:所有三类用户
权限变化描述:+:增加权限,-:减少权限,=:将权限赋值
例如:
u+w:所有者增加写权限
g-x:所属组减少可执行权限
a=rw:所有用户的权限赋值为读、写权限
- 描述方法二:数值法
读权限赋值为4,写权限赋值为2,可执行权限赋值为1,通过对权限的赋值相加得出相应的权限组合如下:
rwx 7=4+2+1 rw- 6=4+2+0 r-- 4=4+0+0
-wx 3=0+2+1 -w- 2=0+2+0
--x 1=0+0+1
--- 0=0+0+0
用三位数字描述文件三类用户的权限修改情况如下:
764 rwxrw-r-- <!--所有者权限:全部,所属组权限:读写,其他人权限:读-->
620 rw--w---- <!--所有者权限:读写,所属组权限:写,其他人权限:无-->
3. chmod 修改文件权限
- 语法:
chmod [OPTION]... MODE[,MODE]... FILE... <!--模式法-->
chmod [OPTION]... OCTAL-MODE FILE... <!--数值法-->
- 选项:
-R 递归设置
- 实验:1、将文件abc的权限设置为所有者全部都有,所属组只有读权限,其他人没有权限;2、将文件def的权限所有者删去可执行权限,所属组增加读权限,其他人的权限赋值为全部没有。
- 命令:
chmod 740 abc
chmod u-x,g+w,o= def
(三)umask值:新建文件和目录的默认权限
- umask默认值:root用户为022,普通用户为002
- umask值计算新建文件和目录的权限的方法:
- 对于目录,用777-umask值即可
- 对于文件,用666-umask值后,将出现的奇数位权限值加1其他不变
-
演示umask值对新建文件目录的影响
- umask -S 模式方式显示
- umask -p 输出结果前加"umask",可以使umask值被调用,如将umask值添加至用户设置
~/.bashrc
命令为umask -p >> ~/.bashrc
,若为系统设置则输出至/etc/bashrc
二、linux文件特殊权限
一般来说,用户是否能够访问文件取决于被访问文件的权限设置。但是,linux文件的特殊权限(SUID,SGID)表现在:用户继承了访问文件使用的可执行程序文件的权限设置。
(一) SUID
- 用户运行程序后,用户身份切换至程序所有者的身份。文件能否被访问取决于程序所有者在文件权限中的设置。
- 用法:
chmod u+s FILE... <!--先前位置的x会被s代替-->
chmod u-s FILE... <!--s会恢复成x-->
chmod 4720 FILE... <!--用数值法描述时,在原三位数字前添加数字4-->
- 注意:SUID只在作用于二进制可执行文件上才有效,作用于目录上无意义。
- 实验:
1、在普通账户下,cat命令无法查看文件/etc/shadow
2、在root账户下,给cat增加SUID权限,切换回普通账户,此时cat可以查看/etc/shadow
。这是因为普通用户执行cat命令时身份临时切换为cat二进制程序的所有者root,从而获得了查看/etc/shadow
的权限
3、在root账户下,修改cat的所有者为普通账户,发现SUID属性自动失去,再为其添加SUID属性。切换回普通账户,cat命令无法查看文件/etc/shadow
。这是因为普通用户执行cat命令后身份切换后仍旧是普通用户,而/etc/shadow
文件除root外谁也不能访问,所以此时无法访问/etc/shadow
。
(二)SGID
1. 可执行文件上的SGID权限
- 用户运行程序后,用户身份切换至程序所属组的身份,文件能否被访问取决于程序所属组在文件权限中的设置。
- 用法:
chmod g+s FILE... <!--先前位置的x会被s代替-->
chmod g-s FILE... <!--s会恢复成x-->
chmod 2770 FILE... <!--用数值法描述时,在原三位数字前添加数字2-->
-
实验:
1、当前普通用户(不属于natasha组)无法用cat命令访问abc文件
2、将cat程序文件的所属组改为abc文件的所属组natasha,并为其赋予SGID权限
3、此时普通用户可以访问abc文件了。这是因为执行cat命令时,普通用户的身份切换为cat命令文件的所属组,而abc文件的所属组与cat的相同并且具备读权限,所以普通用户也可以访问了。
2. 目录上的SGID权限
- 一般情况下,用户建立文件的所属组为用户所属主组。当目录被赋予了SGID权限,在目录下新创建文件的所属组为此目录的所属组。
- 用于创建协作目录
- 用法:
chmod g+s DIR... <!--先前位置的x会被s代替-->
chmod g-s DIR... <!--s会恢复成x-->
chmod 2770 DIR... <!--用数值法描述时,在原三位数字前添加数字2-->
(三)Sticky 粘滞位
- 一般情况下,具有对目录写权限的用户可以删除目录下的任意文件,而不需考虑文件的所有者。
- 当对目录赋予Sticky权限,目录内的文件只能由其所有者和root用户删除,其他用户即使对目录具有写权限也不能删除别人的文件。
- 用法:
chmod o+t DIR... <!--先前位置的x会被t代替-->
chmod o-t DIR... <!--t会恢复成x-->
chmod 1647 DIR... <!--用数值法描述时,在原三位数字前添加数字1-->
特殊权限的大小写区别
- SUID:
s:所有者拥有x权限
S:所有者没有x权限 - SGID:
s:所属组拥有x权限
S:所属组没有x权限 - Sticky:
t:其他人拥有x权限
T:其他人没有x权限 - 由于特殊权限都赋予在二进制可执行文件或目录上,这些文件的x权限都比较重要,失去x权限而赋予特殊权限,将无法实现很多功能,所以大写的权限一般视作一种故障状态。
(四)设定文件特定属性
chattr +i <!--不能删除,改名,更改-->
chattr +a <!--只能追加内容-->
lsattr <!--显示特定属性-->
三、ACL访问控制列表
- ACL能够专门对个别用户进行权限控制,实现更加灵活的权限管理
- CentOS 7下的分区自动具备ACL功能;
- CentOS 6下的分区:若分区是在系统安装时划定的,则自动具备ACL功能;若分区是安装后增加的,则默认不具备ACL功能,需要手动修改。
// 手动开启ACL功能
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt/test
- setfacl 设置文件ACL
- 语法:
setfacl [option] [{-m|-x} acl_spec] file ...
- 用法:
-m 修改 -x 删除
option:-R 递归 -b 清空 -k 删除默认acl权限
u:hellopeiyang:rwx <!--设定用户hellopeiyang的所有者权限为rwx-->
g:natasha:rw <!--设定组natasha的所属组权限为rw-->
m::rw <!--设定mask值为rw-->
setfacl -m u:hellopeiyang:rw hello <!--设置文件hello的ACL权限为自定义用户拥有读写权限-->
setfacl -b hello <!--清空hello文件的ACL权限-->
- mask值限定了ACL中除所有者、其他人外其他用户能够达到的最高权限。修改个别自定义用户、自定义组的权限会导致umask值变化,进而影响其他权限,故umask只能在自定义用户与自定义组权限设置完毕后再统一调整。
- getfacl 查看文件ACL
getfacl file ...
- ACL生效顺序:所有者,自定义用户,自定义组,其他人
- 复制文件保留ACL设置:
cp -p