Info: Version 1.3 is available.
Last modified: $Date: 2011-11-20 09:56:56 +0900 (Sun, 20 Nov 2011) $
使用するディストリビューションの制限はありません。しかし、全てのディストリビューションで共通に使える手順書を作成することはできないため、この手順書では「RedHat Linux 9」「Fedora Core 3」「Debian Sarge」の3種類について記述します。
不要なアプリケーションは事前にアンインストールしておくことで、ポリシーのサイズを小さくすることができます。 どのアプリケーションが必要かを事前に把握しておくことを推奨します。
カーネルをコンパイルする方法については、TOMOYO Linuxカーネルの作成手順を参照してください。
ツールをコンパイルするには、以下のコマンドを実行してください。
cd /root/ # TOMOYO Linux ツールのソースをダウンロードする。 wget -O ccs-tools-1.2-20060903.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/21579/ccs-tools-1.2-20060903.tar.gz' # 展開する。 tar -zxf ccs-tools-1.2-20060903.tar.gz # コンパイルする。 make -sC ccstools/ |
TOMOYO Linux カーネルで起動して、正常に動作できることを確認できたら、 /proc/ccs/status の内容を /root/security/status.txt というファイルに保存しておいてください。このファイルに含まれる項目が、このカーネルで制御できる項目になります。このファイルは、後述する手順でプロファイルを作成する際のヒントとして使用します。
mkdir -p /root/security cat /proc/ccs/status > /root/security/status.txt |
この章の作業は通常のカーネルで行うようにしてください。
TOMOYO Linux カーネルで行うと、シャットダウン時に /root/ccstools/savepolicy が実行されるために /root/security/exception_policy.txt に加えた変更内容が失われてしまいます。
TOMOYO Linux には、ソフトウェアと一緒に配布されるデフォルトポリシーはありません。学習モードを使用して策定する必要があります。
参考までに、サンプルのポリシーを置いてあります。参照は自由ですが、デフォルトポリシーとしての利用はしないでください。
/root/security/manager.txt を作成し、その中にポリシーの変更を許可したいプログラムを指定します。
具体的には、ポリシーを再読み込みする loadpolicy 、ポリシーを編集する editpolicy 、制御レベルを変更する setlevel 、無条件読み込み許可を更新する ld-watch 、対話的にアクセス要求を許可する ccs-queryd の5つを指定してください。
cat > /root/security/manager.txt << EOF /root/ccstools/loadpolicy /root/ccstools/editpolicy /root/ccstools/setlevel /root/ccstools/ld-watch /root/ccstools/ccs-queryd EOF |
電源が切れる直前にメモリ上のポリシーをディスク上に保存するために、シャットダウンスクリプトの中で /root/ccstools/savepolicy が実行されるように修正します。具体的な修正箇所はディストリビューション毎に異なります。多くの場合、 /etc/init.d/ ディレクトリ直下にあるシャットダウンを行うスクリプトの最後に実行されるプログラムが電源を切るためのプログラムなので、その直前で保存するように修正します。
RedHat Linux 9 および Fedora Core 3 の場合は以下のように修正してください。
/etc/rc.d/init.d/halt | |
修正前 | 修正後 |
exec $command $HALTARGS |
/root/ccstools/savepolicy exec $command $HALTARGS |
Debian Sarge の場合は以下のように修正してください。 savepolicy の前に halt/reboot を一度実行しているのは halt/reboot を実行するドメインを作成するためです。
/etc/init.d/halt | /etc/init.d/reboot | ||
修正前 | 修正後 | 修正前 | 修正後 |
halt -d -f -i $poweroff $hddown |
halt --help 2> /dev/null /root/ccstools/savepolicy halt -d -f -i $poweroff $hddown |
reboot -d -f -i |
reboot --help 2> /dev/null /root/ccstools/savepolicy reboot -d -f -i |
TOMOYO Linuxでは、ファイル以外にもいくつかの項目について強制アクセス制御を行うことができますが、ポリシー管理の負担を減らすために、必要の無い機能を無効化できるようになっています。
有効にしたい機能とそのモードを記述した初期制御レベル定義ファイルを1つ以上作成し、カーネル起動時のコマンドラインから番号を指定することで切り替えができるようになっています。具体的には、カーネル起動時のコマンドラインで CCS=$INDEX ($INDEX は整数)というパラメータを指定すると、対応する /root/security/profile$INDEX.txt が読み込まれます。
以下の説明を参照しながら、用途毎のプロファイルを作成してください。 /root/security/status.txt に含まれる項目だけが指定可能です。 /root/security/status.txt に含まれる項目の数は、カーネルコンパイル時の設定により変化します。
項目 | 制御する内容 | 自動学習対応 |
MAC_FOR_FILE | ファイルの読み書き実行 | ○ |
MAX_ACCEPT_FILES | 学習モードで自動的に追加されるアクセス許可の上限を指定する。 | - |
MAX_GRANT_LOG | メモリ上に保持するアクセス許可ログの上限を指定する。 | - |
MAX_REJECT_LOG | メモリ上に保持するアクセス拒否ログの上限を指定する。 | - |
TOMOYO_VERBOSE | ドメイン別ポリシーに対する違反を syslog に表示する。 | - |
MAX_ENFORCE_GRACE | 強制モードでポリシー違反が発生した場合に、アクセス要求を拒否するまでの猶予時間を指定する。 | - |
MAX_ACCEPT_FILES については以下の値を指定できます。
値 | 内容 |
任意の整数 | 学習モードで自動的に追加されるアクセス許可の上限。デフォルトはカーネルのコンパイル時に指定。 |
MAX_GRANT_LOG および MAX_REJECT_LOG については以下の値を指定できます。
値 | 内容 |
任意の整数 | カーネル内に保持するアクセスログの件数。デフォルトはカーネルのコンパイル時に指定。ログが不要ならば 0 を指定する。 |
TOMOYO_VERBOSE については以下の値を指定できます。
値 | 内容 |
0 | ドメイン別ポリシーに対する違反を表示しない。 |
1 | ドメイン別ポリシーに対する違反を表示する。 |
MAX_ENFORCE_GRACE については以下の値を指定できます。
値 | 内容 |
任意の整数 | 強制モードで動作中にポリシー違反が発生してから、そのアクセス要求を拒否するまでの猶予期間を秒単位で指定する。この時間内に管理者がそのアクセス要求を許可するように指示した場合、そのアクセス要求は許可される。 |
上記以外については以下の値を指定できます。
値 | 内容 |
0 | 無効。通常のカーネルと同様に動作する。 |
1 | 学習モード。ポリシーに違反してもエラーにせず、ポリシーへの自動追加を行う。 |
2 | 確認モード。ポリシーに違反してもエラーにせず、ポリシーへの自動追加も行わない。 |
3 | 強制モード。ポリシーに違反したらエラーとする。 |
全てのシステムに共通して存在している可能性が高いパス名のパターンを事前に登録しておきます。
/root/security/exception_policy.txt に file_pattern というキーワードを使用してパス名のパターンを登録します。
アクセス許可を学習する際に、要求されたパス名が file_pattern というキーワードを使用して登録されたパス名のパターンと一致した場合、パターン化されたパス名でアクセス許可が学習されます。
目安としては以下のものが挙げられます。
システムにインストールされているアプリケーションやその設定により、上記以外にもパターン化されたパス名が必要になります。不足しているパターンは実際にアクセス許可を学習させてから、適切にパターン化して追加します。
全てのプログラムへの読み込みアクセスを許可するファイルを登録しておきます。
/root/security/exception_policy.txt に allow_read というキーワードを使用してパス名を登録します。パターンは使用できません。
読み込みモードで要求されたパス名が allow_read というキーワードを使用して登録されたパス名と一致した場合、その場で読み込みアクセスが許可されます。
目安としては以下のものが挙げられます。
ドメイン遷移履歴をリセットするプログラムを登録しておきます。
/root/security/exception_policy.txt に initializer というキーワードを使用してパス名を登録します。パターンは使用できません。
initializer というキーワードを使用して登録されたパス名のプログラムが実行された場合、そのプログラムは <kernel> 直下のドメインで動作します。
目安としては以下のものが挙げられます。
電源オフの処理に必要なアクセス許可を自動学習することはできないため、電源オフを行うためのドメインを信頼済みとして指定します。
具体的な修正箇所はディストリビューション毎に異なります。多くの場合、 /etc/init.d/ ディレクトリ以下にあるシャットダウンを行うスクリプトの最後に実行されるプログラムが電源オフを行うためのプログラムです。
以上の操作を自動的に行うためのスクリプトが用意されています。 /root/ccstools/make_exception.sh を実行すると候補が表示されますので、それを元に /root/security/exception_policy.txt を作成してください。なお、自動生成された結果には不要なエントリや危険なエントリが含まれる場合があるので、必ず内容を吟味してください。
コマンドラインから logrotate を起動して必要なアクセス許可を学習させるので、 /usr/sbin/logrotate を initializer として例外ポリシーに登録しておきます。
initializer /usr/sbin/logrotate |
不特定多数のプログラムファイルを読み書きする cron ジョブは、 cron から除外することを検討してください。
例えば、 Fedora Core 3 以降に付属の cron で毎日実行するように設定されている /usr/sbin/prelink は非常に多数の実行可能ファイルを読み書きするため、ポリシーファイルの肥大化(消費メモリの増加)の原因になります。また、実行可能ファイルに対して書き込み許可を与えることは、望ましくありません。
cron を使って毎日 /usr/sbin/prelink を実行させなくても、「信頼済みドメイン」からパッケージのアップデートを行った後に /usr/sbin/prelink を実行すれば事足りると思いますので、以下のように cron ジョブから除外することをお勧めします。
mv /etc/cron.daily/prelink /usr/sbin/prelink.cron |
コマンドラインから anacron を起動して必要なアクセス許可を学習させるので、 /usr/sbin/anacron を initializer として例外ポリシーに登録しておきます。
initializer /usr/sbin/anacron |
anacron は /usr/bin/run-parts を実行するので、 /usr/bin/run-parts を initializer として例外ポリシーに登録しておきます。
initializer /usr/bin/run-parts |
cron は /usr/bin/run-parts を実行するので、 /usr/bin/run-parts を initializer として例外ポリシーに登録しておきます。
initializer /usr/bin/run-parts |
/etc/crontab を開き、以下のようにジョブの実行間隔を5分に変更します。 1分間隔だと前回のジョブが終了する前に次回のジョブが開始されてしまう可能性が高いので、 適当な時間を空ける必要があります。
変更前 | 変更後 |
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly |
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts */5 * * * * root run-parts /etc/cron.hourly */5 * * * * root run-parts /etc/cron.daily */5 * * * * root run-parts /etc/cron.weekly */5 * * * * root run-parts /etc/cron.monthly |
学習が終わったら元に戻すのを忘れないでください。
上記の手順により作成された /root/security/exception_policy.txt は Strict Policy として使用するためのものです。もし、 Targeted Policy に相当する方法で利用したい場合、 /root/security/exception_policy.txt を以下のように修正してください。
以下の3行を追加します。 /sbin/modprobe や /sbin/hotplug がシンボリックリンクの場合は、そのリンク先を指定してください。
trust_domain <kernel> /sbin/init trust_domain <kernel> /sbin/modprobe trust_domain <kernel> /sbin/hotplug |
initializer というキーワードで指定されているプログラムの内、強制アクセス制御対象から除外したいものを除外します。 例えば、 /usr/sbin/httpd と /usr/sbin/httpd から起動されるプログラムだけを強制アクセス制御の対象としたい場合、以下の3行を残してその他の initializer というキーワードで始まる行を除外します。
initializer /usr/sbin/httpd initializer /sbin/modprobe initializer /sbin/hotplug |
このようにすると、 /usr/sbin/httpd および /usr/sbin/httpd から起動されるプログラムは「<kernel> /usr/sbin/httpd」ドメインおよびその子孫ドメインに属することで強制アクセス制御が適用され、その他のプログラムは「<kernel> /sbin/init」「<kernel> /sbin/modprobe」「<kernel> /sbin/hotplug」ドメインの何れかに属することで強制アクセス制御が適用されない状態になります。
起動時のブートプロンプトで TOMOYO Linuxカーネルを選択し、学習モード用のプロファイル番号を CCS= に指定して起動します。1回目は TOMOYO_NOLOAD パラメータも指定してください。 TOMOYO_NOLOAD というパラメータを指定すると、ドメイン単位のポリシー(domain_policy.txt)をロードしないで再起動することができます。(つまり、起動時のブートプロンプトで TOMOYO Linuxカーネルを選択し、学習モード用のプロファイル番号を CCS= に指定するのに加えて、 TOMOYO_NOLOAD も指定して起動します。)
許可したい操作に必要なアクセス許可を学習させます。
1回で全てのアクセスパターンを学習できるとは限らないので、何度か繰り返します。
また、起動時や終了時にのみ行われる操作も存在するため、再起動も何度か繰り返します。
学習モードで動作中には、以下のようなメッセージが表示される場合があります。
TOMOYO-WARNING: Domain '<kernel> ...' has so many ACLs to hold. Stopped auto-append mode. |
これは、特定のプログラムがあまりにも多くのファイルにアクセスしたものだから、メモリの浪費と応答速度の悪化を防ぐために安全装置が作動したことを知らせるメッセージです。安全装置が作動すると、このドメインに対してはファイルに対するアクセス許可がこれ以上自動的に追加されないようになります。
このメッセージに対処するには、手作業でアクセス許可を修正する必要があります。
例えば、以下のメッセージが表示された場合、適切なパターンを利用してグループ化することで <kernel> /usr/sbin/hald というドメインに対するアクセス許可の数を減らす必要があります。
TOMOYO-WARNING: Domain '<kernel> /usr/sbin/hald' has so many ACLs to hold. Stopped auto-append mode. |
/root/ccstools/editpolicy を使用してポリシーの編集を行うことができます。
コマンドラインから logrotate を起動し、必要なアクセス許可を学習させます。 現在のシステム時刻に関係なく logrotate のジョブを実行させるために、 -f オプションを指定してください。
/usr/sbin/logrotate -f /etc/logrotate.conf |
一度で全てのアクセス許可を学習できるとは限らないので、何度か繰り返します。
コマンドラインから anacron を起動し、必要なアクセス許可を学習させます。 現在のシステム時刻に関係なく anacron のジョブを実行させるために、 -d -f -n オプションを指定してください。
anacron -dfn |
一度で全てのアクセス許可を学習できるとは限らないので、何度か繰り返します。
通常のカーネルで再起動します。
以下のコマンドを実行すると、テンポラリであると思われるパス名が表示されます。適切にパターン化した上で /root/security/exception_policy.txt に file_pattern として追加します。
/root/ccstools/findtemp < /root/security/domain_policy.txt | sort | uniq |
テンポラリの基準としては、「最後の6文字だけが異なるパス名が複数存在している」「パス名の中の数値部分だけが異なるパス名が複数存在している」等があります。
パターン化する際の例を以下に示します。これらはインストールされているアプリケーションや設定により存在しなかったり違うディレクトリに存在していたりすることがあります。
initializer や allow_read で追加したいものがあれば追加します。
メンテナンス等のために特定のドメイン以下を信頼済みに設定したい場合は trust_domain を追加します。
パターンの洗い出しが完了したと判断したら、ドメイン別ポリシーを最初から学習しなおします。1回目は TOMOYO_NOLOAD パラメータも指定してください。
通常のカーネルで再起動します。
WWW サーバがアクセスするコンテンツのように、自動学習では必ずしもアクセスされないファイルに対するアクセス許可を /root/security/domain_policy.txt に追加します。
以下の例では、 /usr/sbin/httpd に対して /var/www/html/ 以下の読み込みを許可しています。
<kernel> /usr/sbin/httpd 4 /var/www/html/\* 4 /var/www/html/\*/\* 4 /var/www/html/\*/\*/\* 4 /var/www/html/\*/\*/\*/\* 4 /var/www/html/\*/\*/\*/\*/\* |
同様に、パターンを使用して手作業でのグループ化を行います。
以下の例では、 /usr/sbin/smbd に対して全てのログファイルを同様に扱うように指示しています。
修正前 | 修正後 |
<kernel> /usr/sbin/smbd 2 /var/log/samba/host1.log 2 /var/log/samba/host2.log 2 /var/log/samba/host3.log 2 /var/log/samba/host4.log 2 /var/log/samba/host5.log |
<kernel> /usr/sbin/smbd 2 /var/log/samba/\*.log |
TOMOYO Linux 1.2 では、個々のアクセス許可に対して必要に応じて条件を付けることができます。これにより、システムアカウントのユーザIDに基づくアクセス制御が可能です。
匿名ではない FTP サーバを保護する場合、以下のように条件を付けることで、当該ユーザのホームディレクトリ以外へのアクセスを禁止することができるようになります。ホームディレクトリ以下全部を FTP でアクセス可能にすることは、侵入された場合に被害が大きくなるため、自分のホームディレクトリにある ftp ディレクトリ以下だけのアクセスを認めます。 vsftpd を用いる場合、例えば以下のように許可を与えます。
修正前 |
<kernel> /usr/sbin/vsftpd 6 /home/\*/ftp/\* 6 /home/\*/ftp/\*/\* 6 /home/\*/ftp/\*/\*/\* 6 /home/\*/ftp/\*/\*/\*/\* allow_mkdir /home/\*/ftp/\*/ allow_mkdir /home/\*/ftp/\*/\*/ allow_mkdir /home/\*/ftp/\*/\*/\*/ allow_rmdir /home/\*/ftp/\*/ allow_rmdir /home/\*/ftp/\*/\*/ allow_rmdir /home/\*/ftp/\*/\*/\*/ allow_create /home/\*/ftp/\* allow_create /home/\*/ftp/\*/\* allow_create /home/\*/ftp/\*/\*/\* allow_create /home/\*/ftp/\*/\*/\*/\* allow_truncate /home/\*/ftp/\* allow_truncate /home/\*/ftp/\*/\* allow_truncate /home/\*/ftp/\*/\*/\* allow_truncate /home/\*/ftp/\*/\*/\*/\* allow_unlink /home/\*/ftp/\* allow_unlink /home/\*/ftp/\*/\* allow_unlink /home/\*/ftp/\*/\*/\* allow_unlink /home/\*/ftp/\*/\*/\*/\* allow_rename /home/\*/ftp/\* /home/\*/ftp/\* allow_rename /home/\*/ftp/\*/\* /home/\*/ftp/\*/\* allow_rename /home/\*/ftp/\*/\*/\* /home/\*/ftp/\*/\*/\* allow_rename /home/\*/ftp/\*/\*/\*/\* /home/\*/ftp/\*/\*/\*/\* allow_rename /home/\*/ftp/\*/ /home/\*/ftp/\*/ allow_rename /home/\*/ftp/\*/\*/ /home/\*/ftp/\*/\*/ allow_rename /home/\*/ftp/\*/\*/\*/ /home/\*/ftp/\*/\*/\*/ |
修正後 |
<kernel> /usr/sbin/vsftpd 6 /home/\*/ftp/\* if task.uid=path1.uid 6 /home/\*/ftp/\*/\* if task.uid=path1.uid 6 /home/\*/ftp/\*/\*/\* if task.uid=path1.uid 6 /home/\*/ftp/\*/\*/\*/\* if task.uid=path1.uid allow_mkdir /home/\*/ftp/\*/ if task.uid=path1.parent.uid allow_mkdir /home/\*/ftp/\*/\*/ if task.uid=path1.parent.uid allow_mkdir /home/\*/ftp/\*/\*/\*/ if task.uid=path1.parent.uid allow_rmdir /home/\*/ftp/\*/ if task.uid=path1.uid allow_rmdir /home/\*/ftp/\*/\*/ if task.uid=path1.uid allow_rmdir /home/\*/ftp/\*/\*/\*/ if task.uid=path1.uid allow_create /home/\*/ftp/\* if task.uid=path1.parent.uid allow_create /home/\*/ftp/\*/\* if task.uid=path1.parent.uid allow_create /home/\*/ftp/\*/\*/\* if task.uid=path1.parent.uid allow_create /home/\*/ftp/\*/\*/\*/\* if task.uid=path1.parent.uid allow_truncate /home/\*/ftp/\* if task.uid=path1.uid allow_truncate /home/\*/ftp/\*/\* if task.uid=path1.uid allow_truncate /home/\*/ftp/\*/\*/\* if task.uid=path1.uid allow_truncate /home/\*/ftp/\*/\*/\*/\* if task.uid=path1.uid allow_unlink /home/\*/ftp/\* if task.uid=path1.uid allow_unlink /home/\*/ftp/\*/\* if task.uid=path1.uid allow_unlink /home/\*/ftp/\*/\*/\* if task.uid=path1.uid allow_unlink /home/\*/ftp/\*/\*/\*/\* if task.uid=path1.uid allow_rename /home/\*/ftp/\* /home/\*/ftp/\* if task.uid=path1.parent.uid task.uid=path2.parent.uid allow_rename /home/\*/ftp/\*/\* /home/\*/ftp/\*/\* if task.uid=path1.parent.uid task.uid=path2.parent.uid allow_rename /home/\*/ftp/\*/\*/\* /home/\*/ftp/\*/\*/\* if task.uid=path1.parent.uid task.uid=path2.parent.uid allow_rename /home/\*/ftp/\*/\*/\*/\* /home/\*/ftp/\*/\*/\*/\* if task.uid=path1.parent.uid task.uid=path2.parent.uid allow_rename /home/\*/ftp/\*/ /home/\*/ftp/\*/ if task.uid=path1.parent.uid task.uid=path2.parent.uid allow_rename /home/\*/ftp/\*/\*/ /home/\*/ftp/\*/\*/ if task.uid=path1.parent.uid task.uid=path2.parent.uid allow_rename /home/\*/ftp/\*/\*/\*/ /home/\*/ftp/\*/\*/\*/ if task.uid=path1.parent.uid task.uid=path2.parent.uid |
Samba サーバを保護する場合、以下のように条件を付けることで、当該ユーザのホームディレクトリ以外へのアクセスを禁止することができるようになります。ホームディレクトリ以下全部を Samba でアクセス可能にすることは、侵入された場合に被害が大きくなるため、自分のホームディレクトリにある samba ディレクトリ以下だけのアクセスを認めます。
修正前 |
<kernel> /usr/sbin/smbd 6 /home/\*/samba/\* 6 /home/\*/samba/\*/\* 6 /home/\*/samba/\*/\*/\* 6 /home/\*/samba/\*/\*/\*/\* allow_mkdir /home/\*/samba/\*/ allow_mkdir /home/\*/samba/\*/\*/ allow_mkdir /home/\*/samba/\*/\*/\*/ allow_rmdir /home/\*/samba/\*/ allow_rmdir /home/\*/samba/\*/\*/ allow_rmdir /home/\*/samba/\*/\*/\*/ allow_create /home/\*/samba/\* allow_create /home/\*/samba/\*/\* allow_create /home/\*/samba/\*/\*/\* allow_create /home/\*/samba/\*/\*/\*/\* allow_truncate /home/\*/samba/\* allow_truncate /home/\*/samba/\*/\* allow_truncate /home/\*/samba/\*/\*/\* allow_truncate /home/\*/samba/\*/\*/\*/\* allow_unlink /home/\*/samba/\* allow_unlink /home/\*/samba/\*/\* allow_unlink /home/\*/samba/\*/\*/\* allow_unlink /home/\*/samba/\*/\*/\*/\* allow_rename /home/\*/samba/\* /home/\*/samba/\* allow_rename /home/\*/samba/\*/\* /home/\*/samba/\*/\* allow_rename /home/\*/samba/\*/\*/\* /home/\*/samba/\*/\*/\* allow_rename /home/\*/samba/\*/\*/\*/\* /home/\*/samba/\*/\*/\*/\* allow_rename /home/\*/samba/\*/ /home/\*/samba/\*/ allow_rename /home/\*/samba/\*/\*/ /home/\*/samba/\*/\*/ allow_rename /home/\*/samba/\*/\*/\*/ /home/\*/samba/\*/\*/\*/ |
修正後 |
<kernel> /usr/sbin/smbd 6 /home/\*/samba/\* if task.euid=path1.uid 6 /home/\*/samba/\*/\* if task.euid=path1.uid 6 /home/\*/samba/\*/\*/\* if task.euid=path1.uid 6 /home/\*/samba/\*/\*/\*/\* if task.euid=path1.uid allow_mkdir /home/\*/samba/\*/ if task.euid=path1.parent.uid allow_mkdir /home/\*/samba/\*/\*/ if task.euid=path1.parent.uid allow_mkdir /home/\*/samba/\*/\*/\*/ if task.euid=path1.parent.uid allow_rmdir /home/\*/samba/\*/ if task.euid=path1.uid allow_rmdir /home/\*/samba/\*/\*/ if task.euid=path1.uid allow_rmdir /home/\*/samba/\*/\*/\*/ if task.euid=path1.uid allow_create /home/\*/samba/\* if task.euid=path1.parent.uid allow_create /home/\*/samba/\*/\* if task.euid=path1.parent.uid allow_create /home/\*/samba/\*/\*/\* if task.euid=path1.parent.uid allow_create /home/\*/samba/\*/\*/\*/\* if task.euid=path1.parent.uid allow_truncate /home/\*/samba/\* if task.euid=path1.uid allow_truncate /home/\*/samba/\*/\* if task.euid=path1.uid allow_truncate /home/\*/samba/\*/\*/\* if task.euid=path1.uid allow_truncate /home/\*/samba/\*/\*/\*/\* if task.euid=path1.uid allow_unlink /home/\*/samba/\* if task.euid=path1.uid allow_unlink /home/\*/samba/\*/\* if task.euid=path1.uid allow_unlink /home/\*/samba/\*/\*/\* if task.euid=path1.uid allow_unlink /home/\*/samba/\*/\*/\*/\* if task.euid=path1.uid allow_rename /home/\*/samba/\* /home/\*/samba/\* if task.euid=path1.parent.uid task.euid=path2.parent.uid allow_rename /home/\*/samba/\*/\* /home/\*/samba/\*/\* if task.euid=path1.parent.uid task.euid=path2.parent.uid allow_rename /home/\*/samba/\*/\*/\* /home/\*/samba/\*/\*/\* if task.euid=path1.parent.uid task.euid=path2.parent.uid allow_rename /home/\*/samba/\*/\*/\*/\* /home/\*/samba/\*/\*/\*/\* if task.euid=path1.parent.uid task.euid=path2.parent.uid allow_rename /home/\*/samba/\*/ /home/\*/samba/\*/ if task.euid=path1.parent.uid task.euid=path2.parent.uid allow_rename /home/\*/samba/\*/\*/ /home/\*/samba/\*/\*/ if task.euid=path1.parent.uid task.euid=path2.parent.uid allow_rename /home/\*/samba/\*/\*/\*/ /home/\*/samba/\*/\*/\*/ if task.euid=path1.parent.uid task.euid=path2.parent.uid |
SSH サーバを保護する場合、以下のように条件を付けることで、 root ユーザとしてログインすることを禁止できます。
修正前 | 修正後 |
<kernel> /usr/sbin/sshd 1 /bin/bash |
<kernel> /usr/sbin/sshd 1 /bin/bash if task.uid!=0 task.euid!=0 |
指定可能な条件については条件付きアクセス許可を参照してください。
起動時のブートプロンプトで TOMOYO Linux カーネルを選択し、確認モード用のプロファイル番号を CCS= に指定して起動します。
許可したい操作を行ってもエラーメッセージが表示されないことを確認してください。
正常に動作すればポリシーの完成です。
起動時のブートプロンプトで TOMOYO Linux カーネルを選択し、強制モード用のプロファイル番号を CCS= に指定して起動します。