Fedora12: SELinux RBACを試してみた
SELinuxは、Linuxのセキュリティ機構で、root権限で動くサービス等が乗っ取られた際にもシステム全体を乗っ取れなくする(例えば Apacheなら/var/www/ 以下の読み取りしかできない、など ) の機能を有するが、更に加えて、RBACの機能もあるため、こちらを試してみた。
RBAC(Role-Based Access Control)は、各ユーザーに対して、必要な権限だけを与えるための拡張機能で、(例えば、一般のオフィスユーザーは su, sudo を使うことはない。。) 主にFedora, RHELなどRed Hat系のディストリビューションで利用できる。とはいえ、root権限の一部をシステム管理者に与えるような使い方は得意ではなく、(そちらはPuppet+sudoで強制した方がよさそう。。) どちらかというと、一般ユーザー(システム管理者のこと)よりも弱い権限を持ったユーザー(オフィスユーザーなど)向けに設計されている。実際にRed HatではIT部門以外のスタッフにはSELinuxで権限を制御したユーザーを使用しているらしい。。( http://www.globalknowledge.com/training/generic.asp?pageid=2114&country=United+States )
Fedoraでの設定手順はこちら。
http://docs.fedoraproject.org/selinux-user-guide/f12/en-US/
マニュアルは長いのだが、実際にユーザー権限を制御してみるには、ユーザー作成の際に、
# useradd -Z selinuxuser username
の書き方で、selinuxのユーザーを指定するだけで試せる。w Fedoraデフォルトの設定では、user_u, staff_u, xguest_u などが用意されているので、ここではこの3つを試してみた。
以下、seuser1: user_u(オフィスユーザー向け、su, sudoが実施出来ないこと以外は一般ユーザーと同じ), seuser2: xguest_u(キオスク端末向け, user_u の制限に加え、firefox以外のコマンドでは80番ポートへの接続が出来ないなど多様な制限あり), seuser3: staff_u(サポートデスクのスタッフ向け, user_uでsudoだけは許可した状態)で種々のコマンドを打ってみた結果を添付する。
seuser1:
suについてはそもそもコマンドが見つからず、sudoについても拒否される設定になっている。。
[seuser1@fedora-virt7 ~]$ su - -bash: su: コマンドが見つかりません [seuser1@fedora-virt7 ~]$ sudo visudo sudo: setresuid(ROOT_UID, 1, ROOT_UID): 許可されていない操作です [seuser1@fedora-virt7 ~]$
seuser2
su, sudoに加え、www.google.co.jp へのcurl, nc, pingが全て失敗する。尚、 GnomeにGDMからログインし、Firefoxを使用することはできた。(Web閲覧は可能)
[seuser2@fedora-virt7 ~]$ curl http://www.google.co.jp curl: (7) Failed to connect to 66.249.89.104: 許可がありません [seuser2@fedora-virt7 ~]$ ping www.google.co.jp ping: icmp open socket: 許可がありません [seuser2@fedora-virt7 ~]$ [seuser2@fedora-virt7 ~]$ nc -z -v www.google.co.jp 80 nc: connect to www.google.co.jp port 80 (tcp) failed: Permission denied nc: connect to www.google.co.jp port 80 (tcp) failed: Permission denied nc: connect to www.google.co.jp port 80 (tcp) failed: Permission denied nc: connect to www.google.co.jp port 80 (tcp) failed: Permission denied [seuser2@fedora-virt7 ~]$ [seuser2@fedora-virt7 ~]$ which su /usr/bin/which: no su in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/seuser2/bin) [seuser2@fedora-virt7 ~]$ which sudo /usr/bin/sudo [seuser2@fedora-virt7 ~]$ su - -bash: su: コマンドが見つかりません [seuser2@fedora-virt7 ~]$ sudo visudo sudo: setresuid(ROOT_UID, 1, ROOT_UID): 許可されていない操作です [seuser2@fedora-virt7 ~]$
seuser3
suは実行できないが、sudoは実施できた。(/etc/sudoersの許可が無いため、コマンドは失敗しているが ww)
[seuser3@fedora-virt7 ~]$ sudo visudo We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for seuser3: seuser3 is not in the sudoers file. This incident will be reported. [seuser3@fedora-virt7 ~]$ [seuser3@fedora-virt7 ~]$ su - -bash: su: コマンドが見つかりません
こんな感じである。
ウィルス対策ソフトには、PC上の動作を見て、ウィルスを検知するものがあるが、RBACの機能はそれと類似の機能と言えそうだ。ユーザーごとに出来る行動が厳しく制限できるので、例えば危険なサイト等を見に行く場合にはxguest_uでログインし直すなどすると、より安全に閲覧が出来そうだ。w 他にホームディレクトリ以下のファイルを実行できなくする(勝手にソフトウェアをインストールされない) ことも出来るようなので、Linux PCを集約管理する際にも役に立ちそうだ。。