第9回 lidstoolsを使ってACLを設定する

面 和毅
サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
シニアマネージャ
2006/8/9

 前回前々回と、lidstools(lidsadmコマンド、lidsconfコマンド)の使い方を説明しました。今回は、/etc/lids以下のファイルの内容を詳しく見ていきます。また、LIDSのACLを設定する際に必要となる知識をいくつか紹介します。

 今回も第6回で用意したVMwareイメージを用いて解説を行います。実際に手元で設定ファイルなどを確認したい場合にはLIDS-JPサイトからVMwareイメージをダウンロードしてください。

【atmarkIT VMWare Images】
http://www.selinux.gr.jp/LIDS-JP/atmarkit.html

 lidsconfコマンドと設定ファイルとの関係

 LIDSでは、/etc/lids内に設定ファイルが収められており、これらの設定ファイルを使ってアクセス制御を行っています。

 ステートごとにlids.XXX.conf、lids.XXX.capファイルが用意されています。lids.XXX.confファイルには、それぞれのステートでのファイルに関するACLとプロセス別に付加したケーパビリティの情報が格納されています。lids.XXX.capファイルには、それぞれのステートでのケーパビリティバウンディングセットが格納されています。

 また、全体(Global)でのACLやプロセス別のケーパビリティが格納されているlids.confファイルと、Globalのケーパビリティバウンディングセットが格納されているlids.capファイルも用意されています。

 lidsconfコマンドとconfファイルの対応

 lidsconfコマンドを用いて各ステートや全体でのACLを編集すると、lids.XXX.confファイルやlids.confファイルに逐次ACLなどの設定が追加されていきます。

 例えば、

# lidsconf -A -s XXX -o YYY -j READONLY

というコマンドでGlobal ACLを編集すると、lids.confファイルに新たに設定行が加わります。また、

# lidsconf -A BOOT -s XXX -o YYY -j READONLY

とステートを指定すると、lids.boot.confファイルに新たに設定行が加わります。

 例として、lids.confファイルを見てみましょう。

#
#   This file is auto generated by lidsconf
#   Please do not modify this file by hand
#
242558:769:/usr/sbin/apache:1:0:32693:769:/usr/lib/apache/1.3/mod_log_config.so:
0:0::1:0:96387:769:/tmp:0-0
242558:769:/usr/sbin/apache:16:0:80-80,443-443:10:CAP_NET_BIND_SERVICE:0-0

 ACLの場合の基本的なフォーマットは、

[Subjectのinode番号]:[Subjectのデバイス番号]:[Subjectのプログラム]:[権限]:[継承レベル]:[Objectのinode番号]:[Objectのデバイス番号]:[Objectのプログラム]:0-0

となります。例えば5行目は、

# lidsconf -A -s /usr/sbin/apache -o /usr/lib/apache/1.3/mod_log_config.so -j READONLY

とGlobalで設定した際にlids.confファイルに追加されるものです。この行は、先ほどのフォーマットに従うと、「Subjectのinode番号」は242558、「Subjectのデバイス番号」は769、「Subjectのプログラム」は/usr/sbin/apache、「権限」は1、「継承レベル」は0、「Objectのinode番号」は32693、「Objectのデバイス番号」は769、「Objectのプログラム」は/usr/lib/apache/1.3/mod_log_config.soとなります。

 inode番号はlsコマンドの「i」オプションで見ることができます。Subject(/usr/sbin/apache)のinode番号は、

# ls -li /usr/sbin/apache
242558 -rwxr-xr-x1 root root 284812 2005-09-06 22:13 /usr/sbin/apache

で242558です。Object(/usr/lib/apache/1.3/mod_log_config.so)のinode番号は、

# ls -li /usr/lib/apache/1.3/mod_log_config.so
32693 -rw-r--r--1 root root 14412 2005-09-06 22:13 /usr/lib/apache/1.3/mod_log_config.so

で32693となっています。

 デバイス番号は、メジャー番号とマイナー番号により決定されます。デバイス番号769というものは、「769=00000011 00000001」ですので、メジャー番号が「3」、マイナー番号が「1」になります。/devディレクトリ以下を見てみると、

lids:~# ls -l /dev/hda1
brw-rw----1 root disk 3, 1 2005-02-26 15:38 /dev/hda1

となっているため、このデバイス番号は/dev/hda1を表しているということが分かります。

 権限は数字がそれぞれ、

0(DENY)
1(READONLY)
3(APPEND)
7(WRITE)

に対応しています。「1」の場合には「READONLY」になります。

 継承レベルは、次回以降に具体的な例を示して説明しますが、「親プロセスと子プロセスのプログラムが異なる場合にACL/ケーパビリティを何世代まで継承させるか」という数字が入ります。

 通常httpdやsmbdなど子プロセスが親プロセスと同じプログラムの場合には親プロセスと同じACL/ケーパビリティを継承しますが、initから別のプログラムを起動したり、起動スクリプトからプログラムを起動したりする場合には、親プロセスと子プロセスのプログラムが異なる場合があります。その際に、親プロセスのACL/ケーパビリティを子プロセスに継承させることができます。

図1 継承レベル

 このように、Subjectが今後何らかの子となるプログラムを起動した際に、その継承を子(継承レベル1)まで許すのか、孫(継承レベル2)まで許すのかなどの数字が入ります。特定のプログラムのACLを、そのプログラムがexecした異なるプログラムに継承させることはあまりありませんから、通常、継承レベルは「0」となります。

 次に、6行目を見てみましょう。この行は、

# lidsconf -A -0 /tmp -j READONLY

とGlobalで設定した際にlids.confファイルに追加されるものです。このように、Subjectを指定しない(ディレクトリに対するデフォルトのACL)場合には、Subjectのinode番号、デバイス番号にそれぞれ0が入ります。Subjectのプログラムの部分もnullが入ります。

 最後に7行目を見てみましょう。この行はACLではなく、プログラム別にケーパビリティを与えた際に追加される行です。この例では、

# lidsconf -A -s /usr/sbin/apache -o CAP_NET_BIND_SERVICE 80,443 -j GRANT

とGlobalで設定した際にlids.confファイルに追加されるものになっています。

 ケーパビリティの場合、フォーマットは、

[Subjectのinode番号]:[Subjectのデバイス番号]:[Subjectのプログラム]:16:[継承レベル]:[ポート番号]:[ケーパビリティの番号]:[ケーパビリティ名]:0-0

となります。

 ポート番号は、CAP_NET_BIND_SERVICEとCAP_NET_BROADCASTの2つのケーパビリティの場合にのみ指定します。

 範囲を指定する場合には「-」、列記する場合には「,」を使用します。例えば21番から25番までを指定する場合には「21-25」とし、21、25、80番を指定する場合には「21, 25, 80」とします。単独のポート番号を指定する場合には「21-21」と範囲の上下が等しい形で指定します(実際には、lidsconfコマンドでは80番だけを指定する際に「80-80」とする必要はありません。設定ファイルのフォーマットに変換される際に、自動的に「80-80」という形に変換されます)。

 ケーパビリティ番号は、第3回で説明したLinuxケーパビリティのビット列の第何ビットにそのケーパビリティが当たるかを示した数字になります。これは、「lidsadm -V」コマンドや、lids.XXX.capコマンドで確認できます。

1/2

Index
lidstoolsを使ってACLを設定する
Page1
lidsconfコマンドと設定ファイルとの関係
lidsconfコマンドとconfファイルの対応
  Page2
LIDSとinode情報の関係
lids.XXX.capファイルについて
Globalと各ステートの設定の関係
ACLの優先順位
ケーパビリティバウンディングセットの優先順位


Security&Trust記事一覧


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間