Chapter 14 权限管理

  • ls -l 命令可以查看所有者

  • chown 用户名 文件名

    修改文件所有者

  • chgrp 组名 文件名

14.1 基本权限UGO

以drwxr-xr-x为例

第一位确定文件类型

  • d:目录
  • -:文件
  • l:link file, 链接文档
  • b:block device, 装置文件里面的可供储存的接口设备,例如硬盘
  • c:charactor device, 装置文件里面的串行端口设备,例如键盘、鼠标

后面三位为一组,分别表示所有者(u)、组(g)、其他用户(o)的权限

  • r(4):可读,对于目录可以使用ls查看内容

  • w(2):可以修改文件,对于目录可以创建/删除/重命名目录内的内容

    删除文件的前提是对所在目录有写权限

  • x(1):可执行,对于目录是可进入

权限后还有可能有.+,分别表示SELinux安全上下文和FACL权限控制

rm -rf 删除目录需要对目录树中所有非空目录都有写权限

ls -l 的其他内容:

drwxr-xr-x 2 debian debian 4096 Feb 2 09:24 test

  • 2:对于文件是硬链接数,对于目录是一级子目录数(包括.和..即2代表空目录)

  • debain debian:分别是所有者和组

  • 4096:文件大小(字节),文件夹显示4096字节

  • Feb 2 09:24:最后修改日期(mtime)

14.1.1 chmod

对象:u g o a

赋值符:+ - =

  • chmod 751 FILE:

    chmod u=rwx,g=rx,o=x FILE

  • chmod u+x FILE:所有者添加执行权限

  • chmod +x FILE:任何人可执行

  • chmod a-x FILE:

    chmod -x FILE,任何人不可执行

14.1.2 chown chgrp

chown:

  • chown newowner FILE

    -R :如果是目录,则使其下所有内容递归生效

  • chown newowner:newgroup FILE

chown -R tom /home/test

chgrp:

  • chgrp newgroup FILE

chgrp -R tom /home/test

14.1.3 umask

umask影响由该进程创建的文件和目录的权限

  • 计算方式:

    目录默认权限是777,文件是666

    umask二进制取反,与默认权限的二进制做与运算

举例:shell的umask是0022

[root@Cent-KVM cent]# umask
0022

mkdir 命令创建的目录权限是rwxr-xr-x,即777减去了g和o的w

touch 命令创建的文件权限是rw-r–r–,即666减去g和o的w

umask和默认权限进行二进制的逻辑与

临时修改shell的umask:umask 0000

/etc/login.defs中umask是077

[root@Cent-KVM cent]# cat /etc/login.defs | grep -i umask
UMASK           077

那么新用户创建的家目录权限应该是700

debian系该值是022,那么新用户家目录权限是755

14.2 基本权限FACL

FACL: File Access Control List,访问控制列表

14.2.1 getfacl

  • getfacl file

    查看文件的facl权限

当文件设置facl权限后,ls -l显示的权限后有+号,第二个权限是mask

14.2.2 setfacl

  • setfacl -m u:lisa:r file 授予lisa读权限
  • setfacl -m u:jack:r,u:tom:rw file 逗号分隔多个条目
  • setfacl -m u:alice:- file 授予alice空权限
  • setfacl -m o::- file 授予其他人空权限
  • setfacl -m m::rx file 取消所有用户和组的读权限
  • setfacl -x g:staff file 删除该组的ACL条目
  • setfacl -b file 删除所有ACL条目
  • getfacl file1 | setfacl --set-file=- file2 复制file1的facl权限到file2

14.2.3 mask

权限限制,除所有者和其他人的权限都被限制(临时)

  • setfacl -m m::r file

  • 注意:如果setfacl -m m::- file 此时ACL列表中的人会变成others

    若others有权限,那么这些人也会有相同权限

    建议使用facl时将其他人的权限设置为空

    chmod o=- file

mask权限决定着除所有者和其他人之外的最高权限,

如果修改mask之后又修改了用户和组的权限,那么mask会恢复正常

14.2.4 default

权限继承

setfacl -m d:u:alice:rwx file

该目录下以后创建的文件都有该权限(但是没有当前目录的权限)

建议配合 setfacl -m u:alice:rwx file使用

14.3 高级权限

高级权限可以使用chmod 来设置,例如chmod 4755 ,第一个数字表示高级权限

suid 4, sgid 2, sbit 1

14.3.1 suid

Set UID: chmod u+s file

作用于文件

使任何人执行该文件时,以文件所有者身份执行

14.3.2 sgid

Set GID: chmod g+s file

作用于目录:

在此目录下新建文件时,文件继承目录属组

作用于文件(不常用):

使任何人执行该文件时,以文件所属组身份执行

14.3.3 sbit

Sticky Bit: chmod o+t file

作用于目录

使该目录下的文件,只能被文件所有者/目录所有者/root删除,其他人即使有目录写权限也不能删除

常见于tmp目录(/tmp, /var/tmp), 它们的权限是rwxrwxrwt, ls查看是绿底黑字,权限是1777,全局可写

高级权限都需要对应位置有x权限,如果没有x权限,比如chmod 7666,那么高级权限是空权限,因为没人能使用到它

这时ls -l命令可以看到高级权限是大写的-rwSrwSrwT,表示没有执行权限

14.4 隐藏属性

14.4.1 lsattr

查看文件属性

14.4.2 chattr

chattr +a file 仅追加

chattr = file 清空属性

操作符: + - =

选项:-R 递归

属性:

a: Append only , 仅追加,适用于日志文件

i: Immutable , 禁止修改