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 プロファイルを修正する必要があります (たとえば、間違ったパスを修正するなど)。