1. ACL权限
ACL(access control list)用来设定用户(除所有者,所属组,其他组之外的用户或组)针对文件的读、写、执行权限。
# getfacl 文件名 # 查看ACL权限
# setfacl 选项 文件名 #设定ACL权限
选项
- -m:设定ACL权限。如果给用户acl权限,则使用“u:用户名:权限” 格式来赋予权限。如果是给组acl权限,则使用“g:组名:权限”;
- -x: 删除指定的acl权限;
- -b: 删除所有acl 权限
- -d:设定默认ACL权限。只对目录生效(操作对象为目录),指目录中新建立的文件拥有此默认权限
- -k: 删除默认acl权限
- -R: 递归设定ACL权限。指设定的ACL权限会对目录下的所有子文件生效
举例:我们要求 root 是 /acltest 目录的属主,权限是 rwx;tgroup 是此目录的属组,tgroup 组中拥有班级学员 zhangsan 和 lisi,权限是 rwx;其他人的权限是 0。这时,试听学员 st 来了,她的权限是 r-x。
[root@localhost ~]# mkdir acltest
[root@localhost ~]# chmod 770 alctest
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# groupadd tgroup
[root@localhost ~]# gpasswd -a zhangsan tgroup #将张三加入troup组
[root@localhost ~]# gpasswd -a lisi tgroup
[root@localhost ~]# chown root:tgroup acltest #将acltest的所属组改为tgoup
[root@localhost ~]# ll -d acltest
drwxrwx---. 2 root tgroup 4096 Jan 9 16:17 acltest
[root@localhost ~]# useradd st
[root@localhost ~]# setfacl -m u:st:rx acltest # 给用户st 赋acl权限
[root@localhost ~]# ll -d acltest
drwxrwx---+ 2 root tgroup 4096 Jan 9 16:17 acltest
[root@localhost ~]# getfacl acltest
# file: acltest/
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
mask::rwx
other::---
#给组添加acl权限
[root@localhost ~]# groupadd tgroup2
[root@localhost ~]# setfacl -m g:tgroup2:rx acltest
[root@localhost ~]# getfacl acltest
# file: acltest
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
group:tgroup2:r-x
mask::rwx
other::---
#设置默认acl权限
[root@localhost ~]# setfacl -d u:st:rx acltest
[root@localhost ~]# getfacl acltest
# file: acltest
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
group:tgroup2:r-x
mask::rwx
other::---
default:user::rwx
default:user:st:r-x
default:group::rwx
default:mask::rwx
default:other::---
#设置递归ACL权限
[root@localhost ~]# setfacl -m u:st:rx -R acltest
#删除指定的acl权限
[root@localhost ~]# setfacl -d u:st acltest
#删除所有acl权限
[root@localhost ~]# setfacl -x acltest
2.SetUID、SetGID、Stick BIT 文件特殊权限
SetUID: 文件在拥有SetUID权限后,普通用户在执行该文件过程中,可以获得文件所有者的权限。表现为:文件所有者的x(执行)权限位置出现一个小写s。
[root@localhost ~]#ll /usr/bin/passwd
-rwsr-xr-x 1 root root 25980 2月22 2012/usr/bin/passwd
SetGID:执行者在执行程序的时候,组身份升级为改程序文件的所属组。同样SetGID权限只在程序运行过程中有效。
表现为:文件所属组的x(执行)权限位置出现一个小写s。
[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 35612 8月24 2010/usr/bin/locate
Sticky BIT: 意为粘着位(或粘滞位),也简称为 SBIT。粘着位只对目录有效。普通用户拥有 w 权限时,可以删除此目录下的所有文件,包括其他用户建立的文件。一旦被赋予了粘着位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。
表现为:其他组的x(执行)权限位置出现一个t
[root@localhost ~]# ll -d /tmp/
drwxrwxrwt 4 root root 4096 1月20 06:17 /tmp/
这几种文件特殊权限的设置:
- 4 代表 SetUID;
- 2 代表 SetGID;
- 1 代表 SBIT;
特殊权限的设置还是使用chmod 命令。
数字法: 文件的普通权限只有三个数字,特殊权限的设置用4个数字,其中第一个数字来表示特殊权限,后三位为普通权限(读、写、执行)。
[root@localhost ~]# chmod 4755 ftest #赋予SetUID权限
[root@localhost ~]# chmod 1755 dtest/ #赋予 SBIT权限
字符法:
通过"u+s"赋予 SetUID 权限,通过"g+s"赋予 SetGID 权限,通过"o+t"赋予 SBIT 权限。
[root@localhost ~]#chmod u+s, g+s, o+t ftest
#设置特殊权限
[root@localhost ~]# chmod u-s, g-s, o-t ftest
#取消特殊权限
注: SetUID 只对二进制程序文件有效,SetGID 可以对二进制程序文件和目录有效,但是 SBIT 只对目录有效。用户只有在具备x权限时,特殊权限才有效,不然即使赋予特殊权限也没有任何意义。
3. chattr 命令 修改文件系统的权限属性
chattr只有root用户可以使用,凌驾于rwx基础功能之上的授权
# chattr [+-=][选项] 文件或目录
选项:
- +:増加权限;
- -:删除权限;
- =:等于某权限;
- i:如果对文件设置属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件;
- a:如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据;如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件;
- e:Linux 中的绝大多数文件都默认拥有 e 属性,表示该文件是使用 ext 文件系统进行存储的,而且不能使用"chattr -e"命令取消 e 属性;
[root@localhost ~]# chattr +i ftest
[root@localhost ~]# chattr -i ftest
4. lsattr 命令 查看文件系统属性
# lsattr 选项 文件名
选项:
- -a: 显示所有文件和目录;
- -d:如果目标是目录,则仅列出目录本身的属性,而不会累出文件的属性;