# 【Linux】【權限管理】【acl】設定/var/www/html for tomcat 可讀寫

以下是如何在 Ubuntu 中設置這些 ACL 權限的步驟。

---

### **步驟 1：啟用 ACL 支持**

如果 ACL 尚未啟用，請確保相關功能已經安裝並啟用：

1. 安裝 ACL 工具： ```
    sudo apt <span class="hljs-keyword">install</span> acl
    
    ```
2. 確保文件系統支持 ACL： ```
    <span class="hljs-attribute">sudo</span> mount -o remount,acl /
    
    ```

---

### **步驟 2：設置基本權限**

設定 `/var/www/html` 的基本權限：

```lang-bash
sudo chmod 775 /var/www/html
sudo chown root:root /var/www/html

```

---

### **步驟 3：配置 ACL 權限**

根據需求逐步配置 ACL：

1. **設置具體使用者和群組的 ACL 權限**：
    
    ```
    sudo setfacl -m <span class="hljs-string">u:</span><span class="hljs-string">tomcat:</span>rwx <span class="hljs-regexp">/var/</span>www/html
    sudo setfacl -m <span class="hljs-string">g:</span>:r-x <span class="hljs-regexp">/var/</span>www/html
    sudo setfacl -m <span class="hljs-string">o:</span>:r-x <span class="hljs-regexp">/var/</span>www/html
    
    ```
    
    
    - **`u:tomcat:rwx`**：給 `tomcat` 用戶設置 `rwx` 權限。
    - **`g::r-x`**：默認組的權限為 `r-x`。
    - **`o::r-x`**：其他人的權限為 `r-x`。
2. **設置默認 ACL（適用於未來子目錄和文件）**：
    
    ```
    sudo setfacl -d -m <span class="hljs-string">u:</span>:rwx <span class="hljs-regexp">/var/</span>www/html
    sudo setfacl -d -m <span class="hljs-string">u:</span><span class="hljs-string">tomcat:</span>rwx <span class="hljs-regexp">/var/</span>www/html
    sudo setfacl -d -m <span class="hljs-string">g:</span>:r-x <span class="hljs-regexp">/var/</span>www/html
    sudo setfacl -d -m <span class="hljs-string">o:</span>:r-x <span class="hljs-regexp">/var/</span>www/html
    
    ```
    
    
    - **`-d`**：表示設置默認 ACL（對新創建的文件/目錄生效）。

---

### **步驟 4：檢查 ACL 設置**

使用以下指令檢查 ACL 配置是否正確：

```lang-bash
getfacl /var/www/html

```

輸出應類似於：

```
# file: var/www/html
# owner: root
# group: root
user::rwx
user:tomcat:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:tomcat:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

```

---

### **ACL 設置的解釋**

1. **普通權限**：
    
    
    - **`user::rwx`**：目錄擁有者 `root` 的權限。
    - **`user:tomcat:rwx`**：為用戶 `tomcat` 設置的權限。
    - **`group::r-x`**：目錄的群組成員的權限。
    - **`other::r-x`**：其他用戶的權限。
    - **`mask::rwx`**：ACL 中權限的上限（最高可設置為 `rwx`）。
2. **默認權限（`default:` 開頭）**：
    
    
    - **`default:user::rwx`**：默認擁有者的權限。
    - **`default:user:tomcat:rwx`**：默認為 `tomcat` 設置的權限。
    - **`default:group::r-x`**：默認群組的權限。
    - **`default:other::r-x`**：默認其他用戶的權限。

---

### **總結指令**

以下是一鍵完成配置的指令集合：

```lang-bash
sudo setfacl -m u:tomcat:rwx /var/www/html
sudo setfacl -m g::r-x /var/www/html
sudo setfacl -m o::r-x /var/www/html
sudo setfacl -d -m u::rwx /var/www/html
sudo setfacl -d -m u:tomcat:rwx /var/www/html
sudo setfacl -d -m g::r-x /var/www/html
sudo setfacl -d -m o::r-x /var/www/html

```

執行後確認權限是否正確，應與您列出的設定一致！

---

是否需要設定 `-d` 取決於您的需求，以下是有關 **默認 ACL（`-d`）** 的詳細說明以及什麼情況下需要設定。

---

### **什麼是默認 ACL（`-d`）？**

默認 ACL 是一組規則，會自動應用到 **新創建的文件或子目錄** 中。當一個目錄設置了默認 ACL，該目錄下創建的任何新文件或目錄都會繼承這些默認規則。

---

### **是否需要設定 `-d`**

1. **需要設定 `-d` 的情況**
    
    
    - 如果您希望 **新創建的文件或子目錄** 自動繼承特定的 ACL 設置（如 `tomcat` 擁有特定權限），那麼您需要設置默認 ACL。例如： 
        - `/var/www/html` 是一個共享的目錄，將會持續新增文件。
        - 您希望 `tomcat` 用戶對新增的文件有 **`rwx`** 權限。
    
    ```
    sudo setfacl -d -m <span class="hljs-string">u:</span><span class="hljs-string">tomcat:</span>rwx <span class="hljs-regexp">/var/</span>www/html
    
    ```
    
    當某人創建一個新文件時，`tomcat` 就會自動擁有該文件的權限。
2. **不需要設定 `-d` 的情況**
    
    
    - 如果您僅關心目錄 **當前的文件和目錄**，而不需要未來的新增文件繼承權限。
    - 如果您會手動或通過腳本為新文件設置權限，而不依賴默認 ACL。
    
    在這種情況下，您可以省略 `-d`，只設置當前的 ACL 即可：
    
    ```
    sudo setfacl -m <span class="hljs-string">u:</span><span class="hljs-string">tomcat:</span>rwx <span class="hljs-regexp">/var/</span>www/html
    
    ```

---

### **範例：對比是否設置 `-d` 的效果**

假設您在 `/var/www/html` 下創建了兩個文件：

1. **沒有設置 `-d` 的情況**
    
    
    - 當您創建新文件時，不會繼承 `tomcat` 的權限。
    - 新文件的權限取決於當前的系統默認值（如 `umask`）。
2. **設置了 `-d` 的情況**
    
    
    - 新文件或目錄將繼承默認 ACL。例如，`tomcat` 將擁有對新文件的權限： ```
        touch /<span class="hljs-keyword">var</span>/www/html/<span class="hljs-keyword">new</span><span class="hljs-type">file</span>
        getfacl /<span class="hljs-keyword">var</span>/www/html/<span class="hljs-keyword">new</span><span class="hljs-type">file</span>
        
        ```
        
        結果顯示 `tomcat` 的權限被自動應用。

---

### **結論**

- **需要持續新增文件/目錄並繼承權限**：建議使用 `-d` 設置默認 ACL。
- **僅對當前文件和目錄設置權限**：可以省略 `-d`。

建議根據場景選擇適合的設置，以滿足項目需求。