本文介绍在使用NFSv4协议挂载的文件系统上,如何设置NFSv4 ACL来进行文件或目录权限管理。
前提条件
已使用NFSv4协议挂载文件系统。具体操作,请参见挂载NFS文件系统。
已开启文件系统的 NFS ACL 功能。开启方式:在 NAS 控制台进入文件系统详情页,在左侧导航栏单击访问控制,然后打开 NFS ACL 开关。
背景信息
您可以使用NFSv4协议挂载文件系统,并在已挂载文件系统的机器上安装符合Linux标准的nfs4-acl-tools软件。安装完成后,通过标准工具nfs4_getfacl和nfs4_setfacl设置NFSv4 ACL。
命令说明
在设置NFSv4 ACL前,请先熟悉相关操作命令。
|
命令 |
说明 |
|
|
查看文件当前的ACL权限。 |
|
|
给GROUP设置写权限。 |
|
|
给用户1000设置写权限。 |
|
|
给用户组10001设置写权限。 |
|
|
交互式编辑设置ACL权限。 |
|
|
将文件当前的ACL权限保存为一个文本文件。 |
|
|
恢复保存到文本文件里的ACL权限。 |
|
|
修改文件file1上的其中一条ACE的权限。 |
|
|
将文件file1的ACL权限复制到文件file2上。 |
|
|
删除文件file1上所有非保留的ACE。 |
|
|
对目录树dir下所有文件和目录,增加用户组10001可以读写访问的权限。 |
|
|
删除目录树dir下所有文件中包含1005的ACE。 |
|
|
让用户组10001对目录dir1下新创建的文件和目录有读写权限。 |
|
|
让用户组10001对目录dir1下新创建的文件有读和执行权限。 |
操作步骤
您可以参考以下步骤,为目录或文件设置NFSv4 ACL实现权限管理。
-
创建用户和群组。
本文假设创建普通用户player,属于普通用户群组players;管理员admini,属于管理员群组adminis;另外再创建一个用户anonym。
sudo useradd player sudo groupadd players sudo usermod -g players player sudo useradd admini sudo groupadd adminis sudo usermod -g adminis admini sudo useradd anonym -
安装NFSv4 ACL工具。
如果已安装NFSv4 ACL工具,请跳过此步骤。
# CentOS/RHEL/Alibaba Cloud Linux sudo yum -y install nfs4-acl-tools # Ubuntu/Debian sudo apt-get -y install nfs4-acl-tools -
获取用户群组players和adminis的id。
打开/etc/group文件,获取用户群组players和adminis的id,如下所示。
players:x:19064:player adminis:x:19065:admini -
对目录和文件设置NFSv4 ACL。
本文假设创建目录dir0,针对目录dir0中的所有文件,授予群组players只读权限,授予群组adminis读写执行权限,不授予其他用户权限。
sudo umask 777 sudo mkdir dir0 sudo nfs4_setfacl -a A:fdg:19064:RX dir0 sudo nfs4_setfacl -a A:fdg:19065:RWX dir0 sudo nfs4_setfacl -a A:fdg:OWNER@: dir0 sudo nfs4_setfacl -a A:fdg:GROUP@: dir0 sudo nfs4_setfacl -a A:fdg:EVERYONE@: dir0设置完成后,可执行
sudo nfs4_getfacl dir0查看设置结果。A::OWNER@:tTnNcCy A::GROUP@:tncy A::EVERYONE@:tncy A:fdi:EVERYONE@:tncy A:fdi:OWNER@:tTnNcCy A:fdi:GROUP@:tncy A:g:19064:rxtncy A:g:19065:rwaDxtTnNcCy A:fdig:19064:rxtncy A:fdig:19065:rwaDxtTnNcCy -
验证ACL的设置结果。
-
验证用户admini具有读写权限。
sudo su admini -c 'touch dir0/file'sudo su admini -c 'echo 123 > dir0/file' -
验证用户player具有只读权限。
-
验证是否有创建文件的权限(例如,创建dir0/file文件)。
-
执行命令
sudo su player -c 'touch dir0/file' -
如果返回如下信息,则表示用户player无权限创建文件。
touch: cannot touch ‘dir0/file’: Permission denied
-
-
验证是否有写权限(例如,向dir0/file文件中写入内容)。
-
执行命令
sudo su player -c 'echo 456 >> dir0/file' -
如果返回如下信息,则表示用户player无写权限。
bash: dir0/file: Permission denied
-
-
验证是否有读权限。
-
执行命令
sudo su player -c 'cat dir0/file' -
如果返回如下信息,则表示用户player有读权限。
123
您还可以通过执行
sudo su player -c 'nfs4_getfacl dir0/file'命令,查看用户player对dir0/file文件的权限。A::OWNER@:tTnNcCy A::GROUP@:tncy A::EVERYONE@:tncy A:g:19064:rxtncy A:g:19065:rwaxtTnNcCy -
-
-
验证用户anonym无权限。
-
验证无权限查看dir0目录下的文件。
-
执行命令
sudo su anonym -c 'ls dir0' -
如果返回如下信息,则表示用户anonym无权限访问。
ls: cannot open directory dir0: Permission denied
-
-
验证无权限查看file文件的内容。
-
执行命令
sudo su anonym -c 'cat dir0/file' -
如果返回如下信息,则表示用户 anonym 无权限访问 dir0 目录下的 file 文件(NFSv4 协议在缺少目录搜索权限时返回此信息)。
cat: dir0/file: No such file or directory
-
-
验证无权限访问file文件。
-
执行命令
sudo su anonym -c 'nfs4_getfacl dir0/file' -
如果返回如下信息,则表示用户anonym无权限访问file文件。
Invalid filename: dir0/file
-
-
-
相关操作
如果您要移除用户权限,可参见以下方法。
建议在使用NFSv4 ACL时,尽量把每个用户归类到群组中。在设置NFSv4 ACL时直接设置群组权限而不用设置单个用户的权限。这样在移除用户权限时只需把用户移出某个群组即可。例如:参见以下命令将用户admini移出群组adminis,移入群组adminis2。
-
创建adminis2群组。
sudo groupadd adminis2 -
将用户admini移出群组adminis,移入群组adminis2。
sudo usermod -g adminis2 admini -
查询用户ID权限。
-
执行命令
id admini -
返回信息
uid=1057(admini) gid=1057(admini) groups=1061(adminis2)
-
-
验证用户admini具备的权限。
-
验证无权限访问dir0目录。
-
执行命令
sudo su admini -c 'ls dir0' -
如果返回以下信息,则表示用户admini无权限访问dir0目录。
ls: cannot open directory dir0: Permission denied
-
-
验证用户admini无权限查看dir0/file文件的内容。
-
执行命令
sudo su admini -c 'cat dir0/file' -
如果返回以下信息,表示用户 admini 无权限访问 dir0 目录下的 file 文件(NFSv4 协议在缺少目录搜索权限时返回此信息)。
cat: dir0/file: No such file or directory
-
-
验证用户admini无权限访问dir0/file。
-
执行命令
sudo su admini -c 'nfs4_getfacl dir0/file' -
如果返回以下信息,表示用户 admini 无权限访问 dir0 目录下的 file 文件(NFSv4 协议在缺少目录搜索权限时返回此信息)。
Invalid filename: dir0/file
-
-