AppArmor は強制アクセス制御または MAC システムです。
Linux Security Module を使用してプログラムを制限します。 AppArmor は、Linux サービスを保護するために既定のアプリケーション プロファイルのコレクションを設定します。
プロファイル ファイルを自分で作成することにより、システムで実行されている他のアプリケーションを保護することもできます。
Ubuntu では、AppArmor がデフォルトでインストールされ、有効になっています。システムの起動時に apparmor プロファイルが読み込まれます。
AppArmor は次の 2 種類のプロファイル モードで動作します:
追加のプロファイルは apparmor-profiles パッケージにあります。
Apparmor ステータスを表示
以下に示すように、apparmor の現在のステータスと読み込まれたすべてのプロファイルを表示できます。
$ sudo apparmor_status apparmor module is loaded. 5 profiles are loaded. 5 profiles are in enforce mode. /sbin/dhclient /usr/lib/NetworkManager/nm-dhcp-client.action /usr/lib/connman/scripts/dhclient-script /usr/sbin/mysqld /usr/sbin/tcpdump 0 profiles are in complain mode. 2 processes have profiles defined. 2 processes are in enforce mode. /sbin/dhclient (585) /usr/sbin/mysqld (799) 0 processes are in complain mode. 0 processes are unconfined but have a profile defined.
上記の出力を確認すると、5 つのプロファイルが強制モードになっていることがわかります。
これは、現在 2 つのプロセスが強制モードで実行されていることも示しています (プロファイルのため)。たとえば、PID が 585 の /sbin/dhclient は強制モードで実行されています。
プロフィール モードの変更
プロファイルを不平モードに設定するには、apparmor-utils パッケージがまだインストールされていない場合は、最初にインストールしてください。
apt-get install apparmor-utils
aa-complain コマンドを使用して、プロファイルを苦情モードに設定します。たとえば、mysqld の苦情モードを有効にするには、次のようにします。
$ sudo aa-complain /usr/sbin/mysqld Setting /usr/sbin/mysqld to complain mode.
apparmor_status を実行すると、mysqld が不平モードになっていることがわかります。
$ sudo apparmor_status apparmor module is loaded. 5 profiles are loaded. 4 profiles are in enforce mode. /sbin/dhclient /usr/lib/NetworkManager/nm-dhcp-client.action /usr/lib/connman/scripts/dhclient-script /usr/sbin/tcpdump 1 profiles are in complain mode. /usr/sbin/mysqld 2 processes have profiles defined. 1 processes are in enforce mode. /sbin/dhclient (585) 1 processes are in complain mode. /usr/sbin/mysqld (799) 0 processes are unconfined but have a profile defined.
以下に示すように、aa-enforce コマンドを使用して、プロファイルを強制モードに戻すことができます。
$ sudo aa-enforce /usr/sbin/mysqld Setting /usr/sbin/mysqld to enforce mode.
AppArmor プロファイル ファイル
AppArmor プロファイルは、/etc/apparmor.d/ ディレクトリにあるテキスト ファイルです。
ファイルは、プロファイリングする実行可能ファイルへのフル パスに基づいて名前が付けられますが、「/」は「.」に置き換えられます。
たとえば、ping コマンドは /bin/ping にあります。同等の AppArmor プロファイル ファイルは bin.ping という名前になります
以下は、usr.sbin.mysqld の Apparmor プロファイル ファイルです。 /usr/sbin/mysqld は、このプロファイルが適用されるバイナリの絶対パスです。
# cat usr.sbin.mysqld # vim:syntax=apparmor # Last Modified: Tue Jun 19 17:37:30 2007 #include <tunables/global> /usr/sbin/mysqld { #include <abstractions/base> #include <abstractions/nameservice> #include <abstractions/user-tmp> #include <abstractions/mysql> #include <abstractions/winbind> capability dac_override, capability sys_resource, capability setgid, capability setuid, network tcp, /etc/hosts.allow r, /etc/hosts.deny r, /etc/mysql/*.pem r, /etc/mysql/conf.d/ r, /etc/mysql/conf.d/* r, /etc/mysql/*.cnf r, /usr/lib/mysql/plugin/ r, /usr/lib/mysql/plugin/*.so* mr, /usr/sbin/mysqld mr, /usr/share/mysql/** r, /var/log/mysql.log rw, /var/log/mysql.err rw, /var/lib/mysql/ r, /var/lib/mysql/** rwk, /var/log/mysql/ r, /var/log/mysql/* rw, /var/run/mysqld/mysqld.pid rw, /var/run/mysqld/mysqld.sock w, /run/mysqld/mysqld.pid rw, /run/mysqld/mysqld.sock w, /sys/devices/system/cpu/ r, # Site-specific additions and overrides. See local/README for details. #include <local/usr.sbin.mysqld> }
プロファイル ファイルでは、コメントは常に # 記号で始まります。 #include 行がファイルをロードします。
以下は、プロファイルで使用されるさまざまなタイプのルールです。
<オール>中括弧 {} 内には、他の include ステートメントがあり、アクセス許可/モード [read(r)/write (w)/execute (x) (k) lock (requires r or w、AppArmor 2.1 以降)] も含まれています。さまざまなファイルとディレクトリには、中かっこ {} で囲まれた include ステートメントの正規表現グロビングが含まれており、Novell AppArmor プロファイルのコンポーネントをロードするのに役立ちます。
AppArmor を無効にする
一部のプロセスが期待どおりに動作している場合、および apparmor プロファイルがその理由であるかどうかをデバッグしたい場合は、デバッグのために apparmor を一時的に無効にすることをお勧めします。
# /etc/init.d/apparmor stop * Clearing AppArmor profiles cache [OK]
上記のコマンドを実行すると、プロファイル キャッシュのみがクリアされます。プロファイルをアンロードするには、次のコマンドを実行します。
# /etc/init.d/apparmor teardown * Unloading AppArmor profiles [OK]