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控制来管理文件权限了。
ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
注意:
CentOS7.0默认创建的xfs和ext4文件系统有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 复制file1的acl权限给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:
主要的文件操作命令cp和mv都支持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测试
一.关于文件和目录的权限基本概述:
我们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
通常我们以下图表示:
-rw-r–r–:表示这个权限为:644
X的权限我们现在不管它,我们后面会介绍到
关于不同的权限,文件或目录有一下的意义,我们稍后来测试:
文件:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
目录:(所以建议最好的目录权限为:rwx或 r-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,属组为loveme(user2为组成员) ,测试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
测试结果:用户对目录有写权限和执行权限时,可以删除目录底下的文件,但是却不能看到目录下的文件列表。
目录权限总结测试结果:
用户对目录单单只有写权限 或 执行权限 或读权限 没有实际意义:
写权限:无法进入目录,无法在目录下创建文件,无法删除文件,无法去读目录下的文件列表;
执行权限:只可以进入目录,没有其他的功用;
读权限:可以看看文件名,没有别的功用;
读写权限:除了可以看看目录下的文件名,没有别的功用;
写 执行权限:可以删除别人的文件,不可查看目录下的文件列表,比较危险;
所以建议最好的目录权限为:rwx或 r-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条)
文章整体结构层次清晰,理论结合实际,对文件模型有了详尽的认识和立即