View a markdown version of this page

S3 檔案中的 POSIX 許可 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

S3 檔案中的 POSIX 許可

POSIX 檔案系統需要每個檔案的擁有權和許可。Amazon S3 會將資料儲存為具有 IAM 政策和儲存貯體政策控制之存取權的物件,並且不會原生儲存檔案所有權或許可屬性。S3 檔案透過將 POSIX 中繼資料,包括擁有者、群組和檔案許可,作為每個 S3 物件上的使用者定義中繼資料來橋接此差異。當您透過 S3 檔案建立或修改檔案時,服務會自動寫入所有許可中繼資料。當物件在檔案系統外寫入 S3 儲存貯體時,例如透過 Amazon S3 主控台、 AWS CLI 或 AWS SDK,該物件上不存在 POSIX 中繼資料。S3 檔案會將root:root擁有權和644許可的預設值指派給這些物件,以允許非根使用者讀取檔案,但不寫入檔案。如果這些預設值符合您的存取需求,則不需要採取任何動作。如果您的應用程式需要它,您可以覆寫這些物件的預設許可。本教學課程會逐步解說如何套用自訂許可。

S3 檔案如何存放 POSIX 中繼資料

S3 檔案會將 POSIX 資訊儲存為每個物件上的使用者定義中繼資料。下列中繼資料金鑰控制擁有權和許可:

中繼資料金鑰 說明 範例值
x-amz-meta-file-owner POSIX 使用者 ID (UID) 1000
x-amz-meta-file-group POSIX 群組 ID (GID) 1000
x-amz-meta-file-permissions 檔案類型和許可位元 (八進位) 0100644

當物件沒有 POSIX 中繼資料時,S3 檔案會套用下列預設值:

  • 檔案:擁有0644許可的root:root擁有權 (-rw-r--r--)

  • 目錄:擁有0755許可的root:root擁有權 (drwxr-xr-x)

在這些預設情況下,所有使用者都可以讀取檔案和周遊目錄,但只有擁有者 (根) 可以寫入。根據預設,檔案不可執行。

在現有物件上設定 POSIX 中繼資料

使用下列程序,將 POSIX 擁有權和許可套用至儲存貯體中已存在的物件。

步驟 1:識別目標使用者的 UID 和 GID

在此範例中,目標使用者ec2-user為 UID 1000:

$ id ec2-user
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user)

步驟 2:使用 copy-object 更新物件中繼資料

aws s3api copy-object 命令會複製具有更新中繼資料的物件。將 BUCKET_NAMEOBJECT_KEY 取代為您的值。

--metadata-directive REPLACE 選項會取代物件上的所有使用者定義中繼資料。包含 --content-type以保留物件的內容類型,因為 會將其REPLACE重設為預設 (binary/octet-stream)。如果您使用其他中繼資料欄位,請在 --metadata 參數中包含它們。

aws s3api copy-object \ --bucket BUCKET_NAME \ --key OBJECT_KEY \ --copy-source BUCKET_NAME/OBJECT_KEY \ --metadata-directive REPLACE \ --content-type CONTENT_TYPE \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'

步驟 3:確認已套用中繼資料

執行下列命令以確認中繼資料:

aws s3api head-object --bucket BUCKET_NAME --key OBJECT_KEY

回應包含您的 POSIX 中繼資料:

{ "AcceptRanges": "bytes", "LastModified": "Mon, 18 May 2026 14:43:00 GMT", "ContentLength": 7214, "ETag": "\"abc123...\"", "ContentType": "image/png", "Metadata": { "file-owner": "1000", "file-group": "1000", "file-permissions": "0100644" } }

步驟 4:驗證 S3 檔案系統的許可

$ ls -ltr /mnt/s3files/
-rw-r--r--. 1 ec2-user ec2-user 7214 May 18 14:43 s3.png

檔案現在由 擁有ec2-user,且不再需要根 即可存取。

在新上傳上設定 POSIX 中繼資料

您可以在將物件上傳至儲存貯體時包含 POSIX 中繼資料。

使用 aws s3 cp

aws s3 cp localfile.txt s3://BUCKET_NAME/localfile.txt \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'

使用 aws s3api put-object

aws s3api put-object \ --bucket BUCKET_NAME \ --key localfile.txt \ --body localfile.txt \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'

驗證上傳物件上的中繼資料

aws s3api head-object --bucket BUCKET_NAME --key localfile.txt

許可值參考

下表列出常見的 POSIX 許可值及其使用案例。

八進位值 檔案模式 使用案例
0100644 -rw-r--r-- 標準檔案:擁有者讀取/寫入,其他則為唯讀
0100664 -rw-rw-r-- 共用檔案:擁有者和群組讀取/寫入,其他則為唯讀
0100755 -rwxr-xr-x 可執行:擁有者完整存取、其他讀取和執行
0100666 -rw-rw-rw- 可寫入世界的檔案:所有使用者都可以讀取和寫入
0040755 drwxr-xr-x 標準目錄:擁有者完整存取、其他讀取和周遊

最佳實務

盡可能透過 S3 檔案系統上傳檔案。S3 檔案會自動將檔案的擁有權和許可儲存為物件中繼資料,因此不需要其他步驟。直接上傳至 S3 儲存貯體時,請在上傳命令中包含 POSIX 中繼資料,以確保從一開始就設定正確的擁有權和許可。