- 2009/10/0400:00
[FreeBSD] セキュリティのおはなし (1)
BSD系のUnix系OS(FreeBSD や Mac OS X など)には、パーミッションに関係なく、スーパユーザ(root)であっても消せないディレクトリ・ファイルを設定することができます。
デフォルトで、/var/empty/
ディレクトリは消すことが出来なくなっています。
YURI /# ll /var | grep empty dr-xr-xr-x 2 root wheel 512 2 25 2008 empty
「ls -la
」をとってみたところ、見た目は、「0555 (r-xr-xr-x)
」のディレクトリです。
ためしに、root権限で「rmdir」してみます。
YURI /# rmdir -v /var/empty/ rmdir: /var/empty/: Operation not permitted
また、root権限で「rm -f」コマンドも試してみます。
YURI /# rm -Rfv /var/empty/ rm: /var/empty/: Operation not permitted
root権限であろうと、『許可がありません(消せません)』と、怒られました。
実は、FreeBSDには、「パーミッション」とは別に、「ファイルフラグ」という仕組みがあります。
設定されているファイルフラグは、「ls -la
」では見ることができません。設定されているファイルフラグを調べる為には、「ls -lo
」を使います。
YURI /# ls -lo | grep empty dr-xr-xr-x 2 root wheel schg 512 2 25 2008 empty
/var/empty/
ディレクトリには、「schg
」フラグが設定されているので、rootユーザであっても変更や削除をすることができません。
ファイルフラグ一覧
FreeBSDで定義されている「ファイルフラグ」のキーワードは、以下とおりです。
8進数 | キーワード | 設定に必要な権限 | フラグの意味 |
---|---|---|---|
arch | root | archivedフラグ | |
&O10 | opaque | 所有者またはroot | opaqueフラグ |
&O1 | nodump | 所有者またはroot | nodump(dump禁止)フラグ |
sappnd | root | system append-only (システムレベルでの追加専用)フラグ |
|
schg | root | system immutable (システムレベルでの変更不可)フラグ |
|
sunlnk | root | system undeletable (システムレベルでの削除不可)フラグ |
|
&O4 | uappnd | 所有者またはroot | user append-only (ユーザレベルでの追加専用)フラグ |
&O2 | uchg | 所有者またはroot | user immutable (ユーザレベルでの変更不可)フラグ |
&O20 | uunlnk | 所有者またはroot | user undeletable (ユーザレベルでの削除不可)フラグ |
ファイルフラグの設置
たとえば、/path/to/file
というファイルを変更不可に設定するには、次のようにします。
YURI /# chflags uchg /path/to/file
キーワードを使わずに、次のように8進数を使っても構いません。
YURI /# chflags 2 /path/to/file
ファイルフラグの解除
そして、設定した変更不可フラグを削除するには、次のように、キーワードの前に「no」を付けて chflags
します。
YURI /# chflags nouchg /path/to/file
8進数を使ってフラグを削除するときには、「&O0
」を指定します。全てのファイルフラグがクリアされます。
YURI /# chflags 0 /path/to/file
なお、このファイルフラグですが、カーネルのセキュアレベルが「1」以上だと、root権限であっても、ファイルフラグの削除すら出来なくなってしまいますので、注意をば(特に、FreeBSDやMacOSXをデスクトップ用途で使用している場合)。
- 2009/10/04 00:00
- 旧日記のアーカイブ
- Permalink
- nmio
- Comment(0)
comment