星期二, 12月 05, 2006

chflags - FreeBSD 上的檔案旗標(隱藏屬性)設定

* 檔案隱藏屬性:

    unix-like 的系統中,除了傳統的 rwxrwxrwx 屬性之外,後來為了因應各種需求,
    在原有的檔案屬性外擴增了許多不同的屬性,如各系統共通的 SUID, Sticky 等等。
    此外還有一種屬性較鮮為人知,就是所謂的不可更動屬性,這種屬性在不同的 OS 上
    大都有不同的實作 (implementation),其中 BSD 與 Linux 對不可更動屬性都有不同
    的做法:

    * BSD .... chflags
    * Linux .. chattr


* 注意事項:

    * 系統屬性(root only 的設定)僅能在 kernel secure level 為 0 或是 disable 的狀態下設定。
    * 設定完之後應將 kernel secure level 設為 1 以上的數值。
    * 開機 secure level 1 以上時,即使是 root 也無法用 chflags 移除系統屬性,但仍可新設。


* 語法:

    chflags [-h] [-R [-H | -L | -P]] flags file ...


* 選項:

    -h  會設定該 symbol link 檔但不會設定真正連結到的檔案
    -R  包含所有子目錄與其下的檔案

    -H  If the -R option is specified, symbolic links on the command line
        are followed.  (Symbolic links encountered in the tree traversal
        are not followed.)

    -L  與 -R 同時用,設定 symbol link 的檔案
    -P  與 -R 同時用,不設定 symbol link 的檔案 (預設)


* 屬性:

    # 規則

    * s 開頭是 system 的意思,只有 super user 能設定。
    * u 開頭是 user 的意思,user 可以設定。
    * no 開頭可以取消設定,但 nodump 要取消則是 dump。
    * 有幾個指令非 s 與 u 開頭。

    # super user 專有:

    arch, archived              備存

    sappnd, sappend             只能新增

    schg, schange, simmutable   不可更動

    sunlnk, sunlink             不可刪除

    # 一般用戶可用:

    opaque                      set the opaque flag (owner or super-user only)

    nodump                      不可傾印內容

    uappnd, uappend             只能新增

    uchg, uchange, uimmutable   不可更動

    uunlnk, uunlink             不可刪除


* 範例:

    # 將 /bin 和 /sbin 設置為無法更動
    chflags schg /bin /sbin /bin/* /sbin/*

    # 將 /var/log 設置為只能新增
    chflags sappnd /var/log/*

    NOTE:目錄也要設定是因為目錄有可能被更名再假造一個。

    # 查看設定是否正確:
    /bin/ls -adlFo /bin /sbin /bin/* /sbin/*

    # 在 /etc/rc.conf 中加入這兩行
    # 如果使用 X-window 要把 level 改為 1
    kern_securelevel="2"
    kern_securelevel_enable="YES"

    # 重新開機

沒有留言: