#yum install vsftpd
テンプレートを作成ボタンを押すと、作成されたテンプレートに
設定が生成されます。
ちなみに、対象アプリをrpmパッケージでインストールしている場合は、「必要 なポリシを推測」ボタン使うことで、時間を節約できます。このボタンを押すと、 rpmパッケージの情報を参照することで、ある程度必要なポリシが生成されます。 今回の例の場合、
allow /etc/pam.d/vsftpd r,s; allow /etc/vsftpd/** r,s; allow /usr/sbin/vsftpd r,s; allow /var/ftp/** r,s;といったポリシが生成されます。
今回は、 Anonymous FTPサーバを構築しますので、公開ディレクトリ(/var/ftp
以下)への読み込み権
限が必要ですし、21番ポートを使う権限が必要です。
これらの設定は「ポリシーを追加」ボタンを使って追加できます。
図14では、/var/ftpディレクトリ以下への読み込みアクセス
を設定してます。図15では,TCP21番ポートを使ってサーバー
として振る舞うことを許可しています。追加 ボタンを押すと、
allow /var/ftp/** r,s; allownet -protocol tcp -port 21 server;のような設定が追加されます。追加したい設定を全て追加したら、「セーブし、 設定を適用」ボタンを押します。
以下のコマンドでは, Anonymous ftpでファイル転送できることを確認してます。
#echo "test">/var/ftp/pub/test.txt (テスト用のファイル作成) $ ftp localhost Name (localhost:ynakam): Anonymous Password: <なんでもOK> > cd /var/ftp/pub > get test.txt
ここで、ログを見てみると(auserch -m AVCで見ることが出来ます)、様々なア
クセスログが出ていることが分かります。ポリシー生成ツールでこれらを許可す
る設定を追加していきます。
ポリシーを生成 をコントロールパネルから選択すると、図
16のような画面が開きます。
通常は、デフォルトの設定のまま「ポリシーを生成」ボタンを押します。
図 17のように結果画面が開きます。
追加したい設定についてはチェックボタンを押します。ディレクトリ丸ごとアク
セス許可をしたい場合は「まとめて指定」を使います。
今回の場合は、/etc/vsftpdディレクトリにまとめて設定を許可したほうが効率
がいいので、/etc/vsftpd/vsftpd.confのところで、「まとめて指定」ボタンを
使います。
ファイル名は、 /etc/vsftpd/vsftpd.conf /etc/vsftpd/*
/etc/vsftpd/**のように変わっていきます
さて、今回の例では図 18のような設定が追加さ
れることになります。 セーブし設定を適用 を押して設定を反映します。
再度vsftpdの動作確認をして、ポリシ生成ツールを使います。何も設定が生成さ
れなくなったら、次はEnforcingモードでテストします。もし動作すれば、設定
はおしまいです。そうでなければ、生成ツールでポリシを追加し、再度テストし
ます。テスト、ポリシの生成をアプリケーションがEnforcingモードで動作する
まで繰り返します。
seedit-template -d <ドメインの名前> -e <実行ファイル名> -o <出力>今回は、ドメインの名前は「ftpd_t」で、実行ファイルは「/usr/sbin/vsftpd」 ですので、 以下のように実行します。コマンドと実行結果を示します。
# seedit-template -d vsftpd_t -e /usr/sbin/vsftpd { domain ftpd_t; program /usr/sbin/vsftpd; include common-relaxed.sp; include daemon.sp; include nameservice.sp; }テンプレートとなる設定が生成されています。/usr/sbin/vsftpdにftpd_tを付 与しています。 include から始まる行で、一般的なデーモンプログラムに必要な権限が 与えられます。 この設定を、 /etc/seedit/policy/ftpd_t.spに保存します。 ファイル名は、必ず「ドメイン名.sp」である必要があります。さもないと、設 定反映時にエラーが出ます。
#seedit-loadなお「-v」をつけると詳細な経過を見ることができます。
#setenforce 0 #getenforce Permissivevftpdを起動して、seedit-unconfinedコマンドでvsftpdのドメインを確認します。
# /etc/init.d/vsftpd restart # seedit-unconfined -e 10530 vsftpd Confined by ftpd_t上のようにvsftpdにftpd_tドメインが付与されていることと思います。
# touch /var/ftp/pub/test.txt ↑ テスト用のファイルを作成 $ ftp localhost Name (localhost:ynakam): Anonymous Password: <anything is OK> #以下、pub/test.txtをダウンロードしている ftp> ls ftp > cd pub ftp > get test.txt ftp > quit
ログを閲覧します。 以下、auditdサービスが起動しているという前提で話を進めます。 auditdサービスが起動していない場合は、audit2spdl -alを-dlに置き換えて読 んでください。
#auserch -m AVC ↑/var/log/audit/audit.logのログを閲覧するコマンドです。様々なアクセス拒否が出ていると思います。
#audit2spdl -al ------------------------- #SELinux deny log: audit(1146179470.043:86): avc: denied { search } for pid=10904 comm="vsftpd" name="vsftpd" dev=hda3 ino=584772 scontext=user_u:system_r:ftpd_t tcontext=system_u:object_r:etc_t tclass=dir #Suggested configuration File ftpd_t.sp: allow /etc/vsftpd s; ------------------------- ------------------------- #SELinux deny log: type=AVC msg=audit(1148486747.277:30): avc: denied { append } for pid=11761 comm="vsftpd" name="xferlog" dev=hda3 ino=163412 scontext=user_u:system_r:ftpd_t tcontext=system_u:object_r:var_log_t tclass=file #Suggested configuration File ftpd_t.sp: allow /var/log/xferlog w,r,s; ------------------------- .....様々な設定を追加しなければならないことが分かると思います。 なお、以下のように「#」から始まる行が提示されることがあります。
------------------------- #SELinux deny log: type=AVC msg=audit(1148486754.718:36): avc: denied { lock } for pid=11763 comm="vsftpd" name="test.txt" dev=hda3 ino=163311 scontext=user_u:system_r:ftpd_t tcontext=system_u:object_r:default_t tclass=file #Suggested configuration File ftpd_t.sp: #Failed to generate, because failed to obtain fullpath. #allow test.txt r,s; -------------------------これは、audit2spdlがtest.txtのフルパスを発見することに失敗したため、先頭 に#がついています。しかし、test.txtのフルパスは、/var/ftp/pub/test.txtで あることを読者は知っているので、
allow /var/ftp/pub/test.txt r,s;を追加すればいいことが分かります。 筆者の環境では、以下のような設定が提示されました。
allow /etc/vsftpd s; allow /var/log/xferlog w,r,s; allow /var/ftp/pub s; allow /var/ftp/pub/test.txt r,s; allownet -protocol tcp -port 21 server; allow /etc/vsftpd/vsftpd.conf r,s; allowpriv cap_sys_chroot; allow /var/ftp s; allow /var/log/xferlog r,s;これをそのまま追加してもいいのですが、冗長な設定があります。 例えば、/var/ftp、/etc/vsftpdはディレクトリ全体を読み込み許可すれば冗長 な設定を削れます。冗長な設定を削ると、ftpd_t.spは結局以下のようになりま す。
{ domain ftpd_t; program /usr/sbin/vsftpd; include common-relaxed.sp; include daemon.sp; include nameservice.sp; # added by audit2spdl suggestion allow /etc/vsftpd/** r,s; allow /var/ftp/** r,s; allow /var/log/xferlog r,w,s; allownet -protocol tcp -port 21 server; allowpriv cap_sys_chroot; }さて、seedit-loadコマンドで設定を反映し、vsftpdを再起動して、再度動作テ ストをしてみましょう。audit2spdl -alすると、 さらに以下のような設定が提示されるかもしれません。
allownet -protocol tcp -port 6353 server;これは、vsftpdがTCP 6553ポートを使ってサーバーとして振る舞おうとしている ことを言っています。が、ポート番号は毎回変わります。なので、以下のように 1024以上のポートを使えるよう設定します。
allownet -protocol tcp -port 1024- server;設定を反映し、さらにテスト動作を、アクセス拒否がでなくなるまで繰り返しま す。最後にenforcingモードにして、テストをして正しく動作することを確かめ ます。
#setenforce 1さて、ここまでの加方法で、概ね設定できるかと思います。 ログインユーザのセキュリティを高めるための機能として、SPDLはRBACもサポー トしています。RBACについては、「RBACガイド」を参照 してください。