一、文件特殊权限

s: suid, set uid,属主有s权限,意味着用户在执行此程序时,其进程的属主不再是发起者本人,而是这个程序文件的属主;
        s:属主原本有执行权限
        S:属主原本无执行权限
        chmod u+|-s /path/to/somefile  给文件属主增删执行权限
        chmod 4644 /path/to/somefile
    s: sgid, set gid,属组有s权限,意味着执行此程序时,其进程的属组不再是运行者本人所属的基本组,而是此程序文件的属组;主要用于在特定目录创建文件时使其属组与目录属组相同
        chmod g+|-s /path/to/somefile   设置目录+s再于目录下创建文件则文件属组不再是当前用户基本组,此方式创建的文件同组用户可互相删除文件需再行设定t属性

    t: sticky, 粘贴位,附加other的权限上,表现为t  仅owner可删除此文件但是同组用户仍可修改内容。
        t:
        T:
        chmod o+|-t /path/to/somefile

    三位特殊权限

    u:s
    g:s
    o:t

    suid,sgid,sticky

         000
    ugt: 001
         010
         100
         011
         101
         110: 6
         111

    chmod 6664 /tmp/a.txt
        umask: 0022   首位对应特殊权限

    目录应用实例

    /tmp/test
    chmod g+s,o+t /tmp/test
    即若原权限为775
    chmod 3775 /tmp/test
    chown :mygrp /tmp/test

 

二、FACL: 文件访问控制列表

hadoop: /var/tmp/test.txt
    hadoop, hadoop
    664: 其它,只读

    hadoop希望能够让hive写此文件,他该如何进行?只能修改other的权限有写权限;

    acl: 用于实现在原有的访问控制机制之外补充一种文件访问控制机制

    用户访问文件:
        1、用户是否为文件属主?
        2、用户是否有特定的访问控制条目?
        3、用户是否属于文件属组?
        4、用户所属的组是否有特定的访问控制条目?
        5、其它。

    getfacl /path/to/somewhere: 查看文件或目录的访问控制列表;

    setfacl -m u:USERNAME:MODE /path/to/somewhere: 为USERNAME指定的用户设定对文件/path/to/somewhere具有MODE访问权限;

    setfacl -m g:GROUPNAME:MODE  /path/to/somewhere: 为GROUPNAME指定的组设定对文件/path/to/somewhere具有MODE访问权限;

    setfacl -x u:USERNAME /patn/to/somewhere
    setfacl -x g:GROUPNAME /path/to/somewhere

    额外挂载的文件系统默认不支持acl,如果要支持,
    方法1:
        mount -o acl DEVICE MOUNT_POINT
        永久有效:需要编辑/etc/fstab,在挂载选项(defaults)后附加acl选项;

    方法2:设定分区的默认挂载选项中有acl,则挂载时无须再指定acl;
        tune2fs -o acl DEVICE
        取消此默认挂载选项:
        tune2fs -o ^acl DEVICE

hadoop: 文件/var/tmp/hadoop.txt, 664
    拒绝hive用户对此的任何访问;
    setfacl -m u:hive:--- /var/tmp/hadoop.txt

复制文件/var/log/messages至/data目录, 其属主为root用户,且有读写权限,属组为root组,且有读写权限;可以被任何人读取,可以被gentoo用户和magedu组读写,但centos用户没有任何访问权限;

# mkdir /data
# cp /var/log/messages /data
# chmod 664 /data/mesages
# setfacl -m u:gentoo:rw /data/mesages
# setfacl -m g:magedu:rw /data/mesages
# setfacl -m u:centos:--- /data/mesages