Apparmor + apac2, vsftpd

LINEで送る
Pocket

AppArmor (Application Armor) とは、Linux Security Modules の1つです。プログラム毎にセキュリティプロファイルを作成し、プログラムのできることに制限をかけることができます。CentOS が、デフォルトで SELinux を採用している反面、Ubuntu では Ubuntu の開発元カノニカルが AppArmor を開発しています。 root権限で動作している、プログラムにセキュリティホールが存在する場合、セキュリティホールを攻撃されるとroot権限を奪取され、システム全てにアクセスされる可能性があります。しかし、AppArmor を導入していれば、AppArmorのプロファイルに書かれた権限以外のアクセスが許可されないため、全てのシステムにアクセスされる事を防ぎます。

仕組みを理解する為に AppArmor で apache のアクセス制限をかけてみます。

apparmor と apache、apche のプロファイルテンプレートを以下のコマンドでインストールします。
$ sudo apt-get -y install apparmor apparmor-utils apache2 libapache2-mod-apparmor
アクセスを許可するディレクトリとindex.html を作成します。
$ sudo mkdir /var/www/html/safe/
$ sudo sh -c "echo safe >/var/www/html/safe/index.html"
アクセスを制限するディレクトリとindex.html を作成します。
$ sudo mkdir /var/www/html/unsafe/
$ sudo sh -c "echo unsafe >/var/www/html/unsafe/index.html"
apache の apparmor モジュールを有効にします。
$ sudo a2enmod apparmor
Enabling module apparmor.

apparmor モジュールを有効にすると /etc/apparmor.d/usr.sbin.apache2 が作成されるので 以下の2行を追記します。

[/etc/apparmor.d/usr.sbin.apache2]
        :
  ^DEFAULT_URI {
    #include <abstractions/base>
    #include <abstractions/apache2-common>

    / rw,
    /** mrwlkix,
    /var/www/html/safe/* r,                  <- 追記 (アクセス許可)
    deny /var/www/html/unsafe/* r,           <- 追記 (アクセス不許可)
  }

r : 読み取りモード
w : 書き込みモード
px : 個別のプロファイル実行モード
ux : 制約のない実行モード
ix : 継承による実行モード
l : リンクモード
k : ロックモード

apache を停止します。
$ sudo systemctl stop apache2.service
usr.sbin.apache2 の設定を有効にします。
$ sudo aa-enforce /etc/apparmor.d/usr.sbin.apache2
Setting /etc/apparmor.d/usr.sbin.apache2 to enforce mode.
apparmor を再起動します。
$ sudo systemctl restart apparmor.service
apache を起動します。
$ sudo systemctl start apache2.service

safe ディレクトリにある index.html ファイルは参照できますが、unsafe ディレクトリにある index.html ファイルは参照できないことが確認できます。


http://servername/safe/

http://servername/unsafe/
apparmo のステータスは以下のコマンドで確認できます。
$ sudo apparmor_status
         :
4 processes are in enforce mode.
         :
   /usr/sbin/apache2 (4917) 
   /usr/sbin/apache2//HANDLING_UNTRUSTED_INPUT (4920)
   /usr/sbin/apache2//HANDLING_UNTRUSTED_INPUT (4921)

確認すると、先ほど設定した apache が enforce というモードで動作している事がわかります。 apache は、プロファイルのテンプレートが用意されていましたが、テンプレートが用意されていないものもあります。 apparmo には、complain(学習) モードが存在し、システムログに学習結果を書き出し、 それを元にプロファイルを作成する事ができます。 試しに ftp サーバの vsftpd のプロファイルを作成してみましょう。 vsftpd は、以下のコマンドでインストールします。

$ sudo apt-get -y install vsftpd

プロファイルのテンプレートを作成します。

$ sudo aa-genprof /usr/sbin/vsftpd

実行すると /etc/apparmor.d/usr.sbin.vsftpd が作成されます。

vsftpd プロセスの学習を開始します。

$ sudo aa-complain /usr/sbin/vsftpd

ここで、ftp サーバにリモートログインして、ファイルをダウンロードしたり、 実際想定される運用操作を行います。apparmo は、それらの操作を学習します。 ですので、プロセスが起動時にどの設定ファイルを参照し、どこにログを書いているのかを 学習する必要があるので、サービスの再起動は必ず行って下さい。


vsftpd.service を再起動します。

$ sudo systemctl restart vsftpd.service

学習した内容を設定ファイルに反映します。 対話形式UIが起動するのでアクセスの許可、不許可を選択して保存します。

$ sudo aa-logprof
Reading log entries from /var/log/syslog.
Updating AppArmor profiles in /etc/apparmor.d.
Complain-mode changes:
            :
Profile:  /usr/sbin/vsftpd
Path:     /etc/vsftpd.conf                                        <- /etc/vsftpd.conf ファイルへの読み込み許可、A を選択します。
Mode:     r
Severity: unknown

 [1 - /etc/vsftpd.conf]
[(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore

complain モードから enforce へ移行します。

$ sudo aa-enforce /etc/apparmor.d/usr.sbin.vsftpd

これで、許可した以外の操作が禁止されます。

LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください