linux文件权限
当我们使用ll命令查看文件时,可以看到文件的一些信息,今天我们来了解下这些信息都是些什么
-rw-r--r-- 1 root root 0 Aug 3 19:13 f2
-:指的是文件类型
rw-r–r–:权限 ==>前三位表示属主的权限,中三位表示属组的权限,后三位表示other用户的权限
1:引用次数(硬链接次数)
root:属主(所有者)
root:属组(所属组)
0:文件大小
Aug 3 19:13 :创建时间
f2:文件名
权限:
对文件
r:read 可读取此文件的实际内容,如读取文本文件的文字内容等
w: write 可以编辑,新增或修改该文件的内容(但是不含删除该文件)
x:execute 该文件具有可以被系统执行的权限==>>针对二进制文件或脚本
X:针对目录会加上x权限,如果是文件,本身没有执行权限,那么也不会加上执行权限,对目录不影响
对目录:
x: execute 可以进入目录,可以访问目录中的文件,但是看不到里面有什么文件
r:read 进不去目录,可以看文件列表。不能访问目录内文件,文件的元数据不能查看
w: write 可以创建或删除目录中的文件,但是要匹配x权限
X:和x等价
假如对目录有写和执行,就可以删除里面的任何文件,里面文件u=,也一样
文件权限的对象:
属主:u
属组:g
other:o
chown:设置文件的属主
[root@localhost qiuwei]# ll total 8 -rw-r---w- 1 root root 4 Aug 3 19:53 f2 drwxr-xr-x 2 root root 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chown qiuwei f2 ==>属主改为用户qiuwei [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 root root 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chown qiuwei:qiuwei fff ==>属主和主组也可一起修改,用”:“隔开,也可用”.“ [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]#
chgrp:设置文件的属组信息
[root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 root root 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chgrp qiuwei fff ==>修改目录fff的属组为qiuwei [root@localhost qiuwei]# [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 root qiuwei 4096 Aug 3 20:12 fff
[root@localhost qiuwei]# chown qiuwei fff [root@localhost qiuwei]# ll fff total 0 -rw-r--r-- 1 root root 0 Aug 3 20:12 abc ==>修改了目录fff的属主,但是目录里面的文件abc属性并没有变 [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei root 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chgrp -R qiuwei fff ==>加上-R选项,修改目录fff的属组,看看目录里面的abc如何 [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# ll fff total 0 -rw-r--r-- 1 root qiuwei 0 Aug 3 20:12 abc ==>abc文件属组也随之修改了 [root@localhost qiuwei]#
文件权限的修改
用八进制的数字表示
— 000 ==>0
–x 001 ==>1
-w- 010 ==>2
-wx 100 ==>3
r– 011 ==>4
r-x 101 ==>5
rw- 110 ==>6
rwx 111 ==>7
所以我们表示文件权限也可以说775(rwxrwxr-x), 620(rw–w—-)666(rw-rw-rw-)
chmod:修改文件的权限
修改一类用户的所有权限:
u=rwx g=rw o= a=rwx ==>没有就是默认没有此权限
修改一类用户的某些权限
u+x o+w a+r …
[root@localhost qiuwei]# ll total 8 -rwxr-x-wx 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod a= f2 ==>所有人对f2没有任何权限 [root@localhost qiuwei]# ll total 8 ---------- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod o+r f2 ==>f2文件other增加r权限 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff
-R:递归修改,你懂的
[root@localhost qiuwei]# ll fff total 0 -rw-r--r-- 1 root qiuwei 0 Aug 3 20:12 abc ==>abc原本权限644 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod -R a=rwx fff ==>fff目录和里面的文件abc权限都设置为777的权限 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 drwxrwxrwx 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# ll fff total 0 -rwxrwxrwx 1 root qiuwei 0 Aug 3 20:12 abc [root@localhost qiuwei]#
我们也可以用八进制数字来修改
[root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 drwxrwxrwx 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod 000 fff ==>修改为任何人对fff目录都没有权限 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 d--------- 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod 555 fff ==>修改为任何人对fff目录都只有r和x权限 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 dr-xr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]#
umask:
用来设置限制新建文件夹权限的掩码。当新文件被创建时,其最初的权限是由文件创建掩码决定。用户进入系统时,umask命令都会被执行,
并自动设置掩码mode来限制新文件的权限。用户可以通过执行umask命令来修改默认值,
查看umask配置文件
全局设置:/etc/bashrc 用户设置:~/.bashrc
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022
以上表示如果uid号大于199且用户名和组名相同,则umask默认为002,否则umask默认为022
对一般文件而言,是不需要执行(x)权限的,所以一般文件全部权限为666,目录文件为777
umask+默认权限=666(文件)/777(目录)
所以对root用户,默认新建文件权限为644,目录权限为755、
对普通用户,默认新建文件权限为664,目录文件为775
umask修改默认值
我们假设umask=125,来看看新建文件权限究竟是多少
在root用户下:
umask=125,则新建文件默认权限应为666-125=541
新建目录默认权限应为777-125=652
[root@localhost qiuwei]# umask 0125 [root@localhost qiuwei]# touch a [root@localhost qiuwei]# mkdir b [root@localhost qiuwei]# ll total 0 -rw-r---w- 1 root test 0 Aug 3 21:28 a ==>a文件权限为642 drw-r-s-w- 2 root test 6 Aug 3 21:28 b ==>b目录权限为652
对比看来目录权限一致,但是文件权限却有差异
这是因为我们前面有说到,我们一般系统默认文件是不需要执行(x)权限的,而我们知道541权限表示属主有rx权限,
other有执行(x)权限,这不符合系统设定,所以这种情况下,默认的文件权限如果有奇数就自动加1,偶数就保留,
因为如果文件权限有奇数,就一定代表文件有执行(x)权限 ==>r=4 w=2 x=1
或者也可以这样理解:
用八进制数表示
文件权限 110 110 110 ==>666
umask设定 001 010 101 ==>125
新建文件权限 110 100 010 ==>642
umask设置可以理解为:屏蔽掉属主x权限,属组w权限。other的rx权限,,所以文件权限上面有umask要屏蔽的就屏蔽了,没有的就保留原权限,所以结果就是642
umask从目录或文件上屏蔽掉最大权限相对应的位,从而得出默认权限
umask也可用模式发表示
[root@localhost qiuwei]# umask u=rw,g=r,o= ==>新建文件属主有rw权限,属组有r权限,other无权限 [root@localhost qiuwei]# umask 0137 [root@localhost qiuwei]# touch aaa [root@localhost qiuwei]# ll total 8 -rw-r----- 1 root root 0 Aug 4 09:24 aaa
linux文件系统的特殊权限
SUID SGID Sticky
属主 属组 other
前提:进程有属主和属组;文件有属主和属组
-
任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限
-
启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组
-
进程访问文件时的权限,取决于进程的发起者
a.进程的发起者,同文件的属主;则应用文件属主权限
b.进程的发起者,属于文件属组;则应用文件属组权限
c.进程的发起者,是other,则应用文件”其他“权限
SUID:
执行/etc/cat文件
qiuwei 2184 0.0 0.0 100944 548 pts/0 S+ 08:10 0:00 cat
用命令ps aux知cat命令的拥有者是用户qiuwei,不是属主root用户,而且进程访问文件的权限是用户qiuwei的,
因为如果权限是属主root的话,我们是可以访问/etc/shadow文件的
/etc/shadow文件是用来管理用户密码的,任何人都无权限,root用户除外,很显然普通用户是无法更改/etc/shadow 文件的
那么普通用户是怎么实现密码修改的呢
passwd是修改密码的命令,我们就是通过执行passwd命令,来访问修改shaodw文件的,我们来看下passwd这个可执行文件有什么特殊的
passwd文件和cat文件区别在于属主的权限上,passwd多了个s,少了x,看来关键就是这个s了,给cat文件加上s权限,看看结果
刚才执行cat命令访问shadow文件时,显示权限不够的,但是给cat加了s权限后,可以直接访问shadow文件了,
这个s权限就是SUID
SUID:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子。
我理解为:当一个文件的属主拥有s权限时,其他用户执行此文件后,进程属主将获得此文件属主的权限,上面的cat执行后,拥有了root的权限,所以可以访问shadow文件了
SUID只针对二进制可执行程序有效
SUID设置在目录上无效
s权限设定: chmod u+s file
chmod u-s file
用八进制数字表示为4
SGID:如果理解了上面SUID,这个SGID也是一样的
组的执行位加上s,普通用户调用程序时,得到的是组的权限
在此说明:root用户权限很大,类似于天神,无所不能,而root组权限和普通用户组差不多
s权限设定:chmod g+s file
chmod g-s file
用把八进制数字表示为2
SGID作用在目录上时:
对目录加上g+s,任何人不管是不是目录所在组的成员,在里面创建文件时,该目录里面的文件属组继承目录的属组
即作用在目录上,将使在该目录中新建目录或文件将自动继承该目录所属组
[root@localhost qiuwei]# ll total 8 -rw-r----- 1 root root 0 Aug 4 09:24 aaa -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 dr-xr-srwx 2 root root 4096 Aug 4 10:29 fff ==>目录fff有s权限,属组是root [root@localhost qiuwei]# cd fff [root@localhost fff]# su qiuwei ==>切换到普通用户qiuwei [qiuwei@localhost fff]$ ll total 0 -rw-rw-r-- 1 qiuwei root 0 Aug 4 10:29 1114 -rw-r----- 1 root root 0 Aug 4 10:04 123 -rw-r----- 1 root root 0 Aug 4 10:28 321 [qiuwei@localhost fff]$ touch test ==>创建新文件test [qiuwei@localhost fff]$ ll total 0 -rw-rw-r-- 1 qiuwei root 0 Aug 4 10:29 1114 -rw-r----- 1 root root 0 Aug 4 10:04 123 -rw-r----- 1 root root 0 Aug 4 10:28 321 -rw-rw-r-- 1 qiuwei root 0 Aug 4 10:30 test ==>文件的属组为root,而不是普通用户qiuwei
Sticky
当用户对一个目录拥有写权限时,是可以删除目录里面的任何文件,无论该文件的权限或拥有者
为了避免这种情况,我们在目录设置Sticky位,只有文件的所有者或root可以删除该文件
权限设定:
chmod o+t DIR
chmod o-t DIR
[root@localhost fff]# ll total 0 -rw-rw---- 1 root root 0 Aug 3 20:12 abc ==>other用户对abc文件无任何权限 [root@localhost fff]# su qiuwei [qiuwei@localhost fff]$ ll total 0 -rw-rw---- 1 root root 0 Aug 3 20:12 abc [qiuwei@localhost fff]$ rm -rf abc ==>可以删除abc文件 [qiuwei@localhost fff]$ ll total 0 [qiuwei@localhost fff]$
给fff目录增加t权限后
[root@localhost qiuwei]# chmod o+t fff ==>给fff目录增加t权限 [root@localhost qiuwei]# ll total 8 -rw-r----- 1 root root 0 Aug 4 09:24 aaa -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 dr-xr-xrwt 2 root root 4096 Aug 4 09:51 fff [root@localhost qiuwei]# touch fff/123 [root@localhost qiuwei]# cd fff/ [root@localhost fff]# ll total 0 -rw-r----- 1 root root 0 Aug 4 10:04 123 [root@localhost fff]# su qiuwei [qiuwei@localhost fff]$ rm -rf 123 rm: cannot remove `123': Operation not permitted ==>给fff目录增加t权限,其他用户就无法删除123文件 [qiuwei@localhost fff]$ ll total 0 -rw-r----- 1 root root 0 Aug 4 10:04 123 [qiuwei@localhost fff]$ touch 111 [qiuwei@localhost fff]$ ll total 0 -rw-rw-r-- 1 qiuwei qiuwei 0 Aug 4 10:18 111 ==>可以创建文件 -rw-r----- 1 root root 0 Aug 4 10:04 123 [qiuwei@localhost fff]$ rm -rf 111 ==>可以删除自己的文件 [qiuwei@localhost fff]$ ll total 0 -rw-r----- 1 root root 0 Aug 4 10:04 123 [qiuwei@localhost fff]$
t权限用把八进制数字表示为1
权限位映射:
SUID: user, 占据属主的执行权限位
s:属主拥有x 权限
S:属主没有x 权限
SGID: group, 占据属组的执行权限位
s:group 拥有x 权限
S:group 没有x 权限
Sticky:other, 占据other 的执行权限位
t:other 拥有x 权限
T:other 没有x
设定文件特定属性
chattr
+i:不能删除改名,更改文件,任何人
-i:取消上面设置
+A:不让修改文件时间戳
-A:取消上面设置
+a:可以修改内容,但是不能移动改名删除
-a:取消上面设置
lsattr:显示特定属性
访问控制列表
ACL:Access Control List,实现灵活的权限管理
除了文件的属主属组,other,可以对更多的用户设置权限
ACL生效顺序:属主,自定义用户,自定义组,其他人
setfacl -m u:qiuwei:rwx file==>属主
[root@localhost fff]# ll total 4 -rw-r----- 1 root root 4 Aug 4 11:08 123 ==>other用户qiuwei对文件123无任何权限 [root@localhost fff]# setfacl -m u:qiuwei:rwx 123 ==>定义用户qiuwei对文件123特殊权限rwx [root@localhost fff]# su qiuwei ==>切换到qiuwei用户 [qiuwei@localhost fff]$ ll total 4 -rw-rwx---+ 1 root root 4 Aug 4 11:08 123 ==>权限后面出现了+ [qiuwei@localhost fff]$ cat 123 ==>可正常访问123文件 123 [qiuwei@localhost fff]$
setfacl -m g:qiuwei:rwx file==>属组
setfacl -x u:qiuwei file删除acl权限
setfacl -Rm g:qiuwei:rwx directory ==>递归设置,目录里面的文件也一并设置
也可批量设置
setfacl -M file.acl file|directory 批量设置
setfacl -X file.acl directory 批量删除
mask值:
当文件有acl权限时,group权限就是mask值,
[root@localhost fff]# setfacl -m u:qiuwei:r 123 ==>S设置ACL权限 [root@localhost fff]# [root@localhost fff]# ll total 4 -rw-r-----+ 1 root root 4 Aug 4 11:08 123 [root@localhost fff]# getfacl 123 # file: 123 # owner: root # group: root user::rw- user:qiuwei:r-- group::r-- mask::r-- ==>只有r权限 other::--- [root@localhost fff]# chmod g+w 123 [root@localhost fff]# ll total 4 -rw-rw----+ 1 root root 4 Aug 4 11:08 123 ==>属组加w权限 [root@localhost fff]# getfacl 123 # file: 123 # owner: root # group: root user::rw- user:qiuwei:r-- group::r-- mask::rw- ==>也加上了w权限 other::---
它针对的是除了文件属主和other之外的用户的最大权限
属组和acl特殊权限用户的权限只能比mask的权限低,如果某权限位比mask高,也会被屏蔽,不会拥有此权限
,比mask低的保留其原权限
[root@localhost fff]# setfacl -m m::r 123 ==>设定mask权限为r [root@localhost fff]# getfacl 123 # file: 123 # owner: root # group: root user::rw- user:qiuwei:rwx #effective:r-- ==>qiuwei用户acl权限为rwx,但是有效权限只有r group::r-- mask::r-- other::--- [root@localhost fff]# su qiuwei [qiuwei@localhost fff]$ ll total 4 -rw-r-----+ 1 root root 4 Aug 4 11:08 123 [qiuwei@localhost fff]$ echo 111 >123 ==>qiuwei用户无法修改123文件 bash: 123: Permission denied [qiuwei@localhost fff]$ cat 123 ==>qiuwei用户可读123文件 123
用户和组的权限设置必须存在于mask权限设定范围内才会生效
备份和恢复ACL
-
getfacl -R /tmp/dir1 > acl.txt
-
setfacl -R -b /tmp/dir1
-
setfacl -R –set-file=acl.txt /tmp/dir1
-
getfacl -R /tmp/dir1
原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/28059
评论列表(1条)
文章整体思路清晰,从权限介绍、管理到特殊权限,都有了相应的认识和理解。