Linux文件权限管理-2016-8-04

Linux文件权限管理

学习大纲

一 关于文件和目录的权限基本概述(rwx);

二 针对文件或目录权限管理的命令:

a) 相关命令:chown , chgrp ,chmod

chown修改文件属主 和 属组

语法:chown  [OPTION]…  [OWNER][:[GROUP]]  FILE…

命令中的冒号可用.替换;

OWNER

OWNER:GROUP

:GROUP

参数:

-R: 递归,针对目录批量修改目录和目录以下的文件属主 属组;

chown [OPTION]… –reference=RFILE FILE…

file文件的属主和属组与 rfie的文件的一样 

例如:chowm  user1:root test.txt =>修改文件属主为user1,属组为root

  chown  -R  :root test-dir  =>修改目录下的所有文件属组为 root   

chgrp修改文件的属组(语法和chown差不多)

语法:chgrp[OPTION]… GROUP FILE…

chgrp[OPTION]… –reference=RFILE FILE…

参数: -R 递归 

chmod修改文件或目录权限

语法:chmod  [OPTION] …  MODE(权限表示法)  FILE…

权限表示法通常分为两类:

MODE一:用户表示法

修改一类用户的所有权限:

u=  g=  o=  ug=  a=  u=,g=

修改一类用户某位或某些位权限

u+   u-   g+   g-   o+   o-   a+   a-   +   –

MODE二:数字表示法

Chmod   775   test.txt ==chmod u=rwx,g=rwx,o=r-x test.txt

 

参数:

-R: 递归修改权限

chmod[OPTION]… –reference=RFILE FILE…

  参考RFILE文件的权限,将FILE的修改为同RFILE

 

三 特殊文件权限 :SUID,SGID,Sticky

SUID : 只能作用于二进制程序文件有效,作用于目录无效;

功用 : 当用户执行SUID权限的二进制文件时,获取文件属主权利;

如:passwd 命令

操作: chmodu   +s  FILE…

chmodu   -s   FILE…

 

SGID : 可作用于二进制程序文件或目录;

作用文件时:当用户执行SGID权限文件时,获得文件属组权利;

作用于目录时:任何用户在有SGID权限的目录下创建文件时,文件的属组都为目录的的属组

操作: chmod  g+s  DIR | file…

chmod  g-s  DIR | file…

 

Sticky :只能作用于目录有执行与修改的目录上,对文件无效;

功用:当用户对目录有执行和修改权限时,不再能删除不属于自己的文件;

例如:/tmp的目录具有Sticky 权限。

操作: chmod  o+t   DIR…

chmod  o-t   DIR…

 

四 特定文件特性属性: chattr  , lasttr

管理员root对所有文件有自高无上的权利,为了避免误删除我们需要对文件做一些的特殊的文件权限处理,比如:不能删除,改名,更改等等,我们就会用到 chattr 命令对文件进行特殊权限处理。

语法:chattr [ -RVf ]  [ -v version ] [ mode ]  files…
           [mode]部分是由+-=[ASacDdIijsTtu]这些字符组合的,这部分是用来控制文件的属性。
参数:

+ :在原有参数设定基础上,追加参数。
    :在原有参数设定基础上,移除参数。

= :更新为指定参数设定。
A:文件或目录的 atime (access time)不可被修改(modified)

S:硬盘I/O同步选项,功能类似sync
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,只有root才能设定这个属性。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。

j:即journal,设定此参数使得当通过mount参数

s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion

 

五 文件访问控制列表: getfacl  ,  setfacl

在实际工作中个,可能会有让某个特定的用户不能访问某个文件,让某个组不能访问某个目录,如果只是使用前面的权限控制做不到精确的文件权限管理,我们就可以使用 文件的ACL控制来管理文件权限了。

ACLAccess Control List,实现灵活的权限管理

除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

注意:

CentOS7.0默认创建的xfsext4文件系统有ACL功能。

CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:

tune2fs o acl   /dev/sdb1

mount o acl    /dev/sdb1     /mnt

ACL生效顺序:所有者,自定义用户,自定义组,其他人

 

getfacl语法:

mount -o acl /directory  #挂载是启用ACL功能

getfacl file |directory  #查看文件或目录的ACL控制列表

getfaclfile1 | setfacl–set-file=-file2 复制file1acl权限给file2

setfacl 语法:

setfacl -m u:chen:rwx file|directory  #设置用户对文件或目录的有rwx权限

setfacl -Rm g:lovemegroup:rwX directory  #递归设置组对目录有rwX权限

setfacl -M file.acl file|directory  #从文件中读取用户控制列表信息

setfacl -m g:salesgroup:rw file| directory

setfacl -m d:u:wang:rx directory

setfacl -x u:wang file |directory  #删除用户在文件或目录上的特殊权限

setfacl -X file.acl directory  #删除ACL文件列表中

setfacl-k dir   #删除默认ACL权限

setfacl-b file1  #清除所有ACL权限

mask的作用:

mask只影响除所有者和other的之外的人和组的最大权限

mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

用户或组的设置必须存在于mask权限设定范围内才会生效。

setfacl-m mask::rxfile

v–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象  -m一样只是添加ACL就可以.如:

vsetfacl –set u::rw,u:wang:rw,g::r,o::-file1

备份和恢复ACL:

主要的文件操作命令cpmv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息

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

#setfacl -R -b /tmp/dir1

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

#getfacl -R /tmp/dir1

 

六 测试案例

测试一:关于文件或目录的属主,属组,其它用户权限的测试

测试二:目录的权限位对其意义的测试说明

测试三:关于 SUID SGID STICKY权限测试说明

测试四:关于特定文件特性属性: chattr  , lasttr测试

测试五:文件访问控制列表: getfacl  ,  setfacl测试

 

一.关于文件和目录的权限基本概述:

111.png

 

我们ls  -l 查看文件的时候,会看到以上图片上的信息,不同的字段表示不同的意义,我们单独的来说明一下:

权限: rw- r– r– ,开头一个 表示文件为普通文件类型,后面没三位一组,表示属主权限,属组权限,其它人权限;

引用计数:表示该文件的 硬链接计数,1便是没有硬链接计数;

所有者:属主,表示该文件是由谁创建的,是该文件的所有者;

所属组:属组,表示该文件的所属组是那个组;

文件大小:26195表示文件为26195字节大概为 26K左右;

创建时间:什么时间创建的;

文件名:文件的名称

 

注意:查看文件和目录的看到的信息大都是以上差不多的信息,上面说明也通用

 

文件权限的 : R  W  X

–    rw-    r–    r–

通常我们每三个一组表示一类权限分别为:属主,属组,其它人

文件的权限主要针对三类对象进行定义:

owner: 属主, u (rw-)

group: 属组, g (r–)

other: 其他, o (r–)

每个文件针对每类访问者都定义了三种权限:

r: Readable  ,   w: Writable  ,  x: eXcutable

通常我们以下图表示:

 


权限.png 

 

 

-rw-r–r–:表示这个权限为:644

X的权限我们现在不管它,我们后面会介绍到 

关于不同的权限,文件或目录有一下的意义,我们稍后来测试:

文件:

r: 可使用文件查看类工具获取其内容

w: 可修改其内容

x: 可以把此文件提请内核启动为一个进程

目录:所以建议最好的目录权限为:rwxr-x

r: 可以使用ls查看此目录中文件列表

w: 可在此目录中创建文件,也可删除此目录中的文件(不是自己的文件也可以删除)

x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录

X:只给目录x权限,不给文件x权限  

测试一:关于文件或目录的属主,属组,其它用户权限的测试。

现在有三个用户user1 , user2 , user3 , 一个附加组loveme  ;  user1 , user2属于附加组loveme user3没有附加组,看看三个用户对于文件访问权限如何?

确认三个用户的属组

[root@love681 ~]# groups user1
user1 : user1 loveme  #user1附加组在loveme中
[root@love681 ~]# groups user2
user2 : user2 loveme  #user2附加组在loveme中
[root@love681 ~]# groups user3
user3 : user3

查看文件的属性信息:属主user1有读写权限,属组loveme有读权限,其它用户没有权限

(即权限用八进制表示 640

[root@love681 test-dir]# ll
total 0
-rw-r----- 1 user1 loveme 0 Jul 25 22:12 test.txt  #文件属主为user1,属组为loveme

 

测试属主 user1的权限,理论应该为 可以修改,可以查看文件内容:

bash-4.1$ vim test.txt  #修改了文件
 
bash-4.1$ cat test.txt  #查看了文件
user1--------user1
user1 is ower !
 
bash-4.1$ id
uid=503(user1) gid=503(user1) groups=503(user1),504(loveme)

测试结果:属主有读写权限,也与权限位为匹配 

 

测试属组loveme用户 user2,理论应该是可以读取该文件的内容:

[user2@love681 test-dir]$ cat test.txt   #可以查看文件内容
user1--------user1 
user1 is ower !
[user2@love681 test-dir]$ echo user2...........user2 >> test.txt 
bash: test.txt: Permission denied  #无法修改文件内容
[user2@love681 test-dir]$ id
uid=501(user2) gid=501(user2) groups=501(user2),504(loveme)
[user2@love681 test-dir]$

测试结果:属组有读权限,也与权限位为匹配

 

测试其它用户 user3,理论应该是不能读取文件内容的,更不要说修改:

[user3@love681 test-dir]$ id
uid=502(user3) gid=502(user3) groups=502(user3)
[user3@love681 test-dir]$ cat test.txt 
cat: test.txt: Permission denied  #无法查看文件
[user3@love681 test-dir]$ echo user3........user3 >> test.txt 
bash: test.txt: Permission denied  #无法修改文件
[user3@love681 test-dir]$

测试结果:其它人无任何权限,也与权限位为匹配

测试二:目录的权限位对其意义的测试说明:

目录:

r: 可以使用ls查看此目录中文件列表

w: 可在此目录中创建文件,也可删除此目录中的文件

x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录

X:只给目录x权限,不给文件x权限

案例:1.我们创建一个目录 test_dir , 其权限为 rwxrw–x 属主为 user1,属组为lovemeuser2为组成员) ,测试user1 user2 user3可以对目录的操作;

2.修改user3用户对目录有 写和执行权限,测试user3可以由哪些操作?

 

新建目录权限为:761

[root@love681 test-dir]# ll
total 8
drwxrw---x 2 user1 loveme 4096 Jul 25 22:47 test_dir #目录权限设置为 761

 

User1测试:在目录下新建文件,修改root文件,删除root文件

 

[user1@love681 test-dir]$ cd test_dir/  #user1可以正常进入目录
[user1@love681 test_dir]$ ll
total 8
-rw-r--r-- 1 root root 11 Jul 25 22:47 root1
-rw-r--r-- 1 root root  8 Jul 25 22:47 root222
 
[user1@love681 test_dir]$ touch user111  #可以正常的新建文件
[user1@love681 test_dir]$ echo 123456789 > root1 #不可修改root的文件
bash: root1: Permission denied
 
[user1@love681 test_dir]$ rm root1      #可以删除root的文件
rm: remove write-protected regular file `root1'? Y 
 
[user1@love681 test_dir]$ ll   #确认已经删除了root的文件了
total 4
-rw-r--r-- 1 root  root  8 Jul 25 22:47 root222
-rw-rw-r-- 1 user1 user1 0 Jul 25 22:51 user111

测试结果:用户对目录有rwx权限,可以正常进入目录,正常的显示目录下的文件,可以正常的新建 删除自己的文件,还可以删除不是自己的文件。

 

User2用户测试,user2用户对目录权限为rw ,测试:新建文件,删除文件,进入目录。

 

[user2@love681 test-dir]$ cd test_dir/ 
bash: cd: test_dir/: Permission denied  #无法进入目录 
 
[user2@love681 test-dir]$ ll test_dir/  #可以显示目录的下的文件名,其它的无法显示
ls: cannot access test_dir/user111: Permission denied
ls: cannot access test_dir/root222: Permission denied
total 0
-????????? ? ? ? ?            ? root222
-????????? ? ? ? ?            ? user111
 
[user2@love681 test-dir]$ touch test_dir/user22  #无法新建目录下的文件
touch: cannot touch `test_dir/user22': Permission denied
 
[user2@love681 test-dir]$ rm test_dir/user111  #无法删除目录下的文件
rm: cannot remove `test_dir/user111': Permission denied

测试结果:用户对某个目录有读写权限,无执行权限,只能查看下目录下的文件名,其它的什么都做不了,证明目录的执行权限对用户非常的重要。

 

User3用户权限为执行权限,测试用户:新建文件,删除文件,进入目录。

[user3@love681 test-dir]$ cd test_dir/   #可以正常的进入目录
[user3@love681 test_dir]$ ll    #无法查看目录下的文件
ls: cannot open directory .: Permission denied
[user3@love681 test_dir]$ touch user3    #无法新建文件
touch: cannot touch `user3': Permission denied
[user3@love681 test_dir]$ rm user111 
rm: remove write-protected regular empty file `user111'? Y    #无法删除文件
rm: cannot remove `user111': Permission denied

测试结果:用户对目录有执行权限,只能进入该目录,其它的任何权限,所以单纯的给用户执行权限没有任何的意义,需要配合读 或写 的权限配合使用。

 

2.修改用户user3对目录有写和执行的权限,测试user3在目录下创建文件,删除文件,修改文件。

[user3@love681 test-dir]$ cd /tmp/test-dir/test_dir/ #可以正常的进入该目录下面
[user3@love681 test_dir]$ ll  #无法显示目录下文件列表
ls: cannot open directory .: Permission denied 
[user3@love681 test_dir]$ touch user3  #不可新建文件
[user3@love681 test_dir]$ ll
ls: cannot open directory .: Permission denied
[user3@love681 test_dir]$ rm user111  #知道文件名可以删除root的文件
rm: remove write-protected regular empty file `user111'? y
[user3@love681 test_dir]$ rm root1
rm: cannot remove `root1': No such file or directory
[user3@love681 test_dir]$ rm root111
rm: cannot remove `root111': No such file or directory
[user3@love681 test_dir]$ rm root
rm: cannot remove `root': No such file or directory
[user3@love681 test_dir]$ rm root222  #知道文件名可以删除root的文件
rm: remove write-protected regular file `root222'? y
[user3@love681 test_dir]$ touch user333333

 

测试结果:用户对目录有写权限和执行权限时,可以删除目录底下的文件,但是却不能看到目录下的文件列表。

 

目录权限总结测试结果:

用户对目录单单只有写权限  或 执行权限  或读权限 没有实际意义:

写权限:无法进入目录,无法在目录下创建文件,无法删除文件,无法去读目录下的文件列表;

执行权限:只可以进入目录,没有其他的功用;

读权限:可以看看文件名,没有别的功用;

读写权限:除了可以看看目录下的文件名,没有别的功用;

写 执行权限:可以删除别人的文件,不可查看目录下的文件列表,比较危险;

 

所以建议最好的目录权限为:rwxr-x

 

测试三:关于 SUID SGID STICKY权限测试说明

关于SUID权限设置说明:(用户运行SUID权限的应用程序获得属主权利,通常为root权限)

例如:我们都知道/etc/shadow文件权限为 000,任何人是不允许查看的,除了管理员;

我们再看看看cat命令的文件权限:

 

/etc/shadow文件权限

[root@love681 ~]# ll /etc/shadow
---------- 1 root root 1176 Jul 25 22:09 /etc/shadow

 

/bin/cat 命令的文件权限

[user1@love681 etc]$ ll /bin/cat 
-rwxr-xr-x 1 root root 48568 May 11 16:59 /bin/cat

 

root可以使用cat查看/etc/shadow文件内容:

[root@love681 ~]# cat /etc/shadow
root:$6$gL6ZlP4s$x89Cs/QKzuwt5V/YfJIxwgLGjooivwFzEY0WaM5ljWwdfoCNhbsc2VSjDdiVp5CZyXVTlnT7KZfQFSKhdOiBE.:17004:0:99999:7:::
pulse:!!:17004::::::
sshd:!!:17004::::::
tcpdump:!!:17004::::::
user2:$6$ZI96HEiK$/Fmi37lIugYKPJV7tZkQn2yu8f0aA42pOhl2M9iz3ovR.esjG6xVxH1UaJQIER3SnVeTXA507v.5Fi6cBC7Ha0:17004:0:99999:7:::

 

user1普通用户用cat无法查看/etc/shadow文件内容:

[root@love681 ~]# su user1
[user1@love681 root]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

 

设置/bin/cat 为suid权限后,user1再来查看/etc/shadow文件内容:

[root@love681 ~]# chmod u+s /bin/cat 
[root@love681 ~]# ll /bin/cat
-rwsr-xr-x 1 root root 48568 May 11 16:59 /bin/cat

 

user1可以使用cat命令查看 /etc/shadow文件的内容:

[root@love681 ~]# su user1
[user1@love681 root]$ whoami
user1
[user1@love681 root]$ cat /etc/shadow
root:$6$gL6ZlP4s$x89Cs/QKzuwt5V/YfJIxwgLGjooivwFzEY0WaM5ljWwdfoCNhbsc2VSjDdiVp5CZyXVTlnT7KZfQFSKhdOiBE.:17004:0:99999:7:::
pulse:!!:17004::::::
sshd:!!:17004::::::
tcpdump:!!:17004::::::
user2:$6$ZI96HEiK$/Fmi37lIugYKPJV7tZkQn2yu8f0aA42pOhl2M9iz3ovR.esjG6xVxH1UaJQIER3SnVeTXA507v.5Fi6cBC7Ha0:17004:0:99999:7:::

 

SUID小结:SUID的权限不能乱给,只在特定的条件下才更给SUID的权限,比如:用户修改密码需要通过passwd命令把密码保存到shadow文件中,此时passwd命令需要SUID权限。

关于SGID权限设置说明:

SGID作用于文件时:

 

创建一个文件属主和属组都为root

[root@love681 root_test_dir]# ll
total 4
----rw-r-- 1 root root 129 Jul 26 01:54 root_test.txt

 

普通用户user1 可以查看内容

[user1@love681 root_test_dir]$ cat root_test.txt 
roots_roots_roots_
sfjsfjlksfjlklsdjfklsajf
123456789
123456789
Wewwew

 

nano 保存数据保存,权限拒绝

[user1@love681 root_test_dir]$ nano root_test.txt  
[ Error writing root_test.txt: Permission denied ]

 

 

设置二进制程序 nano的SGID权限,使用户使用nano取得root组的权限:

[root@love681 root_test_dir]# chmod g+s /bin/nano
[root@love681 root_test_dir]# ll /bin/nano
-rwxr-sr-x 1 root root 178896 Nov 12  2010 /bin/nano

user1用户再次修改文件,文件可以正常的保存,查看页显示修改的内容:

[user1@love681 root_test_dir]$ nano root_test.txt 
[user1@love681 root_test_dir]$ cat root_test.txt 
roots_roots_roots_
sfjsfjlksfjlklsdjfklsajf
123456789
123456789
wewwew
1111111111111
222222222223
4444444444444
5555555555555555

小结:SGID作用于二进制文件时,用户使用该程序时获得是的root组的权限,root组对于root_test.txt文件时可写的,所以该用户可以修改root_test.txt的文件内容。

SGID作用于目录时:

·root新建了sgid-dir,目录属组为 root

[root@love681 root_test_dir]# ll -d sgid-dir/
drwxrwxrwx 2 root root 4096 Jul 26 03:54 sgid-dir/

 

·root新建的文件属主 与 属组都为root

[root@love681 sgid-dir]# whoami
root
[root@love681 sgid-dir]# touch root1111
[root@love681 sgid-dir]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 26 03:53 root1111

 

·user1用户新建文件的属主和属组都为 user1

[user1@love681 sgid-dir]$ whoami
user1
[user1@love681 sgid-dir]$ touch user11111
[user1@love681 sgid-dir]$ ll
total 0
-rw-r--r-- 1 root  root  0 Jul 26 03:53 root1111
-rw-rw-r-- 1 user1 user1 0 Jul 26 03:53 user11111

 

·user2用户新建文件的属主和属组都为 user2

[user2@love681 sgid-dir]$ touch user2222
[user2@love681 sgid-dir]$ ll
total 0
-rw-r--r-- 1 root  root  0 Jul 26 03:53 root1111
-rw-rw-r-- 1 user1 user1 0 Jul 26 03:53 user11111
-rw-rw-r-- 1 user2 user2 0 Jul 26 03:54 user2222
[user2@love681 sgid-dir]$ whoami
user2

 

文件目录添加SGID权限后,再在目录下新建文件后查看文件的属主和属组。

·添加目录sgid-dir的SGID权限

[root@love681 root_test_dir]# chmod g+s sgid-dir/
[root@love681 root_test_dir]# ll 
total 4
drwxrwsrwx 2 root root 4096 Jul 26 03:54 sgid-dir

 

·再使用user1在目录下新建文件 111user111,属主为user1,属组变为了root

[user1@love681 sgid-dir]$ touch 111user111
[user1@love681 sgid-dir]$ ll
total 0
-rw-rw-r-- 1 user1 root  0 Jul 26 04:34 111user111
-rw-r--r-- 1 root  root  0 Jul 26 03:53 root1111
-rw-rw-r-- 1 user1 user1 0 Jul 26 03:53 user11111
-rw-rw-r-- 1 user2 user2 0 Jul 26 03:54 user2222

 

·再使用user2在目录下新建文件 222user222,属主为user2,属组变为了root

[user2@love681 sgid-dir]$ touch 222user222
[user2@love681 sgid-dir]$ ll
total 0
-rw-rw-r-- 1 user1 root  0 Jul 26 04:34 111user111
-rw-rw-r-- 1 user2 root  0 Jul 26 04:35 222user222
-rw-r--r-- 1 root  root  0 Jul 26 03:53 root1111
-rw-rw-r-- 1 user1 user1 0 Jul 26 03:53 user11111
-rw-rw-r-- 1 user2 user2 0 Jul 26 03:54 user2222

小结:SGID权限添加在目录上,会使不管是哪个用户在下面新建文件,文件的属组一定为该目录的属组,相当与这是是这个组的成员都可以修改目录下的文件。

 

关于STICKY权限设置说明:

Sticky权限定义为:具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

在目录设置Sticky 位,只有文件的所有者或root可以删除该文件。

Linux中最明显的目录为 /tmp目录:

·查看/tmp目录权限

[root@love681 /]# ll -d /tmp
drwxrwxrwt. 10 root root 4096 Jul 26 03:32 /tmp  #STICKY权限体现在other的X位上,有表示为t;

 

·使用user1删除下面的文件试一试

[user1@love681 tmp]$ rm yum.log  #删除yun.log文件
rm: remove write-protected regular empty file `yum.log'? y
rm: cannot remove `yum.log': Operation not permitted #权限不够无法删除
[user1@love681 tmp]$ ll
total 532
-rw-rw-r--  1 user2 user2      0 Jul 22 19:07 22222
-rwx------. 1 root  root     931 Jul 22 16:03 ks-script-w1jlxI
-rwxr-xr-x. 1 root  root      67 Jul 22 16:03 ks-script-w1jlxI.log
-rw-r--r--  1 root  root     292 Jul 22 16:47 nouser
drwx------  2 root  root    4096 Jul 22 16:12 pulse-jVbgN7JshlCa
drwx------  2 gdm   gdm     4096 Jul 22 16:13 pulse-V1nHqnPjJCfc
-r--r--r--  1 root  root  506368 Jul 22 16:27 screen-4.0.3-19.el6.x86_64.rpm
drwxrwsr-x  2 root  root    4096 Jul 22 18:57 sgid
drwxrwsrwx  2 root  root    4096 Jul 22 19:08 ssgid
drwxrwxrwx  2 root  root    4096 Jul 25 23:28 test-dir
drwx------  2 root  root    4096 Jul 22 16:13 virtual-root.RvN4tH
-rw-------. 1 root  root       0 Jul 22 15:51 yum.log

 

·使用root取消tmp的STICKY权限,再次使用user1删除文件试一试

[root@love681 tmp]# chmod o-t /tmp  #取消/tmp的sticky的权限
[root@love681 tmp]# ll -d
drwxrwxrwx. 10 root root 4096 Jul 26 03:32 . #STICKY权限 t在other的X位上消失了
[root@love681 tmp]# su user1  #切换user1用户
[user1@love681 tmp]$ rm yum.log  #删除root的文件
rm: remove write-protected regular empty file `yum.log'? Y  #可以正常的删除文件
[user1@love681 tmp]$ ll 
total 532
-rw-rw-r--  1 user2 user2      0 Jul 22 19:07 22222
-rwx------. 1 root  root     931 Jul 22 16:03 ks-script-w1jlxI
-rwxr-xr-x. 1 root  root      67 Jul 22 16:03 ks-script-w1jlxI.log
-rw-r--r--  1 root  root     292 Jul 22 16:47 nouser
drwx------  2 root  root    4096 Jul 22 16:12 pulse-jVbgN7JshlCa
drwx------  2 gdm   gdm     4096 Jul 22 16:13 pulse-V1nHqnPjJCfc
-r--r--r--  1 root  root  506368 Jul 22 16:27 screen-4.0.3-19.el6.x86_64.rpm
drwxrwsr-x  2 root  root    4096 Jul 22 18:57 sgid
drwxrwsrwx  2 root  root    4096 Jul 22 19:08 ssgid
drwxrwxrwx  2 root  root    4096 Jul 25 23:28 test-dir
drwx------  2 root  root    4096 Jul 22 16:13 virtual-root.RvN4tH

 

小结:STICKY权限只适用于目录上,可以让读写权限的用户无法删除目录下不属 于自己的文件。

测试四:关于特定文件特性属性: chattr  , lasttr测试

关于chattr常用参数测试说明(A  a  i

·正常情况下,root用户可以删除系统中很多文件,包括000权限文件

[root@love681 tmp]# rm -rf 22222   #删除user1的用户文件
[root@love681 tmp]# rm -rf ks-script-w1jlxI  #删除user2用户的文件
[root@love681 tmp]# ll
total 528
-rwxr-xr-x. 1 root root     67 Jul 22 16:03 ks-script-w1jlxI.log
-rw-r--r--  1 root root    292 Jul 22 16:47 nouser
drwx------  2 root root   4096 Jul 22 16:12 pulse-jVbgN7JshlCa
drwx------  2 gdm  gdm    4096 Jul 22 16:13 pulse-V1nHqnPjJCfc
-r--r--r--  1 root root 506368 Jul 22 16:27 screen-4.0.3-19.el6.x86_64.rpm
drwxrwsr-x  2 root root   4096 Jul 22 18:57 sgid
drwxrwsrwx  2 root root   4096 Jul 22 19:08 ssgid
drwxrwxrwx  2 root root   4096 Jul 25 23:28 test-dir
drwx------  2 root root   4096 Jul 22 16:13 virtual-root.RvN4tH

 

·有时候担心root误操作,可以使用chattr设置文件的特殊权限,使权限对root用户也有效

 

[root@love681 test-dir]# ll 
total 0
-rw-rw-r-- 1 user1 user1 0 Jul 26 06:38 user1.bak  #user1重要备份文件
-rw-rw-r-- 1 user2 user2 0 Jul 26 06:39 user2.bak #user2重要备份文件
-rw-rw-r-- 1 user3 user3 0 Jul 26 06:39 user3.bak #user3重要备份文件
[root@love681 test-dir]# chattr  +A user1.bak  #设置atime无法在修改
[root@love681 test-dir]# chattr +a user2.bak   #设置无法删除,只能追加内容
[root@love681 test-dir]# chattr +i user3.bak   #设置对文件什么操作都不行
[root@love681 test-dir]# ll
total 0
-rw-rw-r-- 1 user1 user1 0 Jul 26 06:38 user1.bak #表面上无法看出文件有任何的变化
-rw-rw-r-- 1 user2 user2 0 Jul 26 06:39 user2.bak
-rw-rw-r-- 1 user3 user3 0 Jul 26 06:39 user3.bak

 

lsattr查看文件的特殊权限

[root@love681 test-dir]# lsattr  #查看当前目录下文件的特殊权限,默认文件有e权限
-------------e- ./user444
----i--------e- ./user3.bak
-----a-------e- ./user2.bak
-------A-----e- ./user1.bak

 

 

·尝试使用root用户修改文件的内容

 

[root@love681 test-dir]# lsattr  #查看文件的特殊权限
-------------e- ./user444
----i--------e- ./user3.bak
-----a-------e- ./user2.bak
-------A-----e- ./user1.bak
[root@love681 test-dir]#  stat user1.bak  #-A权限测试,atime时间访问不修改
  File: `user1.bak'
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d Inode: 393221      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  503/   user1)   Gid: (  503/   user1)
Access: 2016-07-28 23:06:39.839996710 +0800
Modify: 2016-07-28 23:06:39.839996710 +0800
Change: 2016-07-28 23:06:39.839996710 +0800
[root@love681 test-dir]# cat user1.bak  #查看下文件
[root@love681 test-dir]# stat user1.bak 
  File: `user1.bak'
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d Inode: 393221      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  503/   user1)   Gid: (  503/   user1)
Access: 2016-07-28 23:06:39.839996710 +0800  #文件atime的时间没有变化
Modify: 2016-07-28 23:06:39.839996710 +0800
Change: 2016-07-28 23:06:39.839996710 +0800
[root@love681 test-dir]# mv user3.bak  root.bak #root无法改名 i权限的文件
mv: cannot move `user3.bak' to `root.bak': Operation not permitted
[root@love681 test-dir]# rm -rf user2.bak  #root无法删除 a权限的文件
rm: cannot remove `user2.bak': Operation not permitted

小结:在特殊权限控制下,可以限制root用户不能删除,修改某些用户的特殊文件或系统特殊文件

 

 

测试五:文件访问控制列表: getfacl  ,  setfacl测试

1.setfacl常用参数的测试说明:

虽然特殊权限可以控制root对文件的部分权利,但是我们实际中让某个组或用户无法访问或修改某文件,无法提供更精确的权限控制,此时我们就需要用到文件的ACL功能。

实例1:root的文件,user1可以修改该文件,user2只可读取该文件,user3无任何权限(root组只有root)

 

·root创建文件 设置文件ACL

[root@wCentos7 getfacl]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  3 21:12 roots
[root@wCentos7 getfacl]# setfacl -m u:user1:rw roots  #设置user1对文件的读写权限
[root@wCentos7 getfacl]# setfacl -m u:user2:r roots  #设置user2对文件的读权限
[root@wCentos7 getfacl]# setfacl -m u:user3:- roots  #设置user3对文件没有权限
[root@wCentos7 getfacl]# getfacl roots  #查看文件ACL
# file: roots
# owner: root
# group: root
user::rw-
user:user1:rw-
user:user2:r--
user:user3:---
group::r--
mask::rw-
other::r--

 

·检测user1用户对文件的权限读写都可以

[user1@wCentos7 getfacl]$ echo 1234 > roots 
[user1@wCentos7 getfacl]$ cat roots 
1234

 

·检测user2用户对文件的权限读

[user2@wCentos7 getfacl]$ cat roots 
1234
[user2@wCentos7 getfacl]$ echo 2134 >roots 
bash: roots: Permission denied

 

·检测user3用户对文件没有权限

[user3@wCentos7 getfacl]$ cat roots 
cat: roots: Permission denied
[user3@wCentos7 getfacl]$ echo 1234567 >roots
bash: roots: Permission denied

 

 

2.setfacl权限顺序测试说明:

在/data/testdir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。

[root@love681 testdir]# mkdir -p /date/testdir     #创建目录
[root@love681 testdir]# groupadd g1   #创建g1组   
[root@love681 testdir]# groupadd g2   #创建g2组
[root@love681 testdir]# groupadd g3   #创建g3组
[root@love681 testdir]# useradd -G g2 alice
[root@love681 testdir]# useradd -G g3 tom
 
 
[root@love681 testdir]# chmod g+s /date/testdir/
[root@love681 testdir]# chown :g1 /date/testdir/
 
 
[root@love681 testdir]# setfacl -Rm g:g2:rwX ../testdir/  #设置g2组权限
 
[root@love681 testdir]# setfacl -Rm g:g3:rX ../testdir/  #设置3组权限
 
 
[root@love681 date]# ll -d testdir/
drwxrws---+ 2 root g1 4096 Jul 29 02:13 testdir/
[root@love681 date]# getfacl testdir/ #查看设置的权限
# file: testdir/     
# owner: root
# group: g1
# flags: -s-
user::rwx
group::r-x
group:g2:rwx
group:g3:r-x
mask::rwx
other::---

 

 

3.备份与恢复ACL列表:

备份目录的testdir的ACL列表(-R递归备份目录下所有的ACL)

root@love681 date]# getfacl -R testdir >  testdir.acl.txt #备份目录的ACL列表
[root@love681 date]# ll
total 8
drwxrws---+ 2 root g1   4096 Jul 29 02:13 testdir
-rw-r--r--  1 root root 1084 Jul 29 13:42 testdir.acl.txt

 

 

恢复目录的testdir的ACL列表(-R递归恢复目录下所有的ACL)

 

[root@love681 date]# setfacl -R -b testdir  #清除ACL目录
[root@love681 date]# getfacl testdir #查看目录的ACL清空了
# file: testdir
# owner: root
# group: g1
# flags: -s-
user::rwx
group::r-x
other::---
 
[root@love681 date]# setfacl -R --set-file=testdir.acl.txt  testdir #恢复ACL到目录
[root@love681 date]# getfacl testdir #查看目录ACL恢复了
# file: testdir
# owner: root
# group: g1
# flags: -s-
user::rw-
group::rw-
group:g2:rwx
group:g3:r-x
mask::rwx
other::r--

原创文章,作者:linux_root,如若转载,请注明出处:http://www.178linux.com/28996

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-08 14:49

    文章整体结构层次清晰,理论结合实际,对文件模型有了详尽的认识和立即