權限問題先分清楚擁有者、群組、mode 與 ACL。把所有東西改成 777 看似省事,實際上會把問題藏起來,也可能讓其他帳號能寫入。
動手前:遞迴 chmod 或 chown 會影響整棵目錄。先用 find、namei、ls -ld 與 getfacl 盤點;正式站不要直接把檔案和目錄套同一組數字。
查看權限
看檔案權限與擁有者Linux/macOS
ls -l app.conf第一欄是類型與 mode,後面是擁有者與群組。
看目錄本身權限Linux/macOS
ls -ld /var/www/app避免 ls 展開目錄內容。
看 Linux 路徑每一層權限Linux
namei -l /var/www/app/config.yml可找出是哪一層缺少 x 權限。
看 POSIX ACLLinux
getfacl /srv/shareACL 可能讓實際權限超出 ls -l 的基本三組。
看目前 umaskLinux/macOS
umask新檔權限會被 umask 扣除。
chmod 常用設定
一般文字檔設 644Linux/macOS
chmod 0644 app.conf擁有者可讀寫,其他人唯讀;敏感檔不一定適用。
私密設定檔設 600Linux/macOS
chmod 0600 secrets.conf只有擁有者可讀寫。
一般目錄設 755Linux/macOS
chmod 0755 public-dir其他人可進入與讀清單,但不能寫。
私有目錄設 700Linux/macOS
chmod 0700 private-dir只有擁有者可以進入與操作。
替腳本加執行權Linux/macOS
chmod u+x deploy.sh只替擁有者增加 x,不改其他位元。
移除其他人的寫入權Linux/macOS
chmod o-w shared-file符號模式較容易看出只改哪一部分。
讓群組可以寫目錄Linux/macOS
chmod g+rwx team-dir仍要確認目錄群組正確。
讓新檔繼承目錄群組Linux/macOS
chmod g+s team-dirsetgid 套在目錄可讓新項目繼承群組。
擁有者、umask 與 ACL
修改擁有者Linux/macOS
chown appuser app.conf通常需要擁有者或系統管理權限。
同時改擁有者與群組Linux/macOS
chown appuser:appgroup app.confmacOS 與 Linux 都常見此格式。
只修改群組Linux/macOS
chgrp appgroup app.conf不改擁有者。
遞迴改擁有者前先預覽Linux/macOS
find /srv/app -maxdepth 2 -printf '%u:%g %p\n' 2>/dev/nullGNU find 才有 -printf;macOS 可改用 find 搭配 ls。
設定較保守的 umaskLinux/macOS
umask 027新建檔通常不給 others 權限;只影響目前 shell 與其子程序。
給單一帳號目錄讀寫執行Linux ACL
setfacl -m u:alice:rwx /srv/share不改基本擁有者/群組;完成後 getfacl 驗證。
設定目錄預設 ACLLinux ACL
setfacl -m d:u:alice:rwx /srv/share只影響之後新建項目,既有檔案不會自動變更。
移除單一 ACL 項目Linux ACL
setfacl -x u:alice /srv/share先保存 getfacl 輸出,方便回復。
怎麼確認有做對
- 用 ls -ld、stat 與 getfacl 重新讀取實際權限。
- 以目標服務帳號做最小讀寫測試。
- 確認 Web、備份與部署程序仍能工作,且不必要帳號無法寫入。
常見錯誤
- 檔案與目錄全部套 777。
- 遞迴 chown 跟進符號連結或改到掛載點外。
- 只看 mode,忽略 ACL、SELinux 或 AppArmor。
- 把服務需要讀取誤寫成服務需要擁有全部檔案。
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。