[ 
https://issues.apache.org/jira/browse/HDDS-5891?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Siyao Meng updated HDDS-5891:
-----------------------------
    Attachment: edge.png
                1.2.0.png

> OFS mkdir -p does not work as expected for bucket creation when volume exists 
> due to volume create ACL check
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: HDDS-5891
>                 URL: https://issues.apache.org/jira/browse/HDDS-5891
>             Project: Apache Ozone
>          Issue Type: Bug
>          Components: OFS, Ozone CLI
>            Reporter: Zita Dombi
>            Assignee: Siyao Meng
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.3.0
>
>         Attachments: 1.2.0.png, edge.png
>
>
> We discovered this problem during the implementation of HttpFS Gateway. I did 
> an acceptance test for the HttpFS with Robot framework. In the ozonesecure 
> docker environment when I tried to make a volume with the testuser principal 
> it didn't work, because it doesn't have permission to do it. So we decided to 
> make a volume with an admin, set the testuser as the owner of it and then 
> create buckets with the testuser. Even after the owner change happened 
> successfully it gave the same error:
> User testuser/[email protected] doesn't have CREATE permission to access 
> volume vol01 null null
> After debugging we found why this happened. As the bucket is not existing 
> first it goes to the getBucket() method in the 
> [BasicRootedOzoneClientAdapterImpl|https://github.com/apache/ozone/blob/master/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java#L234]
>  class.
> The createIfNotExist is true and both in the VOLUME_NOT_FOUND and 
> BUCKET_NOT_FOUND cases tries to create volume first, which the testuser does 
> not have permission. So we got the error from there, despite of the fact that 
> testuser is the owner of that volume, so it should be able to create buckets 
> inside.
> We were able to recreate this in terminal in the scm container (in that 
> because it has both testuser and testuser2 as principals).
> {code:java}
> bash-4.2$ klist
> Ticket cache: FILE:/tmp/krb5cc_1000
> Default principal: testuser/[email protected]
> Valid starting     Expires            Service principal
> 10/18/21 11:23:39  10/19/21 11:23:39  krbtgt/[email protected]
>         renew until 10/25/21 11:23:39
> {code}
> In the scm testuser is an admin, testuser/[email protected] is added as an 
> ozone administrator in the docker-config. I did the same with 
> testuser/[email protected] but it is not an admin, as the username is mapped 
> to short user principal name (with an auth-to-local rule), which is testuser. 
> Because of this the equality check between testuser and 
> testuser/[email protected] is false, so it is not taken as an admin user.
> {code:java}
> bash-4.2$ ozone sh volume update --user=testuser2 vol02
> \{
>   "metadata" : { },
>   "name" : "vol02",
>   "admin" : "testuser",
>   "owner" : "testuser2",
>   "quotaInBytes" : -1,
>   "quotaInNamespace" : -1,
>   "usedNamespace" : 0,
>   "creationTime" : "2021-10-18T11:19:59.777Z",
>   "modificationTime" : "2021-10-18T11:24:04.183Z",
>   "acls" : [ \{
>     "type" : "USER",
>     "name" : "testuser",
>     "aclScope" : "ACCESS",
>     "aclList" : [ "ALL" ]
>   } ]
> }
> bash-4.2$ kinit -kt /opt/hadoop/compose/_keytabs/testuser2.keytab 
> testuser2/[email protected]
> bash-4.2$ klist
> Ticket cache: FILE:/tmp/krb5cc_1000
> Default principal: testuser2/[email protected]
> Valid starting     Expires            Service principal
> 10/18/21 11:24:17  10/19/21 11:24:17  krbtgt/[email protected]
>         renew until 10/25/21 11:24:17
> bash-4.2$ ozone fs -mkdir -p ofs://om/vol01/buck01
> 2021-10-18 11:24:47,729 [main] INFO rpc.RpcClient: Creating Volume: vol01, 
> with testuser2 as owner and space quota set to -1 bytes, counts quota set to 
> -1
> mkdir: User testuser2/[email protected] doesn't have CREATE permission to 
> access volume vol01 null null
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to