您的位置:首页 > 其它

文件权限管理

2019-07-13 07:07 190 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_42996595/article/details/95670778

linux中的文件权限管理

文件权限的意义

文件权限是保障系统安全的底层机制之一
它规定了不同用户对于同一文件的不同操作权限

文件权限的查看

ls -l file
ls -ld dir
ll file
ll -d dir
执行结果如下图:

-| rw-rw-r-- | 1 | kiosk | kiosk | 102 | Jul 21 09 : 18 | Filename
文件权限可以划分为8列(上面以 | 隔开)
1.文件类型:
- 空文件或者文本
d 目录
l 软链接
s socket 套接字
b block 块设备
p 管道文件
2.文件的权限:
rw-|rw-|r–
该部分又可以分为3小部分
rw-: 【u】文件拥有者对该文件的操作权限
rw-: 【g】文件拥有组对该文件的操作权限
r- -: 【o】其他用户(不属于前两者的用户)对该文件的操作权限
(r:读取权限 w:写入权限 x:执行权限 :权限未启用)
3.文件的硬链接数量:
1 链接分为硬链接和软链接,这里的硬链接说明了该文件被系统记录的次数
4.文件所有者:
kiosk 该文件的所属用户为 kiosk
5.所属用户组:
kiosk 该文件的所属用户组为kiosk
6.文件大小:
102 byte 该文件的大小为102字节
7.文件最后一次修改时间:
Jul 21 09 : 18 该文件最后一次修改时间为Jul 21 09 : 18
8.文件名:
Filename 该文件的文件名为Filename

改变文件的所有人(拥有者)和所有组(拥有组)

chown
chown username file/dir 将file/dir的所有人更改为该用户
chown user :group file/dir 将file/dir的所有人和所有组更改为该用户和该用户组
chown -R user :group dir 递归更改dir及其内部子文件的所有人和所有组为该用户和该用户组
chgrp
chgrp group file/dir 将file/dir的所有组更改为该用户组
chgrp -R group dir 递归更改dir及其内部子文件的所有组为该用户组

下图为例:
在上图的基础上,分别更改file和dir的所有人(root—>student)和所有组(root—>student)
以及同时更改所有人和所有组,递归更改目录以及目录内的子文件的文件权限



改变文件的用户权限

权限对文件的具体意义
对文件
r :从文件读取内容的权限
w :向文件内写入内容的权限
x :通过文件名称调用文件内记录的程序的权限
对目录
r :读取目录内的子文件或子目录的权限
w :对目录内容(子文件,子目录)的元数据进行修改的权限
x :进入目录内的权限
更改文件权限的方式
chmod
(1)chmod < u g o >< + - = >< r w x > file/dir
如:
chmod u+x /mnt/file1 给用户u(所有者)权限中的x启用
chmod ug-r /mnt/file1 给用户u,g(所有者,所有组)权限的r取消启用
chmod u+x,g-r /mnt/file1 给用户u(所有者)权限中的x启用,同时给用户g(所有组)权限中的r取消启用
chmod -r /mnt/file1 给所有用户(所有者,所有组,其他)权限中的r取消启用
chmod o=r-x /mnt/file1 给用户o(其他)权限赋值为r-x(读,未启用,可执行)
注意:
这种方式的缺点是命令较长,且需要知道原权限
下图为例:
chmod -r file执行前后
chmod ug-r file执行前后
chmod u=rwx file执行前后

(2)chmod 600 /mnt/file1 将每位权限用二进制表示,3位的权限用8进制表示
(如:r w - | r - - | r - - == 644,每3位权限用一位8进制表示,r权值为4,w权值为2,x权值为1)
下图为例:
chmod 222 file执行前后

文件系统的预留阀值

系统需要考虑两方面:功能性,安全性(二者是矛盾的)
开放的越多,功能越多,但安全会降低;而开放的越少,安全越高,但功能会降低

UMASK预留阀值
文件初始创建时,其默认的用户权限由预留阀值来决定。
普通文件的默认权限: 777(满权限,权限上限)—预留阀值(一般为022)— 111
目录文件的权限: 777(满权限,权限上限)—预留阀值(一般为022)
下图为例:
改变预留阀值
(1)临时改变: umask 077
执行结果如下:

(2)永久改变: (更改系统的配置文件)
永久更改步骤:
1.vim /etc/profile 检索关键字/umask ,更改其值(往大了改,安全性高;往小了改,功能性高)
:wq 保存并退出
2.先看一下shell当前umask,shell只是在刚打开时读取了一下两个配置文件,umask的值仍为初始值
3.使用source /etc/profile 命令分别再加载一下这两个配置文件,再使用umask 查看一下就会发现更改成功了
下图为例:

文件的用户权限的特殊位

特殊位
特殊位的产生主要是因为之前已经有的权限位,无法很好地去描述一些特殊的用户权限需求。
特殊位也是3位(s s t),可以用一个8进制来表示(–t=001 是8进制的1)(同时具有t权限和rwx权限=1777,第一个1是特殊位的8进制数)
(1)t sticky 粘制位
对于文件是将文件提前保存在磁盘分区,现在已经很少使用
t主要是针对目录,针对公共目录(public),想要让全部用户都可以在目录内写入文件,但是只有文件的拥有者才能删除文件
(而r,w,x三位只能实现公共目录内,所有人都可以新建或删除公共目录内的任一文件)
设定权限如下:
chmod o+t dir
chmod 1777(1nnn) dir
二者等价
执行结果如下:

实际应用如下:
图一在根目录下建立了一个公共文件夹/public/,并将其用户权限设置为777,建立两个用户user1,user2,监控/public/本身文件的用户权限,以及该目录下的的文件
图二三显示了分别使用user1和user2在/public/目录下建立属于自己的文件file1,file2,且可以见到,在图三中,user2成功地删除了属于user1的文件file1
而在图四中,将/public/的用户权限更改为1777
图五中,user1试图删除属于user2的文件file2失败,系统提示权限不够





(2)s sgid 强制位
对于文件:只针对二进制可执行文件
当文件拥有sgid权限时,任何用户,执行此文件产生的进程都属于文件的所有者
对于目录:当目录文件有sgid权限时,任何人在此目录中建立的文件都属于目录的所有组
设定权限如下:
chmod g+s file/dir
chmod 2777(2nnn) file/dir
二者等价
执行结果如下:

实际应用如下:
图一在一个窗口中监控属于cat的进程,另一个窗口以user1的用户身份执行cat命令,让这个进程一直占用命令行窗口
而图二,则是在更改了cat文件的权限后,user1重新创建cat的进程,可见二者的所有组不同


(3)s suid 冒险位
程序的进程也有所有者(其所有人就是执行该命令的用户,而与文件属性中文件的所有人无关)
但是通过冒险位,使得所有命令的执行人都是以文件的所有者身份来执行的(也因此,该进程的所有者也是程序文件本身的所有者)
注意:
该位权限只针对二进制可执行文件
设定权限如下:
chmod u+s file/dir
chmod 4777(4nnn) file/dir
二者等价
执行结果如下:

实际应用与sgid一致,这里不再插图

文件权限列表facl(file access control list)

从上面的这些文件权限可以看到,它们仍然是对于特定的某一类用户的权限的规定与描述。而无法实现对于指定的用户的特殊权限的实现

权限列表的设定
对于特定的用户有特殊的权限
当设置第一个特殊权限的用户时,权限列表自动开启(ls -l查看时会发现第二列的一串表示权限的字符后有+号),而将特殊权限用户从权限列表中都删除并不能关闭权限列表,要用命令关闭
示例:
setfacl -m(更改) u:westos:0 /pub/ 更改/pub/文件的权限,westos用户对该文件的权限为0
setfacl -m g:lee:rx /pub/ 更改/pub/文件的权限,lee用户组对该文件的权限为r - x
setfacl -x(删除) u:westos /pub/ 删除westos用户对于/pub/的特殊权限
setfacl -x g:lee /pub/ 删除lee用户组对于/pub/的特殊权限
setfacl -b(关闭) /pub/ 关闭该目录文件/pub/的文件权限列表
下图为例:
从以下两图可以看出,即便在使用-b参数关闭权限列表以前,不删除所设置的关于admin用户的特殊权限,通过设置leo的特殊权限再开启权限列表后也不会保留之前设置的关于admin用户的特殊权限
(getfacl 在权限列表关闭时也仍然可以查看)

权限列表的查看
getfacl /pub/ 查看/pub/目录的权限列表
注意:
权限列表中的mask是能赋值给该用户的最大的权限值,一般当权限列表已经写好后,就不会再写类似于:chmod g-x /pub/这样的命令了,否则会更改mask的值(一般本来是rwx,会被改为rw-)
如果更改了,使用以下命令恢复mask: setfacl -m m:rwx /westos (rwx为原来的值)
下图为例:
图一为使用chmod更改了mask的值后的file文件的facl
图二为使用setfacl -m m:rwx /westos 命令恢复后的


d(deafult默认的,后来的)只对该命令之后的文件起作用
-k 关闭该默认的,给文件夹内部文件增加权限列表
一般是这样使用的:setfacl -m d:m:student:rwx /pub/ 这个命令不会对/pub/该文件夹本身有什么权限改变(只是会多出default列表),但是会令之后在该目录中建立的文件的权限列表中多出student:rwx
想要取消这个功能则使用该命令:setfacl -k /pub/
下图为例:
建立文件夹dir,设置deafult权限,在其内部建立文件file,察看齐文件属性。取消deafult权限后,在创建file1,查看其权限。与上述文字功能均吻合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: