---
# System prepended metadata

title: 權限 / umask
tags: [system, linux, OS, config, OS / Ubuntu / cmd / system, command, 權限, umask, Ubuntu]

---

權限 / umask
===
###### tags: `OS / Ubuntu / cmd / system`
###### tags: `OS`, `Ubuntu`, `linux`, `command`, `system`, `config`, `umask`, `權限`

<br>

[TOC]

<br>

> by gpt-5 (2025/10/17)

<br>

## umask 是什麼？

- **作用**：
    - 決定「新建立檔案／資料夾」的**預設權限要拿掉哪些位元**（是“遮罩”，只會減，不會加）。
- **原理**：
    - 一般程式建立檔案會以「基準權限」開始──檔案 `666`、目錄 `777`──再用
    - **實際權限 = 基準權限 − umask** 計算出來。
- **計算範例：umask=002**
    - 檔案 `666` 計算方式
        - `rw-rw-rw-`(666) -> 基準權限
        - `-------w-`(002) -> umask
        - `rw-rw-r--`(664) -> 實際權限
    - 目錄 `777` 計算方式
        - `rwxrwxrwx`(777) -> 基準權限
        - `-------w-`(002) -> umask
        - `rwxrwxr-x`(775) -> 實際權限

<br>

## 兩個最常用的 umask

* **022** → 檔案 `644`、目錄 `755`（適合個人主機，其他人不可寫）
* **002** → 檔案 `664`、目錄 `775`（適合團隊合作，**群組可寫**）

> 小抄：
> `022` → -w 套用到 group/others；
> `002` → -w 只套用到 others。

<br>

## 怎麼看／怎麼設

```bash
umask        # 顯示八進位（常見：0022 或 0002）
umask -S     # 顯示符號式，例如 u=rwx,g=rx,o=rx

umask 002    # 臨時把本 shell 的 umask 改成 002
umask 022    # 改回個人常用
```

<br>

## 快速驗證

```bash
umask 002
touch f && mkdir d
ls -l f d   # 你會看到 f→-rw-rw-r-- (664), d→drwxrwxr-x (775)
```

<br>

## 永久設定（登入就生效）

* 只改自己：

  * Bash：把 `umask 002` 加到 `~/.bashrc`（或 `~/.profile`）。
  * Zsh：加到 `~/.zshrc`。
* 全系統（所有互動式 shell）：`/etc/profile`、`/etc/bash.bashrc` 補一行 `umask 022`/`002`。

<br>

## 團隊／專案最佳實務

1. **共用專案資料夾**：

   ```
   sudo chgrp -R project-ocis /proj/ocis
   sudo chmod -R 2775 /proj/ocis     # 設 setgid，讓新檔繼承群組
   ```
2. **開發者的 umask 用 002**，配合 `newgrp project-ocis`，新檔就會是群組可寫（664/775）。
3. 若還不夠穩：加**預設 ACL**（讓“不聽話”的程式也被規範）

   ```
   setfacl -R -m d:g:project-ocis:rwx -m g:project-ocis:rwx /proj/ocis
   ```

<br>

## 容器／Kubernetes／服務

* **容器**：umask 在**程序內**決定；可在 entrypoint（或 `bash -lc`）裡先 `umask 002`。
* **systemd 服務**：可在 unit 檔寫 `UMask=002`。
* **Kubernetes**：umask 仍在容器內設定；若是群組寫入需求，也常搭配 `fsGroup` 與上面的 setgid/ACL。

<br>

## 常見問題

* **為什麼我設 002，檔案還是 600？**
  程式可能用更嚴格的模式（如 `0600`）建立；umask**無法加權限**，只能減少。
* **會動到 setuid/setgid/sticky 嗎？**
  不會，umask只影響 rwx 權限位。
* **SSH 抱怨權限太鬆？**
  `.ssh` 與 key 檔案常要求 700/600；請個別 `chmod`，不要靠放寬 umask。


<br>

{%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}

