chown(Change Owner)與 chmod(Change Mode)是 Linux 權限管理的雙支柱。chown 控制「誰擁有」(使用者/群組),chmod 控制「能做什麼」(讀/寫/執行)。兩者職責截然不同但緊密配合,本文系統整理語法、參數、數字與符號模式、遞迴操作、特殊權限位,並提供實戰範例與常見錯誤避坑指南。
chown [選項] [使用者][:群組] 檔案...
chown [選項] :群組 檔案... # 僅變更群組
-R / --recursive:遞迴處理目錄樹-h / --no-dereference:修改符號連結本身而非目標檔案-v / --verbose:顯示變更細節-c / --changes:僅顯示實際變更的檔案--reference=參考檔案:複製參考檔案的擁有者/群組# 單一檔案變更擁有者
chown alice report.pdf
# 變更擁有者與群組
chown alice:developers project/
# 遞迴變更整個目錄樹
chown -R bob:staff /home/bob
# 僅變更群組(等同 chgrp)
chown :admins /etc/sudoers.d/
# 修改符號連結本身擁有者
chown -h www-data:www-data /var/www/html/link
# 複製參考檔案權限
chown --reference=/etc/passwd /tmp/new_passwd
權限要求:僅 root 可變更檔案擁有者;一般使用者若屬於目標群組,可將自己擁有的檔案群組變更為該群組。
| 代碼 | 權限 | 數值 | 對檔案意義 | 對目錄意義 |
|---|---|---|---|---|
| r | 讀取 | 4 | 查看內容 | 列出目錄清單 |
| w | 寫入 | 2 | 修改內容 | 建立/刪除/重命名檔案 |
| x | 執行 | 1 | 執行程式/腳本 | 進入目錄、存取目錄內檔案 |
[ugoa...][+-=][rwxXstugo...][,...]
+ 增加 - 移除 = 設定(移除未指定權限)
X:僅目錄或已有任一 x 位才生效(避免檔案誤加執行權)
s:SUID/SGID
t:Sticky bit
chmod 755 file # u=rwx(7) g=rx(5) o=rx(5)
chmod 644 file # u=rw(6) g=r(4) o=r(4)
chmod 700 dir # 僅擁有者可進入
chmod 1777 /tmp # Sticky bit:僅擁有者可刪除自己的檔案
chmod 4755 /bin/su # SUID:執行時具擁有者權限
chmod 2775 /shared # SGID:新檔繼承群組
-R:遞迴處理-v、-c:顯示細節/僅變更--reference=檔案:複製參考檔案權限# 擁有者加執行權
chmod u+x script.sh
# 所有人可讀
chmod a+r README.md
# 擁有者/群組可寫,其他不可寫
chmod ug+w,o-w file1 file2
# 遞迴:目錄加 x,檔案不加 x(X 技巧)
chmod -R a+rX /var/www/html
# 特殊權限
chmod 4755 /usr/bin/passwd # SUID
chmod 2775 /home/shared # SGID
chmod 1777 /tmp # Sticky bit
| 維度 | chown | chmod |
|---|---|---|
| 控制對象 | 擁有者(User)與群組 | 讀/寫/執行權限位 |
| 核心問題 | 「誰擁有」 | 「能做什麼」 |
| 權限要求 | 僅 root 可改擁有者 | 擁有者或 root 可改權限 |
| 群組變更 | chown :group / chgrp | chmod g+rwx |
| 遞迴參數 | -R | -R |
| 特殊功能 | --reference 複製擁有者 | SUID/SGID/Sticky/X 位 |
# 建立專用使用者
useradd -r -s /sbin/nologin www-data
# 程式碼目錄:擁有者可寫,Nginx 僅讀
chown -R deploy:www-data /var/www/app
chmod -R 750 /var/www/app
chmod 770 /var/www/app/storage /var/www/app/bootstrap/cache
# 上傳目錄:啟用 SGID 確保新檔群組正確
chmod 2770 /var/www/app/public/uploads
groupadd developers
usermod -aG developers alice
usermod -aG developers bob
mkdir /projects/awesome
chown root:developers /projects/awesome
chmod 2775 /projects/awesome # SGID:新檔自動屬於 developers 群組
# 將目錄權限統一為 755,檔案 644
find /path -type d -exec chmod 755 {} \;
find /path -type f -exec chmod 644 {} \;
# 或使用 X 技巧一步到位
chmod -R a=rX,u+w /path
chmod -R 777 / 會毀滅系統安全性/tmp、/var/mail 必須設定 1777passwd、sudo、ping)設定-hchown 決定身份,chmod 決定能力。精通符號模式(u+rwX)、數字模式(750)、特殊位(4755/2775/1777)與遞迴策略,配合 find 批次操作,即可構建安全、可維護的 Linux 權限體系。記住核心原則:最小權限原則——僅授予完成任務所需的最低權限。