ウェブサイト検索

Ubuntu で特定の AppArmor プロファイルを無効にする方法


質問: システム全体で AppArmor を完全に無効にするのではなく、特定のサービスまたはソフトウェアに対してのみ AppArmor を無効にすることはできますか?

SELinux の代替と考えられている AppArmor は、Ubuntu のデフォルトのアプリケーション アクセス制御システムです。多くの Ubuntu パッケージ (libvirt、MySQL など) には、インストールされるプログラムの機能を制限する、対応する AppArmor プロファイルが付属しています。

AppArmor が特定のソフトウェアに干渉していると疑われる場合は、トラブルシューティングの一環として AppArmor プロファイルを無効にしてみてください。ここでは特定のAppArmor プロファイルを無効にする方法を説明します。

現在の AppArmor ステータスを確認する

現在の AppArmor ステータスを確認するには、aa-status コマンドを使用します。


$ sudo aa-status 

apparmor module is loaded.
24 profiles are loaded.
24 profiles are in enforce mode.
   /sbin/dhclient
   /usr/sbin/tcpdump
   .....
0 profiles are in complain mode.
6 processes have profiles defined.
6 processes are in enforce mode.
   /sbin/dhclient (1599) 
   .....
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

特定の AppArmor プロファイルを一時的に無効にする

特定の AppArmor プロファイルを無効にするには、まず AppArmor プロファイルの名前を特定します。既存の AppArmor プロファイルはすべて /etc/apparmor.d/ にあります。

この例では、tcpdump の AppArmor プロファイルを選択します。

tcpdump の AppArmor プロファイル (AppArmor プロファイル名は usr.sbin.tcpdump) を一時的に無効にするには、次のコマンドを実行します。この変更はシステムを再起動すると失われます。


$ sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.tcpdump

AppArmor プロファイルを再度有効にするには、次のコマンドを実行します。


$ sudo apparmor_parser /etc/apparmor.d/usr.sbin.tcpdump

特定の AppArmor プロファイルを永続的に無効にする

AppArmor プロファイルを永続的に無効にする場合は、次のコマンドを使用します。


$ sudo ln -s /etc/apparmor.d/usr.sbin.tcpdump /etc/apparmor.d/disable/
$ sudo /etc/init.d/apparmor restart

この時点で、AppArmor は tcpdump に対して無効になっています。 AppArmor のステータスを再実行して確認できます。


$ sudo aa-status 

tcpdump が強制モードにリストされなくなっていることがわかります。

tcpdump の AppArmor を再度有効にして元の強制状態に戻すには、次の手順を実行します。


$ sudo rm /etc/apparmor.d/disable/usr.sbin.tcpdump
$ sudo /etc/init.d/apparmor restart

注: システム全体で AppArmor を完全に無効にしたり、特定の AppArmor プロファイルを永続的に無効にしたりすることは得策ではありません。 AppArmor プロファイルの無効化は、トラブルシューティング中の一時的な手段として行う必要があります。 AppArmor が特定のソフトウェアと干渉していることがわかった場合は、永久にオフにするのではなく、対応する AppArmor プロファイルを修正する必要があります (たとえば、間違ったパスを修正するなど)。

関連記事: