[
https://issues.apache.org/jira/browse/HDDS-17361?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chu Cheng Li reassigned HDDS-17361:
-----------------------------------
Assignee: Chu Cheng Li
> S3 Gateway can set another user as the owner of a new key
> ---------------------------------------------------------
>
> Key: HDDS-17361
> URL: https://issues.apache.org/jira/browse/HDDS-17361
> Project: Apache Ozone
> Issue Type: Bug
> Components: s3gateway
> Affects Versions: 2.0.0, 2.1.0, 2.2.0, 2.1.1, 2.2.1
> Reporter: Chu Cheng Li
> Assignee: Chu Cheng Li
> Priority: Major
> Labels: pull-request-available
>
> *Problem*
> The S3 Gateway uses one {{RpcClient}} for the requests of all users. Each
> request thread keeps its {{S3Auth}} in a thread-local variable.
> {{RpcClient#setThreadLocalS3Auth}} also writes the S3 user to the field
> {{s3gUgi}}. All request threads share this field. HDDS-7791 added it.
> {{RpcClient#getRealUserInfo}} returns {{s3gUgi}} when the current thread has
> an {{S3Auth}}. These calls use the result as the owner of the new key:
> * {{createKey}} and {{createStreamKey}}
> * {{createFile}}, {{createStreamFile}} and {{createDirectory}}
> * {{initiateMultipartUpload}}, {{createMultipartKey}} and
> {{completeMultipartUpload}}
> OM stores the owner from the request as it is.
> Thus, a request from user B can change the owner of a key that user A writes
> at the same time. The request from B can be of any type, for example
> {{ListObjects}}.
> *Effect*
> * S3 {{ListObjects}}, {{ozone sh key info}}, ofs and o3fs show the wrong
> owner. The parent directories that OM creates for the key also get this owner.
> * Test on master with one S3 Gateway: users alice and bob write with 8
> threads each. User mallory only lists objects with 2 threads. 330 of 960 new
> keys get the wrong owner. 236 of them get mallory as the owner.
> * Access checks do not use the key owner. Thus, the wrong owner does not give
> or remove access.
> *Fix*
> Remove the field {{s3gUgi}}. {{getRealUserInfo}} creates the
> {{UserGroupInformation}} from the {{S3Auth}} of the current thread.
> {{createBucket}} and {{getDEK}} already do this.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]