linux下ACL权限和掩码权限
🎯 本文专栏:Linux
🚀 作者主页:小度爱学习
1、ACL 权限
ACL 权限分配:给指定的用户指定目录分配指定的权限。
1.1、ACL权限管理命令
查看ACL权限
[root@localhost ~]# getfacle 文件名
设定ACL权限
语法: setfacl 选项 文件名
选项:
-m:设定 ACL 权限。如果是给予用户 ACL 权限,则使用 u:用户名:权限 格式赋予;如果是给予组 ACL 权限,则使用 g:组名:权限" 格式赋予;
-x:删除指定的 ACL 权限;
-b:删除所有的 ACL 权限;
-d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
-k:删除默认 ACL 权限;
-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效;
#给用户和用户组添加ACL权限 给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名 给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名 #通过加上选项 -R 递归设定文件的 ACL 权限,所有的子目录和子文件也会拥有相同的ACL权限 setfacl -Rm u:用户名:权限 -R 文件名 # 如果给父目录设定了默认的 ACL 权限,那么父目录中所有新建的子文件会继承父目录的ACL权限 setfacl -m d:u:用户名:权限 文件名 setfacl -md u:用户名:权限 文件名
示例:所有者root用户在根目录下创建一个文件目录/project,然后创建一个QQ群所属组,所属组里面 创建两个用户zhangsan和lisi。此文件权限是770。
然后创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x。
[root@kongd ~]# mkdir /project
[root@kongd ~]# useradd zhangsan
[root@kongd ~]# useradd lisi
[root@kongd ~]# groupadd QQgroup
[root@kongd ~]# gpasswd -M zhangsan,lisi QQgroup
[root@kongd ~]# chown root:QQgroup /project/
[root@kongd ~]# chmod 770 /project/
[root@kongd ~]# ll -d /project/
drwxrwx---. 2 root QQgroup 6 12月 30 14:15 /project/
目录 /project 的所有者和所属组其他人权限设定为 770。接下来我们创建旁听用户 pt,并赋予 acl 权限
[root@kongd ~]# useradd pt
[root@kongd ~]# setfacl -m u:pt:rx /project/
注意如下所示,如果某个目录或文件下有 + 标志,说明其具有 acl 权限。
[root@kongd ~]# ll -d /project/
drwxrwx---+ 2 root QQgroup 6 12月 30 14:15 /project/
[root@kongd ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: QQgroup
user::rwx
user:pt:r-x
group::rwx
mask::rwx
other::---
为了验证 pt 用户对于 /project 目录没有写权限,我们用 su 命令切换到 pt 用户,然后进入 /project 目 录,在此目录下创建文件,看是否能成功:
[root@kongd ~]# su - pt
[pt@kongd ~]$ cd /project/
[pt@kongd project]$ touch test.txt
touch: 无法创建 'test.txt': 权限不够
1.2、删除acl权限
#删除指定用户的 ACL 权限
setfacl -x u:用户名 文件名
#删除指定用户组的 ACL 权限
setfacl -x g:组名 文件名
#删除文件的所有 ACL 权限
setfacl -b 文件名
2、权限掩码umask
2.1、设置新建文件或目录的默认权限
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask值有关,其具体关系是:
新建文件的默认权限=0666-umask值
新建目录的默认权限=0777-umask值
- 分别查看、修改用户当前默认的umask值。
[root@localhost ~]# umask //查看当前用户的umask权
限
0022
[root@localhost ~]# touch file800
[root@localhost ~]# mkdir dir800
[root@localhost ~]# ll -d dir800 file800
drwxr-xr-x. 2 root root 4096 3月 11 19:40 dir800
-rw-r--r--. 1 root root 0 3月 11 19:40 file800#修改shell umask值(临时)
[root@localhost ~]# umask 000
[root@localhost ~]# mkdir dir900
[root@localhost ~]# touch file900
[root@localhost ~]# ll -d dir900 file900
drwxrwxrwx. 2 root root 4096 3月 11 19:44 dir900
-rw-rw-rw-. 1 root root 0 3月 11 19:44 file900#修改shell umask值(永久)
[root@localhost ~]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; thenumask 002
elseumask 022
fi
[root@localhost ~]# source /etc/profile //立即在当前shell中生效#通过umask决定新建用户家目录的权限
[root@localhost ~]# vim /etc/login.defs
UMASK 077
[root@localhost ~]# useradd gougou
[root@localhost ~]# ll -d /home/gougou/
drwx------. 4 gougou gougou 4096 3月 11 19:50 /home/gougou/
[root@localhost ~]# vim /etc/login.defs
UMASK 000
[root@localhost ~]# useradd yangyang
[root@localhost ~]# ll -d /home/yangyang/
drwxrwxrwx. 4 yangyang yangyang 4096 3月 11 19:53 /home/yangyang/#例如vsftpd进程 /etc/vsftpd/vsftpd.conf 【了解】
anon_umask=007
local_umask=000