This section explains how to use Qumulo Core's implementation of NFSv4.1 with access control lists (ACLs) to manage access permissions for files.
The Qumulo Core implementation supports using AUTH_SYS credentials (also known as AUTH_UNIX), AUTH_NONE (which acts as AUTH_SYS but maps incoming UIDs and GIDs to nobody), and AUTH_KRB5, AUTH_KRB5P, or AUTH_KRB5I credentials. You can use the CLI tools in the nfs-acl-tools Linux package to allow or deny various operations.
For more information about NFSv4.1, see Enabling and Using NFSv4.1 on a Qumulo Cluster.
Using the NFSv4.1 CLI Commands to Manage ACLs
In most Linux distributions, the nfs-acl-tools package contains the NFSv4.1 commands that let you manage ACLs for files.
Showing the ACL of a File
To show the ACL of a file, run the nfs4_getfacl command. In the following example, we create the file my-file and then show the ACL for it.
touch /mnt/qumulo/my-file && \
nfs4_getfacl /mnt/qumulo/my-file
The following is example output.
A::user1@domain.example.com:rwatTnNcy
A:g:group1@domain.example.com:rwatTnNcy
A::EVERYONE@:rtncy
The entries in the ACL have four parts separated by colons (:). For more information, see the nfs4_acl in the Linux documentation.
The ACL in this example corresponds to 664 mode: The owner (user1) and group (group1) of the file are allowed to read and write, while others (EVERYONE@) are allowed to only read. To check the current mode, run the stat command, for example:
stat -c %a /mnt/qumulo/my-file
The following is example output.
664
Editing the ACL of a File
To edit the ACL of a file (by using the text editor specified in the $EDITOR environment variable), run the nfs4_editfacl command (or the nfs4_setfacl command with the -e flag).
Setting the ACL of a File
To set the ACL of a file, you can use one of the following commands:
- Add a Single ACE:
nfs4_setfacl -a <ace> - Set an Entire ACL:
nfs4_setfacl -s <acl>
Configuring Access Control Entries (ACEs) and Trustee Representation
The following guidance applies to all
nfs4_acl scenarios, including getting, editing, and setting the ACL.
There are four fields in the nfs4_acl syntax, separated by colons (:):
- The ACE type
- Additional ACE flags
- The trustee to which the ACE applies
- The access types to which the ACE applies
ACE Type
In the example of the file ACL, all three ACEs are set to A (allow).
Qumulo Core supports only
A and D ACEs.
- A: Allow
- D: Deny
- U: Audit
- L: Alarm
Additional ACE Flags
In the example of the file ACL, the second ACE has the flag g that shows that the ID in the following part represents a group (rather than a user).
Qumulo Core doesn’t support The
S and F flags.
The Trustee to Which the ACE Applies
You can use the following trustee representation formats.
- Be careful when you copy local users and groups across different Qumulo clusters manually. Aside from UIDs and GIDs, local users and groups are the only identity types in this table that aren't globally unique (because a user or group name represents them). If the destination cluster interprets the named user or group differently, the permissions you set might be unexpected.
- This consideration doesn't apply to replication copies of local user or group trustees.
| Representation | Example | Storage Location | Description |
|---|---|---|---|
A Kerberos principal that represents a user in the domain to which a Qumulo cluster is joined, in the following format:<user>@<domain> |
user1@domain.example.com |
For this trustee in the ACE, the system stores the corresponding AD SID for this user principal on disk. |
You can use this format regardless of client mount security, but only when the cluster is joined to AD. For more information about configuring your clients and Qumulo cluster for Kerberos, see the How NFSv4.1 Works with Kerberos in Qumulo Core. |
A Kerberos principal that represents a group in the domain to which a Qumulo cluster is joined, in the following format:<group>@<domain> |
group1@domain.example.com |
For this trustee in the ACE, the system stores the corresponding AD SID for this group principal on disk. |
For more information about configuring your clients and Qumulo cluster for Kerberos, see How NFSv4.1 Works with Kerberos in Qumulo Core. |
A raw SID, in the following format:<S-R-X-Y1-Y2-Yn-1-Yn> |
S-1-5-32-544 |
To store a SID on disk for this trustee, you can use this format in place of a Kerberos principal. |
For more information, see Security Identifiers in the Microsoft documentation. |
A numerical UID for an AUTH_SYS user, in the following format:<numeric_uid> |
1234 |
For this trustee in the ACE, the system stores this UID on disk. | — |
A numerical GID for an AUTH_SYS user, in the following format:<numeric_gid> |
5678 |
For this trustee in the ACE, the system stores the GID on disk. | To avoid having the group interpreted as a user, you must specify the group flag. |
A user local to a Qumulo cluster (that is, a user that was created by using Qumulo Core Web UI or the qq CLI), in the following format:qumulo_local/<username> |
qumulo_local/localuser1 |
For the trustee in this ACE, the system stores this user as a local user. | — |
A group local to a Qumulo cluster (that is, a group created by using the Qumulo Core Web UI or the qq CLI), in the following format:qumulo_local/<groupname> |
qumulo_local/localgroup1 |
For the trustee in this ACE, the system stores this group as a local group, on disk. | Because local Qumulo users and groups can't share a name, the group flag isn't necessary to show this is a group. |
Any user of the file system, in the following format:EVERYONE@ |
— | — | — |
The group owner of a file, in the following format:GROUP@ |
— | — | — |
The owner of a file, in the following format:OWNER@ |
— | — | — |
You can use all trustee representations interchangeably, even within a single ACL. For example, the following ACL is possible for a file:
nfs4_getfacl /mnt/qumulo/my-file
The following is example output.
A::user1@domain.example.com:rwatTnNcy
A:g:group1@domain.example.com:rwatTnNcy
A::1234:rwatTnNcy
A:g:5678:rwatTnNcy
A::S-1-5-8-9:rwatTnNcy
A:g:S-1-5-32-544:rwatTnNcy
A::qumulo_local/localuser1:rwatTnNcy
A:g:qumulo_local/localgroup1:rwatTnNcy
A::EVERYONE@:rtncy
The Access Types to Which the ACE Applies
For example:
r: Readt: Read attributesw: Write
The nfs4_setfacl command also lets you use the following shorthand:
R: Generic readW: Generic writeX: Execute permissions
Managing NFSv4.1 Permissions with ACLs and POSIX-Style Modes
You can manage NFSv4.1 access permissions by using ACLs, POSIX-style modes, or a combination of both.
-
If you set an ACL on a file and then also set a mode on it, the restrictions that the mode expresses also apply to the ACL. These restrictions change or remove ACEs that apply to the owner, group, or other users.
-
If you use the
OWNER@orGROUP@identifiers in an ACL that allows read, write, or execute permissions, the identifiers appear in theownerorgroupbits of the mode when you read the file’s mode.
Because the
EVERYONE@ identifier includes the owner and group of a file and the other bits of a mode don’t apply to the owner or group, the permissions you grant to the EVERYONE@ identifier are more broad than a mode’s other bits.
Using NFSv4.1 ACLs with SMB Access Control
NFSv4.1 ACLs are interoperable with SMB access controls. You can write and read by using both protocols. When you edit over NFS, the system represents SMB SIDs Kerberos principals.
Changing File Owners
When you change the owner of a file, the ACEs that refer to the owner change to the new owner, for example:
Example 1
nfs4_getfacl /mnt/qumulo/my-file
The following is example output.
A::user1@domain.example.com:rwatTnNcy
A:g:group1@domain.example.com:rwatTnNcy
A::EVERYONE@:rtncy
Example 2
sudo chown user2 /mnt/qumulo/my_file && \
nfs4_getfacl /mnt/qumulo/my-file
The following is example output.
A::user2@domain.example.com:rwatTnNcy
A:g:group1@domain.example.com:rwatTnNcy
A::EVERYONE@:rtncy
Using Equivalent NFSv4.1 and Qumulo ACL Commands
The syntax for the nfs4_setfacl command is <type>:<flags>:<principal>:<permissions>, for example A:fd:GROUP@:rwaDdxtTnNcCoy. You can use equivalent NFS (nfs4_setfacl) and Qumulo (qq fs_modify_acl) CLI commands to set ACL permissions.
The following tables compare elements of NFS and Qumulo ACL permissions.
| NFSv4.1 ACL Type | Qumulo ACL Type |
|---|---|
A |
Allowed |
D |
Denied |
| NFSv4.1 ACL Flag | Qumulo ACL Flag |
|---|---|
d |
Container inherit |
f |
Object inherit |
| NFSv4.1 Rights | Qumulo Rights |
|---|---|
a |
Extend file |
c |
Read ACL |
C |
Write ACL |
d |
Delete |
D |
Delete child |
n |
Read EA |
N |
Write EA |
o |
Take Ownership |
r |
Read contents |
R |
Read, Synchronize |
t |
Read attr |
T |
Write attr |
w |
Write data |
W |
Read ACL, Read attr, Synchronize, Write ACL, Write file |
x |
Execute/Traverse |
X |
Execute/Traverse, Read ACL, Read attr, Synchronize |
y |
Synchronize |
The following table gives examples of permissions and equivalent NFS and Qumulo CLI commands.
| Permissions | NFSv4.1 Command | Qumulo Command |
|---|---|---|
| Add Read Permission to File | |
|
| Add Read and Execute Permissions to File | |
|
| Add Read, Write, and Execute Permissions to File | |
|
| Add Full Access to File | |
|
| Add Deny ACE for Write and Execute Permissions on File | |
|
| Add Full Access to Group File and Directory Inheritances to Directory | |
|