linux文件权限

                                                                         linux文件权限


当我们使用ll命令查看文件时,可以看到文件的一些信息,今天我们来了解下这些信息都是些什么

blob.png

-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

前提:进程有属主和属组;文件有属主和属组

  1. 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限

  2. 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组

  3. 进程访问文件时的权限,取决于进程的发起者 

     a.进程的发起者,同文件的属主;则应用文件属主权限

     b.进程的发起者,属于文件属组;则应用文件属组权限

     c.进程的发起者,是other,则应用文件”其他“权限

 

SUID:

执行/etc/cat文件

blob.png

qiuwei     2184  0.0  0.0 100944   548 pts/0    S+   08:10   0:00 cat

blob.png

用命令ps aux知cat命令的拥有者是用户qiuwei,不是属主root用户,而且进程访问文件的权限是用户qiuwei的,

因为如果权限是属主root的话,我们是可以访问/etc/shadow文件的

/etc/shadow文件是用来管理用户密码的,任何人都无权限,root用户除外,很显然普通用户是无法更改/etc/shadow 文件的

那么普通用户是怎么实现密码修改的呢

passwd是修改密码的命令,我们就是通过执行passwd命令,来访问修改shaodw文件的,我们来看下passwd这个可执行文件有什么特殊的

blob.png

passwd文件和cat文件区别在于属主的权限上,passwd多了个s,少了x,看来关键就是这个s了,给cat文件加上s权限,看看结果

blob.png

blob.png

刚才执行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

  1. getfacl -R  /tmp/dir1 > acl.txt

  2. setfacl -R  -b  /tmp/dir1

  3. setfacl -R –set-file=acl.txt  /tmp/dir1

  4. getfacl -R /tmp/dir1

原创文章,作者:qiuwei,如若转载,请注明出处:/28059

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-07 22:57

    文章整体思路清晰,从权限介绍、管理到特殊权限,都有了相应的认识和理解。

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达登录  万达直属QQ  万达主管QQ  guoqibee.com  万达直属  万达娱乐主管QQ  万达娱乐直属QQ  万达娱乐开户  万达招商  华宇招商