Linux还为每个文件和目录存储了3个额外的信息位。
□设置用户ID(SUID):当文件被用户使用时,程序会以自身文件属主的权限运行。
s:属主原有执行权限
S:属主无执行权限
chmod u+|-s /path/to/somfile
chmod 4644 /path/to/somefile
例:
[hadoop@localhost test]$ ls -l `which passwd`-rwsr-xr-x 1 root root 22984 2007-01-07 /usr/bin/passwd
□设置组ID(SGID):对文件来说,程序会议文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认数组作为默认属组。
chmod g+|-s /path/to/somfile
chmod 4644 /path/to/somefile
例子:
1、创建两个用户hive和hadoop
将这两个用户加入到mygrp组中赋予一个目录有mygrp组写的权限
[root@localhost ~]# useradd hadoop[root@localhost ~]# useradd hive[root@localhost ~]# usermod -a -G mygrp hadoop[root@localhost ~]# usermod -a -G mygrp hive[root@localhost ~]# chmod g+w /tmp/test/[root@localhost ~]# chown :mygrp /tmp/test/
2、分别以hive和hadoop的身份在/tep/test创建一个文件
-rw-rw-r-- 1 hadoop hadoop 0 10-20 21:49 a.hadoop-rw-rw-r-- 1 hive hive 0 10-20 21:50 a.hive
注:这个时候如果以hive的身份去修改a.hadoop,会出无法修改,权限不够
因为这个文件的属主和属组都是hadoop,hive无权更改
两个用户都能修改各自创建的文件,只需修改属组为mygrp即可。但不可能每次创建一个文件都手工去chmod。这个时候就需运用到sgid的作用。
3、将/tmp/test修改成sgid
[root@localhost ~]# chmod g+s /tmp/test/[root@localhost ~]# ls -ld /tmp/test/drwxrwsr-x 2 root mygrp 4096 10-20 21:50 /tmp/test/
4、以hive和hadoop各自的身份分别创建两个文件
-rw-rw-r-- 1 hadoop mygrp 0 10-20 22:06 b.haddop-rw-rw-r-- 1 hive mygrp 0 10-20 22:06 b.hive
这个时候,hadoop和hive用户的属组都为Mygrp。也就是此目录为两者的共享目录。
SGID位对文件共享非常重要。是能了SGID位,让在一个共享目录下创建的新文件都属于该目录的属组,也就是每个用户的组
□粘着位(sticky):附加other的权限上
chmod o+|-t /path/to/somefile
例子:
1、将/tmp/test进行配置stick[root@localhost ~]# chmod o+t /tmp/test/[root@localhost ~]# ls -ld /tmp/test/drwxrwsr-t 2 root mygrp 4096 10-20 22:13 /tmp/test/2、用hadoop的身份创建一个文件,如下:-rw-rw-r-- 1 hadoop mygrp 0 10-20 22:16 c.haddop3、用hive的身份编辑和删除c.haddop结果:可以对c.hadoop进行编辑修改,但是无法删除[hive@localhost test]$ rm c.haddoprm: 无法删除 “c.haddop”: 不允许的操作
chmod SUID、SGID和粘着位的八进制值
二进制 八进制 描述
000 0 所有位都清零
001 1 粘着位置位
010 2 SGID位置位
011 3 SGID位和粘着位都置位
100 4 SUID位置位
101 5 SUID位和粘着位都置位
110 6 SUID位和SGID位都置位
111 7 所有位都置位
ACL:文件访问控制列表
acl:用于实现在原有的访问控制机制之外补充一种文件访问控制机制
用户访问文件:
1、用户是否为文件属主?
2、用户是否有特定的访问控制条目?
3、用户是否属于文件属组?
4、用户所属的组是否有特定的访问控制条目?
5、其它。
getfacl /path/to/somewhere:查看文件或目录的访问控制列表:
[hadoop@localhost test]$ getfacl b.hive# file: b.hive# owner: hive# group: mygrpuser::rw-group::rw-other::r--
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 /path/to/somewhere
setfacl -x g:GROUPNAME /path/to/somewhere
额外挂载的文件系统默认不支持acl
/dev/mapper/onlinevg-mylv3.0G 136M 2.7G 5% /mnt[root@TP-CW-TS-DB-01 mnt]# setfacl -m u:nagios:rw fstabsetfacl: fstab: Operation not supported
解决方法1:
[root@TP-CW-TS-DB-01 mnt]# umount /mnt[root@TP-CW-TS-DB-01 mnt]# mount -o acl /dev/mapper/onlinevg-mylv /mnt[root@TP-CW-TS-DB-01 mnt]# mount -o acl /dev/mapper/onlinevg-mylv /mnt[root@TP-CW-TS-DB-01 mnt]# setfacl -m u:nagios:rw fstab[root@TP-CW-TS-DB-01 mnt]# getfacl fstab# file: fstab# owner: root# group: rootuser::rw-user:nagios:rw-group::r--mask::rw-other::r--
永久有效:编辑/etc/fstab,在挂载选项后附加acl选项
方法2:设定分区的默认挂载选项中有acl,则挂载无须再指定acl:
tune2fs -o acl DEVICE
取消此默认挂载选项:
tune2fs -o ^acl DEVICE
补充:
创建不可修改文件
在常见的Linux扩展文件系统中(如ext2、ext3、ext4等),可以将文件设置为不可修改(immutable).某些文件属性可帮助我们将文件设置不可修改。一旦文件被设置为不可修改,任何用户包括超级用户都不能删除该文件,除非其不可修改属性被移除。通过查看/etc/mtab文件,很容易找出所有挂载分区的文件系统类型。
例如:
[root@TP-CW-TS-DB-01 mnt]# chattr +i /mnt/fstab #添加不可修改权限[root@TP-CW-TS-DB-01 mnt]# rm /mnt/fstabrm: remove regular file `/mnt/fstab'? yrm: cannot remove `/mnt/fstab': Operation not permitted[root@TP-CW-TS-DB-01 mnt]# chattr -i /mnt/fstab #去除不可修改权限[root@TP-CW-TS-DB-01 mnt]# rm /mnt/fstabrm: remove regular file `/mnt/fstab'? y #删除成功