权限
权限就是用户或者组对文件或者目录所拥有的能力,所能执行的操作。
权限的分配:
通过ls -l file这个命令可以查看文件或者目录的详细信息: [root@localhost home]# ls -l /root/ total 4 -rw-------. 1 root root 2633 Jul 25 21:08 anaconda-ks.cfg drwxr-xr-x 2 root root 6 Jul 31 23:24 Desktop drwxr-xr-x 2 root root 6 Jul 31 23:24 Documents 其中rwxr-xr-x代表了不同用户不同组的权限: 左三位:定义user(owner)的权限(属主权限) 中三位:定义group的权限(属组权限) 右三位:定义other权限(其他用户权限) 进程安全上下文: 进程对文件的访问权限应用模型: 进程的属主(进程的发起者)与文件的属主是否相同,如果相同则应用属主权限。 否则,则检查进程的属主是否属于稳健的属组:如果是,则应用属组权限。 否则,就只能应用其他的权限
权限
r: readable, 读 w:writeable, 写 x:excuteable,执行 对文件来说: r:可获取文件的数据; w:可修改文件的数据;(但不能删除文件) x:可将此文件运行为进程;(针对二进制文件或脚本) (一般而言,文件默认情况下不该有执行权限) 对目录来说: r:可以使用ls获取其下的所有文件列表;但不能访问文件,不能cd进目录,不能查看文件的详细信息(元数据) w:可修改此目录下的文件列表;即创建或删除文件;配合x x:可cd至此目录中,且可使用ls-l来获取所有文件的详细属性信息;可以访问目录中的文件 X:针对目录来说,在执行权限相关命令时,只给目录加x权限,目录下的文件不加x权限(前提是本身没有x权限),如果文件原本有x权限,则给文件也增加x权限。
权限的组合机制
二进制 八进制 对文件没有任何权限: --- 000 0 对文件有执行权限: --x 001 1 对文件有写权限: -w- 010 2 对文件有有写和执行权限:-wx 011 3 对文件有读权限: r-- 100 4 对文件有读和执行权限: r-x 101 5 对文件有读和写权限: rw- 110 6 对文件有读写执行权限: rwx 111 7
权限管理命令
chmod命令: chmod [option]... MODE[,MODE]...FILE... chmod [option]... OCTAL-MODE FILE... chmod [option]... --reference=RFILE FILE... 三类用户: u:属主 g:属组 o:其他 a:所有 (1)chmod [option]... MODE[,MODE]...FILE... 赋权表示法:直接操作一类用户的所有权限位rwx; u= 修改属主的权限 g= 修改属组的权限 [root@localhost ~]# ll fstab -rw-r--r-- 1 root root 595 Aug 2 19:38 fstab [root@localhost ~]# chmod g=rw fstab [root@localhost ~]# ls fstab fstab [root@localhost ~]# ll fstab -rw-rw-r-- 1 root root 595 Aug 2 19:38 fstab o= 修改其他的权限 a= 修改所有权限 [root@localhost ~]# chmod u=rwx,g=rw,o= fstab [root@localhost ~]# ll fstab -rwxrw---- 1 root root 595 Aug 2 19:38 fstab 可以组合使用:ug ou og 授权表示法:直接操作一类用户的一个权限位r,w,x; u+, u- [root@localhost ~]# chmod u-x fstab [root@localhost ~]# ll fstab -rw-rw---- 1 root root 595 Aug 2 19:38 fstab g+, g- [root@localhost ~]# chmod g-wx fstab [root@localhost ~]# ll fstab -rwxr--r-- 1 root root 595 Aug 2 19:38 fstab o+, o- [root@localhost ~]# chmod o+r fstab [root@localhost ~]# ll fstab -rw-rw-r-- 1 root root 595 Aug 2 19:38 fstab a+, a- 也可以以组合使用:ug+ ug- uo+ uo- og+ og- [root@localhost ~]# chmod ug+x fstab [root@localhost ~]# ll fstab -rwxrwxr-- 1 root root 595 Aug 2 19:38 fstab chmod -x 去掉所有权限的执行权限 [root@localhost ~]# chmod -x fstab [root@localhost ~]# ll fstab -rw-r--r-- 1 root root 595 Aug 2 19:38 fstab chmod +w 只对属主有效(只有写权限只对属主有效) [root@localhost ~]# chmod +w fstab [root@localhost ~]# ll fstab -rw-r--r-- 1 root root 595 Aug 2 19:38 fstab chmod +r 只对属主属组有效 [root@localhost ~]# chmod +r fstab [root@localhost ~]# ll fstab -rwxr-xr-x 1 root root 595 Aug 2 19:38 fstab (2)chmod [option]... OCTAL-MODE FILE...(八进制权限位) [root@localhost ~]# chmod 660 fstab [root@localhost ~]# ll fstab -rw-rw---- 1 root root 595 Aug 2 19:38 fstab 注意:此方法必须至少有三位八进制位 (3)chmod [option]... --reference=RFILE FILE...(引用型修改) [root@localhost ~]# chmod --reference=/var/log/messages fstab [root@localhost ~]# ll fstab -rw------- 1 root root 595 Aug 2 19:38 fstab [root@localhost ~]# ll /var/log/messages -rw------- 1 root root 316661 Aug 2 20:01 /var/log/messages 选项: -R, --recursive:递归修改:通常只有在授权表示法当中应用,在其他的三种方法中不建议使用。赋权表示法斟酌使用。 注意:用户只能修改属主为自己的那些文件的权限;
从属关系管理命令
chown, chgrp(这两个命令的用法可以参考chmod命令用法) chown命令:(属主) chown [OPTION]... [OWNER][:[GROUP]] FILE... (中间的冒号也可以用点号表示) [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 root root 0 Aug 4 10:28 f1 [root@localhost ~]# chown mageedu.mageedu testmod/f1 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 chown [OPTION]... --reference=RFILE FILE... [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 root root 0 Aug 4 10:47 f2 [root@localhost ~]# chown --reference=testmod/f1 testmod/f2 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 选项: -R:递归修改 chgrp命令: chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... 注意:只有管理员root方可修改属主属组 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 root root 0 Aug 4 10:52 f3 -rw-r--r-- 1 root root 0 Aug 4 10:52 f4 [root@localhost ~]# chgrp mageedu testmod/f3 [root@localhost ~]# ll testmod/f3 -rw-r--r-- 1 root mageedu 0 Aug 4 10:52 testmod/f3 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 root mageedu 0 Aug 4 10:52 f3 -rw-r--r-- 1 root root 0 Aug 4 10:52 f4 [root@localhost ~]# chgrp --reference=testmod/f3 testmod/f4 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 root mageedu 0 Aug 4 10:52 f3 -rw-r--r-- 1 root mageedu 0 Aug 4 10:52 f4
umask
umask: 从目录或文件上屏蔽掉最大权限相应的位,从而得出默认权限。 umask值 可以用来保留在创建文件权限 新建FILE 权限: 666-umask 如果所得结果某位存在执行(奇数)权限,则将其权限+1 新建DIR 权限: 777-umask 非特权用户umask是 002 root 的umask 是022 umask: 查看umask值 [root@localhost ~]# umask 0022 umask #: 设定umask的值 [root@localhost ~]# umask 026 [root@localhost ~]# umask 0026 umask 002 umask –S 模式方式显示 [root@localhost ~]# umask -S u=rwx,g=rx,o=x umask –p 输出可被调用 [root@localhost ~]# umask -p umask 0022 全局设置: /etc/bashrc 用户设置:~/.bashrc umask:文件的权限反向掩码,遮罩码; 创建文件时:666-umask 创建目录时:777-umask 注意:之所以文件用666去减,表示文件默认不能拥有执行权限; 例如: umask: 023 666 - 023 = 643 如果减得的权限中有执行权限,则需要将其权限加1 目录则没有此项限制 umask命令: umask:查看当前umask umask MASK:设置umask 注意:此类设定仅对当前SHELL进程有效
Linux文件系统上的特殊权限
SUID, SGID, Sticky 此三种权限都是基于x权限上的。 三种常用权限:r, w, x user, group, other 前提:进程有属主和属组;文件有属主和属组 (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 (2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组 (3) 进程访问文件时的权限,取决于进程的发起者 (a) 进程的发起者,同文件的属主:则应用文件属主权限 (b) 进程的发起者,属于文件属组;则应用文件属组权限 (c) 应用文件“其他”权限
-
可执行文件上SUID权限:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 启动为进程之后,其进程的属主为原程序文件的属主 SUID 只对二进制可执行程序有效 SUID 设置在目录上无意义 权限设定: chmod u+s FILE... chmod u-s FILE... SUID 用八进制是4表示。例如,改权限的时候八进制是4755 [mageedu@localhost root]$ cat /etc/shadow cat: /etc/shadow: Permission denied [mageedu@localhost root]$ exit exit [root@localhost ~]# chmod 4755 /bin/cat [root@localhost ~]# ll /bin/cat -rwsr-xr-x. 1 root root 54048 Nov 20 2015 /bin/cat [root@localhost ~]# su mageedu [mageedu@localhost root]$ cat /etc/shadow root:$6$Afpcf.Bd$w3ywPraRpplA4imtsyep02.a02lehv1amAFrg9qfSnrAO2Mj0Ca9aXpo5Bw4 rpcuser:!!:17007:::::: nfsnobody:!!:17007:::::: postfix:!!:17007:::::: sshd:!!:17007:::::: ntp:!!:17007:::::: tcpdump:!!:17007:::::: mageedu:$6$S0t9SxXkvSI0Npz5$YDVonz69YGGGkGyZDy/KesO4CI1HUBLNThcHj6PXDntQGS0Cl0SNpN6zGASuzYE.z5veu1XAzMvO4xLWbKE.n0::0:99999:7::: user1:!!:17017:0:99999:7::: tom:!!:17017:0:99999:7::: user2:!!:17017:0:99999:7::: [mageedu@localhost root]$ exit exit [root@localhost ~]# chmod 755 /bin/cat [root@localhost ~]# ll /bin/cat -rwxr-xr-x. 1 root root 54048 Nov 20 2015 /bin/cat
-
可执行文件上的SGID权限
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 启动为进程之后,其进程的属主为原程序文件的属组 权限设定: chmod g+s FILE... chmod g-s FILE... [root@localhost ~]# ll /bin/cat -rwxr-xr-x. 1 root root 54048 Nov 20 2015 /bin/cat [root@localhost ~]# ll /etc/shadow ---------- 1 root root 1220 Aug 4 14:28 /etc/shadow [root@localhost ~]# chmod 2755 /bin/cat [root@localhost ~]# su tom [tom@localhost root]$ cat /etc/shadow cat: /etc/shadow: Permission denied [tom@localhost root]$ exit exit [root@localhost ~]# chmod g+r /etc/shadow [root@localhost ~]# su tom [tom@localhost root]$ cat /etc/shadow root:$6$Afpcf.Bd$w3ywPraRpplA4imtsyep02.a02lehv1amAFrg9qfSnrAO2Mj0Ca9aXpo5Bw4L4kOAOU5rzB8asPw2siyNDNcd1:17007:0:99999:7::: bin:*:16659:0:99999:7::: daemon:*:16659:0:99999:7::: user1:!!:17017:0:99999:7::: tom:!!:17017:0:99999:7::: user2:!!:17017:0:99999:7::: [tom@localhost root]$
-
目录上的SGID权限
SGID作用在目录上时: 将使在该目录中新建文件或目录将自动继承该目录所属组。 默认情况下,用户创建文件时,其属组为此用户所属的主组 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组 通常用于创建一个协作目录 权限设定: chmod g+s DIR... chmod g-s DIR...SGID的八进制编号是2 [root@localhost testmod]# chmod 2777 /root/testmod/ [root@localhost testmod]# ll -d drwxrwsrwx 2 root root 42 Aug 4 10:52 . [root@localhost testmod]# groupadd test [root@localhost testmod]# gpasswd -a tom test Adding user tom to group test [root@localhost testmod]# gpasswd -a mageedu test Adding user mageedu to group test [root@localhost testmod]# chgrp test /root/testmod [tom@localhost testmod]$ touch f5 [tom@localhost testmod]$ ll f5 -rw-rw-r-- 1 tom test 0 Aug 4 18:50 f5 [tom@localhost testmod]$ echo "I am tom " >> f5 [tom@localhost testmod]$ exit exit [root@localhost testmod]# su mageedu [mageedu@localhost testmod]$ echo "I am mageedu" >> f5 [mageedu@localhost testmod]$ cat f5 I am tom I am mageedu [mageedu@localhost testmod]$
对目录的SGID设置之后,目录所属组的成员之间,新建的文件,或者目录,可以相互访问修改。
-
Sticky位:粘滞位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有者是用户本身 在目录设置Sticky 位,只有文件的所有者或root可以删除该文件 sticky 设置在文件上无意义 权限设定: chmod o+t DIR... chmod o-t DIR... [root@localhost testmod]# ll total 4 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 tom tom 0 Aug 4 10:52 f3 -rw-r--r-- 1 tom tom 0 Aug 4 10:52 f4 -rw-rw-r-- 1 tom test 23 Aug 4 18:51 f5 [root@localhost testmod]# su mageedu [mageedu@localhost testmod]$ rm f3 rm: remove write-protected regular empty file ‘f3’? y [mageedu@localhost testmod]$ ll total 4 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 tom tom 0 Aug 4 10:52 f4 -rw-rw-r-- 1 tom test 23 Aug 4 18:51 f5 [mageedu@localhost testmod]$ exit exit [root@localhost testmod]# chmod o+t /root/testmod [root@localhost testmod]# ll -d drwxrwsrwt 2 root test 42 Aug 4 18:54 . [root@localhost testmod]# su mageedu [mageedu@localhost testmod]$ rm f4 rm: remove write-protected regular empty file ‘f4’? y rm: cannot remove ‘f4’: Operation not permitted 6 :SUID,SGID 7 :SUID,SGID,Sticky 在去除特殊权限的时候要用: u-s g-s o-t 用其他方法的话会有去不掉的情况 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 不能删除,改名,更改 [root@localhost test]# chattr +i test1 [root@localhost test]# ll total 0 -rw-r--r-- 1 root root 0 Aug 4 18:58 test1 -rw-r--r-- 1 root root 0 Aug 4 18:58 test2 [root@localhost test]# lsattr ----i----------- ./test1 ---------------- ./test2 [root@localhost test]# rm test1 rm: remove regular empty file ‘test1’? y rm: cannot remove ‘test1’: Operation not permitted [root@localhost test]# mv test1 test3 mv: cannot move ‘test1’ to ‘test3’: Operation not permitted [root@localhost test]# echo mmm >> test1 -bash: test1: Permission denied [root@localhost test]# chattr +a 只能增加文件内容(目前使用nano或者echo) [root@localhost test]# chattr +a test1 [root@localhost test]# lsattr -----a---------- ./test1 ---------------- ./test2 [root@localhost test]# echo "mmm" >> test1 [root@localhost test]# cat test1 mmm [root@localhost test]# rm test1 rm: remove regular file ‘test1’? y rm: cannot remove ‘test1’: Operation not permitted [root@localhost test]# mv test1 test3 mv: cannot move ‘test1’ to ‘test3’: Operation not permitted lsattr 显示特定属性 chattr +A file chattr -A file 锁定文件的atime mtime ctime 不能被改变 chattr +i file 不能更改不能删除不能改名字 使用lsattr查看
-
访问控制列表
setfacl 设置acl的命令 用户:setfacl -m u:user_name:mode file 组: setfacl -m g:group_name:mode file -x是取消设置 setfacl -x g:group_name:mode file setfacl -b file 清空所有对file设置的acl权限 getfacl 查看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 生效 顺序:所有者,自定义用户,自定义组,其他为多用户或者组的文件和目录赋予访问权限rwx • mount -o acl /directory • getfacl file |directory 获取文件或者目录的acl权限设置 [root@localhost test]# getfacl /root/testmod getfacl: Removing leading '/' from absolute path names # file: root/testmod # owner: root # group: test # flags: -st user::rwx group::rwx other::rwx • setfacl -m u:wang:rwx file|directory 设置某个用户对文件或者目录的访问权限 [root@localhost ~]# setfacl -m u:tom:x test [root@localhost ~]# su tom [tom@localhost root]$ ll test ls: cannot open directory test: Permission denied • setfacl -Rm g:sales:rwX directory 递归设置组对目录以及目录下的文件和子目录的访问权限。 [root@localhost ~]# setfacl -Rm g:tom:rwX /root/test [root@localhost ~]# getfacl /root/tes # file: root/test # owner: root # group: root user::rwx user:mageedu:rwx group::r-x group:tom:rwx mask::rwx other::r-x [root@localhost ~]# ll -d test drwxrwxr-x+ 3 root root 44 Aug 4 19:18 test [root@localhost ~]# ll test total 4 -rw-rw-r--+ 1 root root 4 Aug 4 19:01 test1 -rw-rw-r--+ 1 root root 0 Aug 4 18:58 test2 drwxrwxr-x+ 2 root root 6 Aug 4 19:18 testdir [root@localhost ~]# getfacl test/test1 # file: test/test1 # owner: root # group: root user::rw- group::r-- group:tom:rw- mask::rw- other::r-- [root@localhost ~]# getfacl test/testdir # file: test/testdir # owner: root # group: root user::rwx group::r-x group:tom:rwx mask::rwx other::r-x • setfacl -M file.acl file|directory • setfacl -m g:salesgroup:rw file| directory • setfacl -m d:u:wang:rx directory 默认acl权限:新建文件都有,原有文件不受影响,删除时用-k 删除默认权限 • setfacl -x u:wang file |directory • setfacl -X file.acl directory mask :所有人除了所有者和other,其他所有人的权限都不能超过mask的权限,只能比他下或者跟他相同。 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
-
#getfacl -R /tmp/dir1
原创文章,作者:dxkboke,如若转载,请注明出处:http://www.178linux.com/29256
评论列表(1条)
重点突出,分类得当,标签精确