本文主要介绍了Linux中的特殊权限和FACL相关知识


Ⅰ  特殊权限

我们一般对linux 文件和目录的读写执行(rwx)权限应该都比较熟悉,但在这普通权限外还有3个特殊权限SUID(4)、SGID(2)和Sticky(1)。


SUID

(1)概念

SUID针对属主,如果属主有S权限,意味着任何用户在执行此程序时,其进程的属主不再是发起者本人,而是这个程序文件的属主;

(2)相关命令

chmod  u+|-s /path/to/somefile

(3)其他注意事项

如果原文件属主原有执行权限,给属主S权限后,表现为小写s。

如果原文件属主无执行权限,给属主S权限后,表现为大写S。

Linux基础(七)--特殊权限、FACL_FACL

Linux基础(七)--特殊权限、FACL_特殊权限_02

SGID

(1)概念

SGID针对属组,如果属组有S权限,意味着任何用户在执行此程序时,其进程的属组不再是发起者所属的基本组,而是这个程序文件的属组;

(2)相关命令

chmod  g+|-s /path/to/somefile

(3)其他注意事项

如果原文件属组原有执行权限,给属组S权限后,表现为小写s。

如果原文件属组无执行权限,给属组S权限后,表现为大写S。

Sticky

(1)概念

Sticky属于粘贴位,附加在other的权限上。

(2)相关命令

chmod o+|-t /path/to/somefile

(3)其他注意事项

如果原文件other有执行权限,给属组Sticky权限后,表现为小写t。

如果原文件other无执行权限,给属组Sticky权限后,表现为大写T。

Linux基础(七)--特殊权限、FACL_SUID_03

Linux基础(七)--特殊权限、FACL_FACL_04

Ⅱ  FACL

如果有这样一种需要,hadoop希望能够让hive写此文件,他该如何进行?只能修改other的权限有写权限,但这样好吗?很明显,这样other都有写权限,这样并不能满足实际需求,所以要引入FACL的概念。

(1)概念

FACL即文件控制访问列表。他是用于实现在原有的访问控制机制之外补充了一种文件访问控制机制。

(2)用户访问文件权限顺序

1、用户是否为文件属主;

2、用户是否有特定的访问控制条目;

3、用户是否属于文件属组;

4、用户所属的组是否有特定的访问控制条目;

5、其它。

(3)相关命令

1.查看文件或目录的访问控制列表

getfacl  /path/to/somewhere

Linux基础(七)--特殊权限、FACL_Linux_05

2.对文件或目录赋予权限

①为USERNAME指定的用户设定对文件/path/to/somewhere具有MODE访问权限:

setfacl -m  u:USERNAME:MODE /path/to/somewhere

Linux基础(七)--特殊权限、FACL_SUID_06

这里可以看到为hadoop用户赋予r权限后,在权限列表中多了一条。

②为GROUPNAME指定的组设定对文件/path/to/somewhere具有MODE访问权限:

setfacl -m g:GROUPNAME:MODE  /path/to/somewhere

Linux基础(七)--特殊权限、FACL_Linux_07

这里为hadoop组赋予r权限后,在权限列表中也多了一条。


3.取消文件或目录的权限

①取消USERNAME指定的用户设定对文件/path/to/somewhere具有MODE访问的权限:

setfacl -x u:USERNAME /patn/to/somewhere

②取消GROUPNAME指定的组设定对文件/path/to/somewhere具有MODE访问的权限:

setfacl -x g:GROUPNAME:MODE  /path/to/somewhere

由于命令详细,这里就不演示了。


(4)其他相关内容

额外挂载的文件系统默认不支持acl,如果要支持有两种方法。

方法1:

mount -o acl DEVICE MOUNT_POINT;

如果需要永久有效:需要编辑/etc/fstab,在挂载选项后附加acl选项;

方法2:

设定分区的默认挂载选项中有acl,则挂载时无须再指定acl:

tune2fs -o acl DEVICE

取消此默认挂载选项:

tune2fs -o ^acl DEVICE


(5)一个小例子

复制文件/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