1、权限管理06榆林职业技术学院 杨浩与应用实践1学习目标1.了解ACL权限的概念,熟练掌握ACL权限相关命令的使用方法。2.熟悉SUID、SGID和SBIT权限作用,熟练掌握SUID、SGID和SBIT权限的相关操作。3.熟练掌握修改、查看文件系统属性的命令及基本使用方法。4.熟练掌握设置、执行sudo权限的方法。本章学习目标26.1 ACL权限3 对于每一种用户我们可以给他赋予不同的权限组合(读写执行)。由于是按用户类型授予用户对特定文件的操作权限的,所以当出现某一用户既不是所有者,也不能添加到所属组,也不适合作为其他人来访问文件的时候,就需要用特殊的方法为其授予相应的权限,这就是ACL(Ac
2、cess Control List的缩写,访问控制列表)要解决的问题。ACL在为用户分配权限的时候,不再考虑用户身份,而是直接赋予合适的权限。要使用ACL为用户分配权限,系统分区必须支持ACL。可以通过文件系统信息查看分区是否开启ACL权限,dumpe2fs命令用于查看文件信息系统,该命令的命令选项比较多、显示的文件系统信息也非常全面,这里只介绍与ACL相关的用法。命令格式:rootlocalhost#dumpe2fs 选项 分区名称 选项说明-h 仅显示超级块中信息,而不显示磁盘块组的详细信息46.1.1 查看分区是否开启ACL权限 例6.1 查看分区/dev/sda3是否开启ACL。第一步
3、 查看系统分区情况:rootlocalhost#df h#获悉系统有哪些分区文件 第二步 查看是否开启ACL权限:rootlocalhost#dumpe2fs h/dev/sda3 如果执行结果中“Default mount options”的值为“user_xattr acl”,则说明分区/dev/sda3已开启ACL权限。6.1 ACL权限1查看分区是否开启ACL权限 默认情况下,Linux所有分区的ACL权限已全部开启。如果需要手工开启ACL权限,可使用如下方法。linux系统有一个开机自动挂载文件/etc/fstab,该文件记录了需要开机自动挂载的分区及分区是否开启ACL权限的相关信息
4、。执行如下命令:rootlocalhost#vi/etc/fstab 进入/etc/fstab文件编辑模式:56.1.1 查看分区是否开启ACL权限UUID=21ddb085-f7fe-4ce9-8933-e87a101a0294/ext4 defaults 1 1UUID=c6765a19-0260-4ea5-ade2-5fb47b4b09fa/boot ext4 defaults 1 2UUID=52494eb9-662d-4c5d-bbe4-72c94b807f0d/home ext4 defaults 1 2UUID=5b5ee917-0e9b-429c-9fc9-ed34bce541
5、5a swap swap defaults 0 0tmpfs /dev/shm tmpfs defaults 0 0devpts /dev/pts devpts gid=5,mode=620 0 0sysfs /sys sysfs defaults 0 0proc /proc proc defaults 0 0 前四行分别是根分区、boot分区、home分区、swap分区的信息,对应的第四列的值均为“defaults”,“defaults”本身的值是可以重新定义的,但在缺省情况下是已经开启了ACL权限支持,如果“defaults”的值不包含对ACL权限的支持,则可以在“defaults”后加“
6、ACL”进行定义,中间用逗号分隔。下面举例说明:6.1 ACL权限2开启分区的ACL权限 例6.2 当前Linux系统不支持ACL权限,请将所有分区开启ACL权限。第一步 进入/etc/fstab文件编辑模式,将第四个字段的值“defaults”修改为“defaults,ACL”,并保存退出:UUID=21ddb085-f7fe-4ce9-8933-e87a101a0294/ext4 defaults,ACL 1 1UUID=c6765a19-0260-4ea5-ade2-5fb47b4b09fa/boot ext4 defaults,ACL 1 2UUID=52494eb9-662d-4c5
7、d-bbe4-72c94b807f0d/home ext4 defaults,ACL 1 2UUID=5b5ee917-0e9b-429c-9fc9-ed34bce5415a swap swap defaults,ACL 0 0 第二步 重启系统。注意:对/etc/fstab/文件的操作要非常谨慎,任何一个小小的错误都有可能导致开机挂载失败,而使系统启动失败。66.1.1 查看分区是否开启ACL权限6.1 ACL权限2开启分区的ACL权限 getfacl命令查看以自己为所有者的文件的ACL权限。命令格式:rootlocalhos#getfacle 文件名 2管理ACL权限 setfacl命令的
8、完整路径是/usr/bin,任何用户都可以使用该命令为以自己为所有者的文件设置ACL权限 命令格式:rootlocalhos#setfacl 选项 u:用户名|g:组名:权限 文件名76.1.2 查看和设定ACL权限 选项说明:-m:设置ACL权限-x:删除指定用户或组对指定文件的ACL权限 -b:删除所有用户对指定文件的ACL权限-k:删除默认的ACL权限-R:递归设置ACL权限,包括子目录-d:设置默认ACL权限 部分参数说明:u:用户名 管理指定用户对指定文件的ACL权限g:组名 管理指定组对指定文件的ACL权限 例6.3 可用如下命令设置用户yh对/root/test目录的ACL权限,
9、使其对该目录具有rw权限:rootlocalhost#setfacl-m u:yh:rw test#设置权限rootlocalhost#getfacl test#验证正确性6.1 ACL权限1查看ACL权限命令getfacl 执行结果为:#file:test#owner:root#group:rootuser:rwxuser:yh:rw-group:r-xmask:rwxother:r-x 说明:命令中的参数“u”表示为用户权限,如果要为组设置权限,就使用参数“g”。getfacl命令的执行结果中第五行说明yh既不是所有者,也不是所属组,也不是其他人,他具有“rw-”权限。86.1.2 查看和
10、设定ACL权限 例6.4 可用如下命令删除usernew用户对/root/acltest 的ACL权限:rootlocalhos#setfacl x u:usernew/root/acltest 例6.5 可用如下命令删除用户组aclgroup1对目录/root/acltest 的ACL权限:rootlocalhos#setfacl x g:aclgroup1/root/acltest 例6.6 可用如下命令删除/root/acltest 目录的所有ACL权限:rootlocalhos#setfacl b/root/acltest/例6.7 可用如下命令删除用户yh对/root/test目录的
11、执行权限:rootlocalhost#setfacl-x u:yh test 注意:本例中,“yh”后不跟具体权限。6.1 ACL权限 例6.8 现在有一个项目组在完成一项项目设计任务,项目组由一个组长、三个成员和一个实习生组成。要求:项目组所有成员可以访问项目文件,但根据身份不同,执行不同的权限。项目组长以root身份管理项目文件和成员,对文件具有rwx权限,项目其他成员加入项目组,作为项目文件的所属组,对文件具有rwx权限,项目文件的其他人对文件不具有任何权限,实习生既不是文件的所有者,也不是文件所属组成员,也不是其他人,对文件具有r-x权限,需要通过ACL单独赋权。分析:首先需要创建一个
12、项目文件夹,然后创建三个项目组成员用户,并加入所属组;然后,用chmod和chown命令修改项目文件夹的权限和所有者、所属组;最后为实习生赋予权限。96.1.2 查看和设定ACL权限 第一步 创建项目文件夹:rootlocalhost#mkdir projectrootlocalhost#ls-ld projectdrwxr-xr-x.2 root root 4096 7月 25 09:01 project#项目文件夹目前的权限和所属状态 第二步 创建项目成员,和项目组,并将项目成员加入项目组(所属组)rootlocalhost#useradd member1rootlocalhost#use
13、radd member2rootlocalhost#useradd member3rootlocalhost#groupadd gprojectrootlocalhost#gpasswd-a member1 gprojectAdding user member1 to group gprojectrootlocalhost#gpasswd-a member2 gprojectAdding user member2 to group gprojectrootlocalhost#gpasswd-a member3 gprojectAdding user member3 to group gproj
14、ect6.1 ACL权限 第三步 修改/root/project目录的所有者和所属组及权限:rootlocalhost#chown root:gproject/root/projectrootlocalhost#chmod 770/root/projectrootlocalhost#ls-ld/root/project#验证修改的是否符合要求drwxrwx-.2 root gproject 4096 7月 25 09:01/root/project 第四步 添加实习生Trainee,为其分配对项目文件目录的rx权限:rootlocalhost#useradd traineerootlocalh
15、ost#setfacl-m u:trainee:rx projectrootlocalhost#ls-ld project106.1.2 查看和设定ACL权限 执行结果如下:drwxrwx-+2 root gproject 4096 7月 25 09:01 project 其中的“+”表示已经分配了ACL权限,执行如下getfacl命令可以得到更详细的信息:rootlocalhost#getfacl project/执行结果为:#file:project/#owner:root#group:gprojectuser:rwxuser:trainee:r-xgroup:rwxmask:rwxoth
16、er:-其中,第五行信息说明用户trainee既不是所有者,也不是所属组,也不是其他人,他具有“r-x”权限。6.1 ACL权限 例6.9 为用户组aclgroup1设置对目录/root/acltest的rx权限,并验证。分析:为用户组设置ACL权限,类似于为用户设置ACL权限,都使用setfacl命令,只要将参数“u”替换为“g”,并在其后跟用户组名即可。第一步:创建用户组aclgroup1:rootlocalhos#groupadd aclgroup1 第二步:为用户组aclgroup1设置对目录/root/acltest的rx权限:rootlocalhos#setfacl m g:acl
17、group1:rx/root/acltestrootlocalhos#getfacl/root/acltest 116.1.2 查看和设定ACL权限 执行结果如下:#file:acltest/#owner:root#group:rootuser:rwxgroup:r-xgroup:aclgroup1:r-xmask:r-xother:r-x 从显示信息可以看出,用户组aclgroup1,虽然不是目录/root/acltest的所属组,但拥有与用户组相同的权限。6.1 ACL权限 getfacl命令用来显示相应目录或文件的用户权限信息,其中的一个条目是mask权限,如“mask:wrx”,这就是
18、最大有效权限。我们给用户赋予的所有ACL权限和所属组的权限与mask权限进行与操作后,得到的结果才是用户或组的真正权限。命令格式:rootlocalhos#setfacl m m:-目录或文件名 参数“m:-”,表示为mask用户赋予相应权限,比如执行 setfacl m m:rx/root/acltest 命令,则可以为/root/acltest 目录的mask赋予“rx”权限。执行如下命令:rootlocalhos#setfacl m m:rx/root/acltestrootlocalhos#getfacl /root/acltest 126.1.3 最大有效权限 执行结果如下:#fil
19、e:root/acltest/#owner:root#group:aclgroupuser:rwxuser:usernew:r-xgroup:rwx#effective:r-x group:aclgroup1:rwx#effective:r-xmask:r-xother:-由“#effective:r-x”可知,虽然为所属组和aclgroup1组赋予了wrx权限,但其真正的权限是r-x。所以,设置最大权限mask,可以有效的预防为用户设置过高的权限。6.1 ACL权限 例6.10 验证除了所有者和other用户不受mask权限限制外,其它用户的权限都受mask权限限制。依次执行如下命令:roo
20、tlocalhost#mkdir acltest1rootlocalhost#chmod 777 acltest1rootlocalhost#setfacl-m u:yh:rwx acltest1rootlocalhost#setfacl-m g:aclgroup1:rwx acltestrootlocalhost#setfacl-m m:rx acltest1rootlocalhost#getfacl acltest1136.1.3 最大有效权限 执行结果如下:#file:acltest1#owner:root#group:rootuser:rwxuser:yh:rwx#effective:
21、r-xgroup:rwx#effective:r-xgroup:aclgroup1:rwx#effective:r-xmask:r-xother:rwx 显示结果中的第5-7行说明mask权限会对所属组、ACL用户和ACL用户组产生影响。6.1 ACL权限小知识:在设置mask权限时,先设置其他用户或用户组的权限,然后再设置mask权限,否则mask权限会自动恢复到rwx权限。1递归ACL权限 递归ACL权限,就是在设定用户或组对某目录的ACL权限时,同时使该用户或组对该目录的所有子目录和文件都也具有相同ACL权限。命令格式rootlocalhos#setfacl m u:用户名|g:组名 权
22、限 R 目录名 其中,“-R”选项表示设置递归ACL权限,该参数的位置不能改变。146.1.4 递归ACL权限和默认ACL权限 例6.11 可用如下命令为用户组aclgroup1设置对目录/root/acltest/及子目录和文件的读与执行的ACL权限:rootlocalhos#setfacl m g:aclgroup1:rx R/root/acltest#参数选项R的位置不能改变 注意:递归ACL权限设置,只对目录中已有的子目录和文件生效,对ACL权限设置后建立的子目录和文件是无效的,这时需要用到默认ACL权限。6.1 ACL权限 2默认ACL权限 如果给某目录设置了默认ACL权限的,则在该
23、目录下所有新建的目录和文件都会继承相应的默认ACL权限。命令格式:rootlocalhos#setfacl m d:u:用户名|g:组名:权限 目录名 其中,参数“d:”表示设置默认(default)ACL权限。156.1.4 递归ACL权限和默认ACL权限 例6.12 可用如下命令为用户usernew同时设置对目录/root/acltest 的递归ACL权限和默认ACL权限:rootlocalhos#setfacl m d:u:usernew:rx R/root/acltest 注意:不管是默认ACL权限,还是递归ACL权限,命令本身的作用对象是目录。小结:递归ACL权限是针对目录及其现有子
24、目录和文件的,而默认ACL权限是针对未来新建子目录和文件的。所以如果同时设置了递归ACL权限和默认ACL权限,那么目录中的所有子目录和文件,不管是已有的还是未来新建的,都会继承父目录的ACL权限。6.1 ACL权限 1SUID简介 我们首先研究一下/usr/bin/passwd和/etc/shadow两个文件的用户权限及命令执行过程。首先观察/usr/bin/passwd文件的权限:rootlocalhos#ls l/usr/bin/passwd 显示如下信息:-rwsr-xr-x.1 root root 25980 Feb 22 2017/usr/bin/passwd 可以看出,文件/usr
25、/bin/passwd 的所有者root的权限是“rws”,这好像与我们前述章节介绍的用户对文件的权限只有三种(读、写和执行)的说法有些冲突。其实,这里的“s”权限,就是SUID特殊权限,它占据了原来“x”的位置。再观察/etc/shadow文件的权限:rootlocalhos#ls l/etc/shadow 显示如下信息:-.1 root root 1316 Apr 17 07:28/etc/shadow166.2.1 设置SUID权限 可以看出两点:首先,文件/etc/shadow 的所有者root的权限为“-”,可是root用户可以对该文件进行任何操作,这是因为root具有最高权限,即使
26、不设置权限,他依然具有最高文件操作权限。第二点,也是我们要重点说明的,除root用户之外的其它所有用户的权限也是“-”,但是为什么所有用户都可以修改自己的密码呢?为什么都可以修改/etc/shadow文件呢?由前述章节可知,密码是记录在/etc/shadow文件中的,修改密码的过程,其实就是修改该文件的过程。我们在修改密码的时候,并不是直接修改/etc/shadow文件,而是通过passwd二进制可执行文件(命令)来修改密码的,虽然/sur/bin/passwd的权限是“-rwsr-xr-x”,即除了root用户以外任何人都没有写操作。但是该文件具有SUID权限,SUID权限的作用就是暂时为命
27、令的执行者赋予属主用户(这里指root)权限,授权其行使属主用户的权限,直到命令执行结束。也就是说,虽然普通用户没有修改/etc/shadow的权限,但是/usr/bin/passwd具有SUID权限,所以普通用户可以通过passwd命令获得暂时的root权限,从而具备了修改/etc/shadow文件的权限。6.2 文件特殊权限 2设置SUID权限设置SUID权限的方法有两种 第一种方法使用如下命令格式:rootlocalhos#chmod n755 可执行文件名 其中,“n”可以是“4”、“2”、“1”、“7等中的任何一个数字,“4”代表SUID、“2”代表SGID、“1”代表SBIT、“7
28、”包括了SUID、SGID和 SBIT所有权限。需要注意的是,“n”要与后面的三位数字配合使用,否则会报错。例6.13 可用如下命令为cat命令设置SUID权限,使其他用户可以使用cat命令查看/etc/shadow 文件内容(实验结束后要还原,危险!):rootlocalhos#chmod 4755/bin/cat176.2.1 设置SUID权限 第二种方法是使用如下命令格式:rootlocalhos#chmod u+s 可执行文件名 注意:特殊权限要与后面三位数字配合使用,诸如“-rwSr-xr-x”、“-rwxrwSr-x”、“-rwxr-xrwT”中,都出现了相应的大写字母,说明存在错
29、误。相应地,用如下命令可以取消SUID权限。rootlocalhos#chmod 755 文件名或rootlocalhos#chmod u-s 文件名 例6.14 什么情况下为文件授予特殊权限时会出现类似于“-rwSr-xr-x”的报错,举例说明。依次执行如下命令:rootlocalhost#chmod 655/bin/cat#去掉所有者的执行权限rootlocalhost#ls-l/bin/cat6.2 文件特殊权限 执行结果为:-rw-r-xr-x.1 root root 48568 11月 22 2013/bin/cat#所有者失去了执行权限rootlocalhost#chmod u+s
30、/bin/cat#为所有者授予特殊权限:SUIDrootlocalhost#ls-l/bin/cat 执行结果为:-rwSr-xr-x.1 root root 48568 11月 22 2013/bin/cat#报错了 root的权限“rwS”中,“S”是大写的,这说明是错误,原因是在root对/bin/cat无执行权限的情况下赋予了SUID特殊权限,与命令(也就是可执行的二进制程序文件)执行者要对该命令文件拥有“x”权限的原则不符。正确的做法如下:186.2.1 设置SUID权限rootlocalhost#chmod 755/bin/cat#先赋予执行权限rootlocalhost#chmo
31、d u+s/bin/cat#再授予SUID权限或rootlocalhost#chmod 4755/bin/cat#同时授予执行权限和SUID权限rootlocalhost#ls-l/bin/cat 执行结果为:-rwsr-xr-x.1 root root 48568 11月 22 2013/bin/cat#授权正确 注意:实验结束后,依次执行如下命令去除/bin/cat的SUID权限,否则危险!rootlocalhost#chmod 755/bin/cat或rootlocalhost#chmod u-s/bin/catrootlocalhost#ls-l/bin/cat-rwxr-xr-x.1
32、 root root 48568 11月 22 2013/bin/cat#已不具备SUID权限了6.2 文件特殊权限 类似于SUID权限,SGID权限的作用是使某个用户的组身份暂时获得文件所属组的身份,执行所属组的权限。不过,SetGID的设置可以针对文件,也可以针对目录。1SetGID对文件的作用 对于文件,在设置SGID权限时要注意以下事项:u只有可执行的二进制程序才能设置SGID权限。u命令执行者(用户)要对程序拥有“x”权限。u用户在执行程序的过程中,其组身份升级为该程序文件的所属组,程序一旦执行结束,其用户的SGID权限就失效。例6.15 举例说明具有SGID权限的二进制文件的执行过
33、程:196.2.2 设置SGID权限 分析:我们知道,任何用户都可以用文件查找命令locate通过对/var/lib/mlocate/mlocate.db库文件的搜索来查找文件。我们先来研究观察一下这两个文件的权限,然后研究命令的执行机理:rootlocalhost#ls-l/var/lib/mlocate/mlocate.db 执行结果:-rw-r-.1 root slocate 1539629 7月 29 03:31/var/lib/mlocate/mlocate.dbrootlocalhost#ls-l/usr/bin/locate-rwx-s-x.1 root slocate 3846
34、4 10月 10 2012/usr/bin/locate 结果分析:所属组slocate对/var/lib/mlocate/mlocate.db文件具有读取权限,但普通用户对该文件没有读取权限,那么普通用户是如何搜索mlocate.db库文件的呢?由于所属组slocate对/usr/bin/locate具有“s”权限,即SGID权限。所以非所属组slocate的用户虽然不能直接读取mlocate.db文件,但可以通过locate命令来对mlocate.db文件内容进行查找,普通用户在执行locate命令时,其组身份被暂时赋予了slocate身份,所以实现了对mlocate.db文件的查找目的。
35、6.2 文件特殊权限 2SetGID对目录的作用 对于目录,在设置和运用SGID权限时,要注意如下事项:u普通用户必须对某目录拥有r(如,可以执行ls命令)和x(如,可以执行cd命令)权限,即可以用ls命令、可以进入该目录。u普通用户在进入该目录后会赋予该目录的属组身份,u当普通用户对此目录拥有“w”权限时,新建文件的默认属组就是这个目录的属组。例6.16 下面示例说明了SGID权限对目录的作用:rootlocalhost#mkdir/tmp/SGIDtest#以root身份新建一个SGIDtest目录rootlocalhost#chmod 2777/tmp/SGIDtest/#为新目录赋予读
36、写执行和SGID权限206.2.2 设置SGID权限rootlocalhost#su yh#快速切换用户yhyhlocalhost root$cd/tmp/SGIDtest/#进入新目录,yh被赋予所属组root的身份yhlocalhost SGIDtest$ls-ld/tmp/SGIDtest/#验证确实具有读写执行和SGID权限 显示结果为:drwxrwsrwx.2 root root 4096 7月29 09:02/tmp/SGIDtest/yhlocalhost SGIDtest$touch SGIDtest.txt#yh在/tmp/SGIDtest/下新建一个文件yhlocalhos
37、t SGIDtest$mkdir SGIDtest1#yh在/tmp/SGIDtest/下新建一个目录yhlocalhost SGIDtest$ls l 显示结果为:总用量 4drwxrwsr-x.2 yh root 4096 7月 29 09:05 SGIDtest1#新建目录的所属组为root-rw-rw-r-.1 yh root 0 7月 29 09:05 SGIDtest.txt#新建文件的所属组也是root6.2 文件特殊权限 3设置和取消SGID权限 为目录设置和取消SGID权限的命令语法类似SUID权限的设置和取消,也具有一定的危险性,需要特别谨慎。设置SGID权限可以使用如下命
38、令之一:rootlocalhost#chmod 2777 目录名 或 rootlocalhost#chmod g+s 目录名 取消SGID权限可以使用以下命令:rootlocalhost#chmod 755 目录名或rootlocalhost#chmod g-s 目录名 216.2.2 设置SGID权限 1SBIT粘着位作用 目录/tmp是一个临时目录,任何用户都可以在其中创建、删除、拷贝、粘贴文件或目录,但是每个用户只能删除自己创建的目录或文件,而不能删除其它用户创建目录或文件,就是因为目录/tmp具有SBIT权限“drwxrwxrwt”。查看一下目录/tmp的权限:rootlocalhos
39、t#ls-ld/tmp 执行结果:drwxrwxrwt.4 root root 4096 8月 6 02:22/tmp 可知,目录/tmp的所有者是root,所属组是root组,其他人对该目录拥有“rwt”权限,其中的“t”就是SBIT。6.2 文件特殊权限6.2.3 设置SBIT权限 那么SBIT权限具有哪些作用呢?在设置SBIT权限时应注意些什么呢?u首先,粘着位SBIT权限只对目录生效。u要为某个目录设置SBIT权限,普通用户对该目录必须拥有“-wx”权限,即普通用户可以进入此目录,也可以执行写操作。u当普通用户对某目录拥有“wx”权限时,可以删除该目录下的所有目录和文件(包括其他用户创
40、建的文件),为了避免普通用户删除同一目录下其他用户创建的文件或目录,我们可以为该目录设置SBIT权限,这样普通用户就只能删除自己创建的文件,而不能删除其他用户创建的文件。22 结论:目录/tmp是系统临时目录,任何用户都可以在其中执行读写执行操作,为了防止普通用户删除其他用户的文件或目录,系统自动为其设置了SBIT权限。6.2 文件特殊权限6.2.3 设置SBIT权限 2设置和取消SBIT权限 类似于设置SUID和SGID权限,设置SBIT权限可以使用下列命令:rootlocahost#chmod 1777 目录名或rootlocahost#chmod o+t 目录名 取消SBIT权限可以联合
41、使用如下两条命令:rootlocahost#chmod 755 目录名或rootlocahost#chmod o-t 目录名 例6.17 创建一个新目录/tmp/sbittest,为该目录设置SBIT权限,并验证普通用户yh在目录下创建的文件不能被其他用户(如yh1)删除。23 依次执行如下命令:rootlocahost#mkdir/tmp/sbittestrootlocahost#chmod 1777/tmp/sbittest#为/tmp/sbittest目录设置SBIT权限rootlocahost#su yh#切换用户为yhyhlocalhost root$cd/tmp/sbittest/
42、yhlocalhost sbittest$mkdir sbit1#以yh身份创建一个目录sbit1yhlocahost sbittest$su yh1#切换用户为yh1yh1localhost sbittest$rm-fr sbit1/#以yh1身份删除目录sbit1 系统提示如下:rm:无法删除sbit1:不允许的操作 说明:用户yh1不能删除yh创建的目录sbit1。6.2 文件特殊权限6.2.3 设置SBIT权限 chattr命令(change file attributes)用于设置文件的系统属性。特别注意:该命令对root用户也生效。命令格式:rootlocalhos#chattr+
43、|-|=选项 文件名或目录名 选项说明:+增加权限-删除权限=赋予某权限i 如果一个文件被设置了i属性,那么就不允许用户对文件进行删除、重命名和编辑文件内容,只能读其中的数据;如果对某目录设置了i属性,那么只能修改该目录下的文件数据,但不允许用户建立和删除文件。a 如果某个文件被设置了a(append)属性,那么只能在该文件中增加数据,而不能删除、修改数据;如果对某目录设置了a属性,那么只允许在目录中建立和修改文件,而不允许删除文件24 例6.18 创建文件chattr.txt,为其设置文件系统属性,使任何用户不能删除、重命名该文件,也不能修改该文件内容。依次执行如下命令:rootlocalh
44、ost#cd/root/temprootlocalhost temp#touch chattr.txt rootlocalhost temp#echo linux chattr.txt rootlocalhost temp#cat chattr.txt linux#设置i属性前可以修改文件内容rootlocalhost temp#chattr+i chattr.txt#设置i属性rootlocalhost temp#lsattr chattr.txt-i-e-chattr.txt#文件具备了i属性rootlocalhost temp#echo hello chattr.txt#设置i属性后不能
45、修改文件内容了bash:chattr.txt:权限不够rootlocalhost temp#rm-fr chattr.txt#设置i属性后也不能删除文件了rm:无法删除chattr.txt:不允许的操作6.3 改变文件系统属性命令6.3.1 设置文件系统属性命令 例6.19 在/root/temp/目录下创建chattrtest目录,设置其文件系统属性,使任何用户不得在该目录下新建和删除文件,而只能修改该目录下的已有文件:依次执行如下命令:rootlocalhost temp#mkdir chattrtest rootlocalhost temp#touch chattrtest/chattr
46、test.txt#设置i属性前可新建文件rootlocalhost temp#chattr+i chattrtest#为目录设置i属性rootlocalhost temp#lsattr-d chattrtest25-i-e-chattrtest#目录具备了i属性rootlocalhost temp#echo linux chattrtest/chattrtest.txt#设置i属性后仍然可以修改目录中的文件内容rootlocalhost temp#rm-fr chattrtest/chattrtest.txt#设置i属性后不能删除文件了rm:无法删除chattrtest/chattrtest.
47、txt:权限不够rootlocalhost temp#touch chattrtest/chattrtest1.txt#设置i属性后不能新建文件了touch:无法创建chattrtest/chattrtest1.txt:权限不够6.3 改变文件系统属性命令6.3.1 设置文件系统属性命令 例6.20 可用如下命令恢复/tmp/temp/chattrtest目录的文件系统属性(去掉i属性):执行如下命令:rootlocalhost temp#chattr-i chattrtestrootlocalhost temp#lsattr-d chattrtest 执行结果:-e-chattrtest#目
48、录没有了i属性26 例6.21 设置/tmp/temp/chattrtest目录的文件系统属性,任何用户只允许新建、修改文件或目录,而不能删除文件或目录。依次执行如下命令:rootlocalhost temp#chattr+a chattrtest#为chattrtest目录设置a属性rootlocalhost temp#lsattr-d chattrtest-a-e-chattrtest#chattrtest目录具有了a属性rootlocalhost temp#touch chattrtest/chattrtest.txt1#可以新建文件rootlocalhost temp#echo hel
49、lo chattrtest/chattrtest.txt1#也可以修改文件rootlocalhost temp#cat chattrtest/chattrtest.txt1hellorootlocalhost temp#rm-fr chattrtest/chattrtest.txt1#但不能删除文件rm:无法删除chattrtest/chattrtest.txt1:不允许的操作 6.3 改变文件系统属性命令6.3.1 设置文件系统属性命令 lsattr命令(list file attributes)用于查看文件的系统属性。命令格式:rootlocalhost#lsattr a|d 文件名 选项
50、说明:a 显示所有文件和目录d 如果操作对象是目录,则仅列出目录本身的属性,而不显示子文件的属性27 例6.22 可用如下命令列出/root/temp/chattrtest目录中所有的文件和目录的文件系统属性:rootlocalhost temp#lsattr-a chattrtest 执行结果如下:-e-chattrtest/.-a-e-chattrtest/.-e-chattrtest/chattrtest.txt1-e-chattrtest/chattrtest.txt6.3 改变文件系统属性命令6.3.2 查看文件系统属性 实际上root是通过修改/etc/sudoers文件,来为普通