我的 Server 的作業系統都是 FreeBSD,剛剛在修改某支程式後發現無法儲存,
甚至連刪除都不行,會出現
Operation not permitted
的警告訊息!
原來,在 FreeBSD 還有一種特別的權限控制,稱之為「flags」,這些 flags 的設定可以讓我們用來保護特殊的檔案。
我們可以使用 ls 加參數 -o 來顯示:
# ls -ol filename
flags 的設定淩駕於一般的權限設定,我們可以設定的主要 flags 及其所代表的意義如下:
flags | 意義 |
nodump | 檔案不可以被 dump。(只有檔案擁有者和 root 可以設定) |
sappnd | 檔案只可以往後附加,不能刪除。(只有 root 可以設定) |
schg | 檔案不可以被更動,連 root 都不能刪除。(只有 root 可以設定) |
uappnd | 檔案只可以往後附加,不能刪除。(檔案擁有者和 root 才可設定) |
uchg | 檔案不可以被更動。(檔案擁有者和 root 才可設定) |
如果我們要解除所設定的 flags 只要在上述的 flgs 之前加上 no 即可,例如 nouchg。
用法:
1. 為 filename 加上 schg
# chflags schg filename
2. 除去filename 的 schg
# chflags noschg filename
3. 除去整個目錄 (dirname) 裡所有檔案的 schg
# chflags -R noschg dirname
注意!
flags 的設定只有在 kernel security level 為 -1 或 0 時才可以被更改。如果 security level 為 1 或 2 時就不能更動 flags 了。