[tomoyo-users 368] Re: Cent OS 5.1 での操作がうまく行きませんでした。

アーカイブの一覧に戻る

Tetsuo Handa from-****@I-lov*****
2008年 3月 2日 (日) 19:50:02 JST


 熊猫です。

 昨日は OSC2008 にご来場いただきましてありがとうございました。



> 1.GUIでログインすると、一般ユーザーでログイン後、rootにスイッチしても、
> また、rootでログインしても上記の通りにはなりませんでした。
これは、 TOMOYO Linux のドメインが CUI からログインした場合と GUI からログインした場合とで異なるためです。
CUI からログインした場合にはログインシェルのドメインは

  <kernel> /sbin/mingetty /bin/login /bin/bash

のようになるので、手順書の通り

  setprofile -r 1 '<kernel> /sbin/mingetty'

のようにすれば、ドメイン名が <kernel> /sbin/mingetty で始まるドメインに対して
プロファイル 1 が割り当てられるようになります。

しかし、 GUI からログインした場合にはログインシェルのドメインのドメイン名は
<kernel> /sbin/mingetty では始まらないため、手順書の通り実行してもうまくいきません。

現在のシェルが属しているドメインを確認したい場合には、

  cat < /proc/ccs/self_domain

というコマンドを実行してください。
CUI からログインした場合と GUI からログインした場合とでは異なる結果が表示されるはずです。



> 2.CUIでログイン後、setprofile -r 1 '<kernel> /sbin/mingetty'として、指定
> された動作を実行後、
> # savepolicy → # setprofile -r 3 '<kernel> /sbin/mingetty'
> としましたが、tail /etc/passwdは、エラーにならず、実行されてしまいました。
> 
> これらは、どうしてでしょうか。

すみません。もうちょっと情報をください。
手順書(ログインシェルとして /bin/bash が指定されていることを仮定しています)では、

 ログインシェルのドメイン( <kernel> /sbin/mingetty /bin/login /bin/bash )において

  /bin/date コマンドの実行を学習させる
  /usr/bin/head コマンドの実行を学習させる
  /bin/tcsh コマンドを実行し、ログインシェルから /bin/tcsh へと移動する

 ログインシェルから起動された /bin/tcsh のドメイン( <kernel> /sbin/mingetty /bin/login /bin/bash /bin/tcsh )において

  /usr/bin/tail コマンドの実行を学習させる
  exit コマンドを使って /bin/tcsh を終了させ、ログインシェルへと戻る

という操作を行っています。

よくあるのは tcsh を終了させていない状態(つまり <kernel> /sbin/mingetty /bin/login /bin/bash /bin/tcsh ドメイン)で
/usr/bin/tail コマンドを実行してしまったという間違いです。
/bin/tcsh では /usr/bin/tail /etc/passwd を学習させているため、強制モードでもエラーになることはありません。
逆に、 /bin/bash では /usr/bin/tail を学習させていないため、強制モードではエラーになります。

/bin/bash と /bin/tcsh のプロンプトが同じで紛らわしいのですが、
/bin/bash から実行しているのか /bin/tcsh から実行しているのかをご確認ください。
/bin/bash から実行しているのに /usr/bin/tail /etc/passwd がエラーにならない場合は、
余計な操作を学習させてしまった可能性がありますので、 savepolicy を実行した後の
/etc/ccs/domain_policy.conf の内容を添付してください。



> なお、強制モードで実行させる前に、必ず、# savepolicy コマンドを実行させな
> ければならないのでしょうか。
いいえ、その必要はありません。
savepolicy は現在のポリシーを保存したいときだけ実行してください。
モードの切り替えをする前に実行しなければいけないというわけではありません。
TOMOYO Linux カーネルが自動的にポリシーを更新していくため、
システムをシャットダウンする前にポリシーを保存しておく必要があります。

TOMOYO Linux 以外の場合、
「管理者が手作業でポリシーを作成」→「管理者がポリシーをカーネルへと読み込ませる」
という流れであり、カーネルが自動的にポリシーに変更を加えることはないため、
ポリシーを読み込むためのコマンドは存在しても、ポリシーを保存するためのコマンドは不要なので存在しません。
ディスク上のポリシーが原本であり、その内容をメモリ上にコピーして使います。

しかし、 TOMOYO Linux の場合には、カーネルが自動的にポリシーに変更を加えますが、
カーネルが作成したポリシーはメモリ上にしか存在しないため、電源を切ると失われてしまいます。
そのため、カーネルが作成したポリシーを管理者がディスク上に保存するという作業が必要であり、
ポリシーを読み込むための loadpolicy コマンドとポリシーを保存するための savepolicy コマンドの両方が存在します。
メモリ上のポリシーが原本であり、その内容のスナップショットをディスク上にバックアップしてから電源を切り、
再起動後にディスク上に退避したスナップショットをメモリ上にリストアするという流れです。
ディスク上に退避したスナップショットをメモリ上にリストアする作業は、 /sbin/init の開始時に自動的に実行される
/sbin/ccs-init が行ってくれるため、管理者は手作業で loadpolicy を実行する必要はありません。



> また、# savepolicy コマンドを実行したため、ポリシーファイルに何か付け加わ
> ったような気がしますが、元に戻すにはどうすれば良いでしょうか。
savepolicy を実行すると、 /etc/ccs/ ディレクトリに
system_policy.conf exception_policy.conf domain_policy.conf という3つのシンボリックリンクが作成されます。

  ls -l /etc/ccs/

を実行してみてください。これらのシンボリックリンクは、それぞれ savepolicy を実行した日時
(年-月-日.時:分:秒)をファイル名の中に含むファイルを指しています。

そのため、 ln -s でシンボリックリンクの指す先を変更してから

  loadpolicy af

のように実行することで、以前のポリシーに戻すことができます。

あるいは、ポリシーエディタ( editpolicy )を実行して
/usr/lib/ccs/savepolicy の行へとカーソルを移動させてからキーボードの d を押すと
削除するかどうか尋ねられるので、キーボードの y を押すことで削除することも可能です。



> # init_policy.sh --file-only-profile
> を実行した際に、cardmgrがないと言って怒られました。
init_policy.sh はディストリビューションを問わない汎用的に使えるような設定で作成しているため、
ディストリビューションやインストール方法によっては特定のアプリケーションが見つからないという
エラーが表示されることがありますが、実害はないので無視していただいて構いません。




tomoyo-users メーリングリストの案内
アーカイブの一覧に戻る