权限管理:



TIP 1: 如果要用cp拷贝/etc/fstab文件到 /root/dir目录内,最起码需要文件和目录各有什么权限才能够拷贝过去? 答:cp命令需要有执行权限,fstab文件要有r读的权限,dir目录要有wx读和执行的权限


TIP 2:

  • 如果用户jincheng 对目录 Music 只有 r 权限,那么就只能 ls dir/内的文件名称而已,具体的权限无法使用 ls -l 查看,也无法 cd 进入该目录。
  • 如果该用户对目录 Music 只有 x 权限,即可以 cd 进入该目录,事先知道内部有文件且知道文件名称的情况下,可以 ls -l Music/ct1.conf,查看该文件的权限,若对该ct1.conf有读权限,也可以 cat Music/ct1.conf 文件内容。
  • 如果该用户对目录 Music 只有 w 权限,无法进行任何操作,起码需要加上 x 权限才可以在该文件夹内touch rm cat,如果知道内部文件名称还可 ls -l Filename。

TIP3 chmod -R g+rwX /testdir X 权限位 针对文件夹增加 x 权限,-R递归文件夹内的文件夹增加 x 权限,如果递归文件夹内的文件有 x 权限,则ugo全部加上 x 权限。


TIP4 创建一个用户jincheng,删除其家目录后,如何重新创建其家目录? 首先考虑tom创建用户时会把/etc/skels里的文件放到jincheng家目录内,所以创建文件后要拷贝文件过去,其次jincheng对家目录及内部文件具有完全控制权限,要修改目录和内部文件权限 拷贝/etc/skels里的文件放到jincheng /etc/skels里的文件放到jincheng 更改属主属组 修改权限 查看内部文件


TIP5 现有一项目,有两人参与,分别为jincheng martin,需要在某文件夹进行文件存放,相互之间可以修改,但不可删除。要怎么做? 1,创建devop组 2,将两人加入到同一附加组devop中 3,更改programme文件夹属组为devop

3,创建programme文件夹,并设置3777权限,加入SGID和Sticky位,分别为了在文件夹内创建文件为devop组和禁止用户相互删除对方文件。 4,测试效果,两个用户分别创建文件,martin进行修改jincheng创建的文件,显示可以写入文本,但删除时提示无权限。


TIP6 如果这个程序一开始没有x权限,会显示位 S 否则显示为 s


TIP7 在/data目录下新建一个martin.txt的文件,对其加以chattr +i权限后,即使是root用户对此文件也无法删除,改名和更改。但可以cp该文件,但特定属性不会跟随。


TIP8 例如: /data/下有个文件martin.txt,其他人权限为只读,对jincheng设置acl,让其无法访问和此文件。 删除用户额外acl /data/下有个文件martin.txt,其他人权限为只读,对devop组设置acl,使其内部的用户martin和jincheng,可以对该文件进行读写操作,下图测试cp命令是,因为/data文件夹无写权限,所以拷贝失败。


TIP9 如果jincheng.txt文件设置acl之后,权限后面会多一个+,默认显示的权限为acl权限,而非原始的ugo权限,可设置遮罩mask,统一更改用户对该文件的访问权限,如下列mask,修改后的情况


TIP10 如果一个服务需要用到一个文件夹,这个用户对内部所有文件都需要设置权限,可使用acl递归设置权限,方便后续还原原本文件夹权限 待所有配置完成后,恢复该文件夹原有的权限


TIP11 备份acl后删除acl,最后还原acl 恢复acl.txt方法有两种, 其一 其二


文件: r:可以使用内容查看类的命令来显示其相关内容 w: 可以使用编辑器修改其内容 x:可以将其发起一个进程 目录: r:可以使用ls命令查看目录内容的文件信息 w:可以创建、删除文件 x:可以使用ls -l命令来查看目录内容的文件信息,并且可以使用cd命令切换此目录为工作目录:

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

owner:属主 u group:属组 g other:其他 o


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

r:readable w:writeable x:excutable


权限位

--- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 例如: 750:rwxr-x---


修改文件权限:chmod


chmod [OPTION]... OCTAL-MODE FILE... -R:递归修改权限 chmod [OPTION]... MODE[,MODE]... FILE... MODE: 修改一类用户的所有权限: u= g= o= ug= a= #所有 u=,g= 修改一类用户某位或某些位权限 u+ u- chmod [OPTION]... --reference=RFILE FILE... 参考RFILE文件的权限,将FILE的修改为同RFILE 例如: chgrp sales testfile chown root:admins testfile chmod u+wx,g-r,o=rx file chmod -R g+rwX /testdir chmod 600 file chown mage testfile


修改文件的属主和属组:仅root可用



修改文件的属主:chown

chown [OPTION]... [OWNER][:[GROUP]] FILE... 用法: OWNER OWNER:GROUP :GROUP

注意:命令中的冒号可用.替换

-R:递归 chown [OPTION]... --reference=RFILE FILE...



修改文件的属组:chgrp

chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... 文件或目录创建时的遮罩码:umask FILE: 666-umask


* 注意:如果某类的用户的权限减得的结果中存在x权限,则将其权限+1*

DIR:777-umask umask:查看 umask #:设定 例如: umask 002 umask u=rw,g=r,o= 仅对当前用户的当前shell进程有效,若想一直生效,可修改全局设置: /etc/bashrc 用户设置:~/.bashrc umask –S 模式方式显示 umask –p 输出可被调用


特殊权限:SUID,SGID,Stikcy



1.权限

r,w,x user group other


2.安全上下文

前提:进程有属主和属组,文件有属主和属组 1.任何一个可执行文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限 2.启动进程之后,其进程的属主为发起者,属组为发起者所属的组 3.进程访问文件时的权限,取决于进程的发起者 4.进程的发起者,同文件的属主,则应用文件属主权限 5.进程的发起者,属于文件的属组,则应用文件属组权限 6.进程的发起者,属于其他用户,则应用文件其他权限


3.SUID

1.任何一个可执行文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限 2.启动为进程之后,其进程的属主仍为原程序文件的属主 权限设定: chmod u+s FILE... chmod u-s FILE...


4.SGID

默认情况下,用户创建文件时,其属组为此用户所属的基本组 一旦某目录被设定了SGID,则对此目录具有写权限的用户在此目录中创建的文件所属的组为此目录的属组 权限设定: chmod g+s DIR... chmod g-s DIR...


5.Sticky

对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件 权限设定: chmod o+t DIR... chmod o-t DIR... SUID SGID STICKY chmod 1777 /tmp/kk.txt 几个权限位映射: SUID:user占据属主的执行权限位 s:属主拥有x权限 S:属主没有x权限 SGID:group占据属主的执行权限位 s:group拥有x权限 S:group没有x权限 sticky:other占据属主的执行权限位 t:other拥有x权限 T:other没有x权限


设定文件特定属性



chattr +i 不能删除,改名,更改 chattr +a 只能追加内容 lsattr 显示特定属性


访问控制列表



ACL:Access Control List,实现灵活的权限管理 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限 CentOS7 默认创建的xfs和ext4文件系统具有ACL功能 CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加 tune2fs –o acl /dev/sdb1 mount –o acl /dev/sdb1 /mnt/test ACL生效顺序:所有者,自定义用户,自定义组,其他人


为多用户或者组的文件和目录赋予访问权限rwx mount -o acl /directory getfacl file |directory setfacl -m u:wang:rwx file|directory setfacl -Rm g:sales:rwX directory 递归对目录设置acl权限 setfacl -Rb directory 对目录内递归删除设置的acl权限 setfacl -M file.acl file|directory 根据file.acl内设置的权限对file或directory设置权限 setfacl -m g:salesgroup:rw file| directory 此选项为给salesgroup组设置权限,使属于这个组的用户对file或directory具有rw权限 setfacl -m d:u:wang:rx directory 此选项为对目录设置acl ,其下创建的目录对wang用户继承acl权限 setfacl -x u:wang file |directory :此选项不能完全删除文件acl权限,完全清楚所有acl,使用-b选项 setfacl -X file.acl directory


ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限 getfacl 可看到特殊权限:flags 通过ACL赋予目录默认x权限,目录内文件也不会继承x权限 base ACL 不能删除 setfacl -k dir 删除默认ACL权限 setfacl –b file1清除所有ACL权限 getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2


mask只影响除所有者和other的之外的人和组的最大权限 Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission) 用户或组的设置必须存在于mask权限设定范围内才会生效 setfacl -m mask::rx file --set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以 示例: setfacl --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 setfacl --restore acl.txt getfacl -R /tmp/dir1


练习

1,在/testdir/dir里创建的新文件自动属于devop组,组apps的成员如:jinchengt能对这些新文件有读写权限,组dbs的成员如:martin只能对新文件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹 2,备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限