

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

# S3 檔案中的 POSIX 許可
<a name="s3-files-posix-permissions"></a>

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

## S3 檔案如何存放 POSIX 中繼資料
<a name="s3-files-posix-permissions-how-stored"></a>

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 中繼資料
<a name="s3-files-posix-permissions-existing-objects"></a>

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

### 步驟 1：識別目標使用者的 UID 和 GID
<a name="s3-files-posix-permissions-existing-step1"></a>

在此範例中，目標使用者`ec2-user`為 UID 1000：

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

### 步驟 2：使用 copy-object 更新物件中繼資料
<a name="s3-files-posix-permissions-existing-step2"></a>

`aws s3api copy-object` 命令會複製具有更新中繼資料的物件。將 {{BUCKET\_NAME}} 和 {{OBJECT\_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：確認已套用中繼資料
<a name="s3-files-posix-permissions-existing-step3"></a>

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

```
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 檔案系統的許可
<a name="s3-files-posix-permissions-existing-step4"></a>

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

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

## 在新上傳上設定 POSIX 中繼資料
<a name="s3-files-posix-permissions-new-uploads"></a>

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

### 使用 aws s3 cp
<a name="s3-files-posix-permissions-new-uploads-cp"></a>

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

### 使用 aws s3api put-object
<a name="s3-files-posix-permissions-new-uploads-put"></a>

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

### 驗證上傳物件上的中繼資料
<a name="s3-files-posix-permissions-new-uploads-verify"></a>

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

## 許可值參考
<a name="s3-files-posix-permissions-reference"></a>

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


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

## 最佳實務
<a name="s3-files-posix-permissions-best-practices"></a>

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