jumble

アクセスカウンタ

zoom RSS SELinuxと格闘 その2

<<   作成日時 : 2012/03/18 20:42   >>

ブログ気持玉 0 / トラックバック 2 / コメント 3

SELinuxと格闘 その2


前の記事

iniディレクトリとその配下のファイルのタイプをxdm_tに変えた後、カスタマイズの続きを行った。
ところがすぐに壁にぶつかった。
このiniディレクトリには、起動時に動作するシェルスクリプトを置くのだが、それができないのだ。
ファイルの作成が拒否されてしまう。
今度は通常の操作から、iniを使うことが出来なくなった。
なるほど、ファイルのタイプを変更するというのは影響が大きそうだ。
ということで、この方法は諦めた。
とりあえず、設定を元に戻す。

# semanage fcontext -d -t xdm_t '/ext/ini(/.*)?'
# restorecon -R /ext/ini

エラーなどがあれば適宜、"setenforce 0"を実行してSELinuxを一時的にpermissiveにする。
さて、また1からやり直しだ。
/etc/selinux/configの設定自体もpermissiveにしてマシンを再起動する。

さてこれがダメとなると、前の記事で書いた(2)の方法を取るしかない。
つまり、xdm_tドメインがiniディレクトリを使用できるようにするしかないわけだ。
しかし、どうやって?
具体的な方法が分からない。
とりあえず、sealertの結果をもう一度見てみる。
アドバイスらしき記述の中に、audit2allowという単語がちらほら見える。
何となく何かのコマンドらしい。
調べてみると、ログファイルのメッセージからallow文というものを自動生成しれくれるツールらしい。
このページなどが参考になる。
ふーん。/var/log/audit/audit.logというファイルがあるのか。
SELinuxに関しては/var/log/messagesより詳細な情報が出力されている感じだ。
ただ、人間が見るものとしてはかなり理解しにくい。
ところで、allow文って何?
実はallow文が何かを知らない時点で、SELinuxについては何も理解していないに等しいことになる。
allow文こそがSELinuxの肝なのだということを、この時点で初めて理解した。
allow文は、どのドメインのプロセスが、どのタイプのリソースに対してどんな操作を許可するかという定義のようだ。
いわゆるポリシーと呼ばれるものだと思う。
例えばこのページなどを見れば、ポリシーに関する大まかな概念は理解できる。
しかし、実際にポリシーを設定する方法の情報が圧倒的に少ないような気がする。
とりあえず、sealertのアドバイス通り、適当なディレクトリに移って次を実行してみた。

# grep gdm /var/log/audit/audit.log | audit2allow -M xxxx

なるほど、xxxx.teとxxxx.ppというファイルが生成されている。
そのうち、xxxx.teの内容は以下の通り。

module xxxx 1.0;

require {
    type default_t;
    type xdm_t;
    class dir read;
    class file { read getattr open };
}

#============= xdm_t ==============
allow xdm_t default_t:dir read;
allow xdm_t default_t:file { read getattr open };

で、同時に生成されたxxxx.ppはそれをコンパイルしたバイナリファイルのようだ。
現在、SELinuxのポリシーはモジュール化されているらしい。
で、このxxxx.ppはポリシーパッケージといい、これを本体のポリシーに追加することができる。
単に追加するだけなら、アドバイス通り直接バイナリファイルを使用して次のように実行すればよさそうだ。

# semodule -i xxxx.pp

ただし、これは根本的な解決方法ではなく、あくまで対処療法だと思った方がいいみたいだ。
このページを見ればわかる通り、このポリシーパッケージの元となったログがなくなれば、それに対処する部分も生成されない。
そうすると、新たに同じ名前で生成したポリシーパッケージを追加してしまうと、以前の問題が復活することになる。

では、根本的な解決方法とは?
上で生成されたxxxx.teはTEファイルといい、ポリシーパッケージの元となるソースファイルだ。
それを元にバイナリであるポリシーパッケージを生成し追加するという手順が、いわゆる正攻法なのだと思う。
で、そのやり方を見つけるのもかなり苦労した。
いろんなページに書いてあることが結構古かったり、バラバラだったりで、どれが正しいのかさっぱり分からない。

探しているうち、こんなページを見つけた。
そこには、まずselinux-policy-targeted-sources.noarchをインストールする必要があると書いてある。
そうすると、/etc/selinux/targeted配下にsrcディレクトリができるはずだ。
で、yumでインストール♪ってやろうとしたら、そんなパッケージ無いじゃん。
selinux-policy-targeted.noarchならある。
新しくなって統合されたのかなと思い、とりあえずこれをyumでインストールしてみた。
でも、目的のディレクトリはできない。
やはりどうも違うらしい。
困ったもんだ。
実はこのインストールは、後でまた悲劇の原因となるのだった。
それは後で。

そうこうしているうちに、このページにたどり着く。
同じ悩みの人がいる。
で、下の方のニコチャンマークが付いているこのページを見ると、最新のやり方が書いてあるようだ。
そこには、/usr/share/selinux/devel/Makefileを使う方法が紹介されている。
が、その少し下に書かれている方法の方が、より正攻法に近い気がする。
以下抜粋。

checkmodule -M -m -o local.mod local.te
semodule_package -o local.pp -m local.mod
semodule -i local.pp

うーむ。
やろうとしていることは理解出来たのだが、これって2段階のコンパイルが必要ってこと?
そんなの本格的なプログラミング言語でも聞いたことが無い。
それはあまりにも利便性に欠けるのでは?
せめて、パイプでつないで余計な中間ファイルを作らなくて済むようになってればいいのだが。
なってない!
もう1つは、2つのコンパイルの間でバージョンの不整合が起こるかもしれないじゃないか!
というより、実際起こったのだ。
まず、1つ目のコンパイルは、上のxxxx.te(実際には名前を変えてあるが)を指定して実行。

$ checkmodule -M -m -o xxxx.mod xxxx.te
checkmodule: loading policy configuration from xxxx.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 14) to xxxx.mod

ついで、2つ目の実行。

$ semodule_package -o xxxx.pp -m xxxx.mod
libsepol.policydb_read: policydb module version 14 does not match my version range 4-13
semodule_package: Error while reading policy module from xxxx.mod

エラーだよ!
おい!こら!

要するに、checkmoduleで生成するxxxx.modが、semodule_packageが想定するバージョンより新しすぎるのだろう。
うーん、だから言わんこっちゃ無い。
selinux-policy-targeted.noarchをインストールしていない環境で試してみると、うまく動作した。
明らかにこのインストールが原因だ。
というより、もともとあったselinux-policy-targeted.noarchがアップデートされたようだ。
で、その影響でいろんなものがアップデートされ、それが原因で不整合が起きたようだ。

とりあえず、selinux-policy-targeted.noarchをダウングレードしてみようと思ったのだがうまくいかない。

# yum downgrade selinux-policy-targeted.noarch
読み込んだプラグイン:langpacks, presto, refresh-packagekit
ダウングレード処理の設定をしています
依存性の解決をしています
・・・
エラー: パッケージ: selinux-policy-targeted-3.10.0-46.fc16.noarch (fedora)
・・・
問題を回避するために --skip-broken を用いることができません
これらを試行できます: rpm -Va --nofiles --nodigest

一旦アンインストールし、古いバージョンのものを再度インストールしようとしたが、同じような感じだ。
しかも、SELinux関連のいろんなものが使えなくなってしまった。
にっちもさっちもいかなくなってしまった。

このあたりで力尽き、いろいろ模索する気力はもはや残っていなかった。
ということで、再度OSのインストールからやり直した。
これはかなり由々しき問題、というより大問題ではないか。
気軽にアップデートできないではないか!
セキュリティ関連では特に、きちんとアップデートしろというのが鉄則なはずだ。
これは明らかにcheckmoduleとsemodule_packageとの連携ミスなのだが、根本的な問題はそこではない。
こういう方式を採用している以上、こういう問題は常に起こり得るだろう。
本当の問題は、そもそもcheckmoduleとsemodule_packageという2段階のコンパイルを必要としている点だ。
内部的にいろんな事情があるのだろうが、それでもこのやり方は問題が多すぎる。
実際、何らかのパッケージをアップデートすることによって発生する問題は、非常にやっかいだ。
まあ結局は、この問題を解決する方法は判明したのだが、それは少し経ってからだ。
そのことに関しては、後ほど。

今回はOSを再インストールしたが、もちろん通常は許される方法ではない。
どうにかしてくれ!
まあ、今回はこの問題は一旦横に置いて先に進むことにした。
さて、気を取り直して再度同じことを実行した。
まずcheckmodule。

$ checkmodule -M -m -o xxxx.mod xxxx.te
checkmodule: loading policy configuration from xxxx.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 13) to xxxx.mod

バージョンは13だ。失敗した時は14だった。
ついでsemodule_package。

$ semodule_package -o xxxx.pp -m xxxx.mod

あっさりうまくいった。
次はsemoduleで実際にポリシーを追加する。

# semodule -i xxxx.pp

少し時間がかかるが、無事終了。
で、本当に追加されたのか?
一応、/etc/selinux/targeted/modules/active/modulesにxxxx.ppが追加された。
だが待てよ。
確かにファイルが追加されているのでうまくいってそうだが、本当にポリシーとして追加されたのか?
そもそも、現状どのようなポリシーが設定されているかを、どうやって確認するのだ?
そう、よく考えると、設定されているポリシーを確認する方法を自分は知らないのだ。
で、これがなかなか見つからない。
例えば、"SELinux ポリシー 確認"などというキーワードを入れて検索してもほとんど何も引っ掛からない。
設定されているポリシーを確認できなければ、全体的な見通しなど立たないではないか。
確認する方法はないのか?
そんなことはないのだろうが、なかなか見つけることが出来なかった。
結局は見つかったのだが、それは次回で。
とにかく、問題が解決されたかを確認する。
まずは再起動。
この時はまだpermissiveのままにしておく。
あと、/var/log/messagesは削除した方が次の確認がやりやすいかもしれない。
また、/var/log/audit/audit.logも次のaudit2allowのために削除した方がいいかもしれない。
再起動後、/var/log/messagesを確認。
大丈夫そうだ。
では、enforcingにしてまた再起動。

よし、とりあえずフリーズはしない。
だが、まだ話は続くのだ。

次に続く

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(2件)

タイトル (本文) ブログ名/日時
フェラガモ バッグ
SELinuxと格闘 その2 jumble/ウェブリブログ ...続きを見る
フェラガモ バッグ
2013/07/04 07:27
プラダ メンズ
SELinuxと格闘 その2 jumble/ウェブリブログ ...続きを見る
プラダ メンズ
2013/07/06 13:41

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(3件)

内 容 ニックネーム/日時
Hello! Someone in my Myspace group shared this site with us so I came to check it out. I’m definitely loving the information. I’m book-marking and will be tweeting this to my followers! Fantastic phorum and outstanding design. http://kischu-stadt.de/redirect.php?url=http://bunga-bunga-party.com
ScottRep
2017/01/04 00:36
Предлагаем Вашему вниманию новый сайт поиска партнера для секса на одну ночь, у нас самая огромная база анкет парней и девушек!
Девушки и парни с любого города на планете уже в нашей базе!
http://goo.gl/tX4SHi
Daiternum
2017/01/13 03:38
It’s hard to find knowledgeable people on this topic, but you sound like you know what you’re talking about! Good stuff, thanks. http://www.zsmoderowka.jedlicze.pl/index.php?option=com_k2&view=itemlist&task=user&id=116721
ScottRep
2017/02/04 14:06

コメントする help

ニックネーム
本 文
SELinuxと格闘 その2 jumble/BIGLOBEウェブリブログ
文字サイズ:       閉じる