シェルスクリプトマガジン

第26回 アクセスを制限する(AppArmor)

別の端末を立ち上げて、test1.shを実行します。

本来は、いろいろな場合を考えて複数の動作を試しますが、test1.shはホームディレクトリー内の「test.txt」ファイルに「Hello!」を追記するだけなので1パターンで構いません。

aa-genprofコマンドを実行した端末に戻って、[F]キーを押します。これで、ひな型となるプロファイルが作成され、作成されたプロファイルがenforceモードになります。

ひな型のプロファイルを確認します。/etc/apparmor.dディレクトリー内に、パスの「/」を「.」に変更した名前のファイルで格納されています。「/home/ユーザー名/test1.sh」に対するプロファイルは「home.ユーザー名.test1.sh」になります。「cat」コマンドで中身を確認してみると、

になっています。「#include」で始まる部分は、AppArmorのモジュールを読み込んでいます。「/home/ユーザー名/test1.sh {」と「}」の間にあるものがtest1.shに適用される強制アクセス制御に関する設定です。「/bin/bash ix,」では、Bashを起動する「/bin/bash」コマンドの実行継承(ix)を許可しています。つまり、Bashで起動したシェルの子プロセスとしてtest1.shを実行できます。「/home/ユーザー名/test1.sh r,」では、「/home/ユーザー名/test1.sh」ファイルの読み出し(r)を許可しています。test1.shを実行するには、test1.shの中身を読んでシェルがコマンドを解釈する必要があります。

ここで、test.txtファイルに対して読み出しのみ許可にする設定を次のように追加します。追加した設定は「/home/ユーザー名/test.txt r,」です。

サンプルプログラムを実行し、test.txtの書き込みが禁止されることを確認しましょう。

「許可がありません」という表示になってtest.txtファイルに書き込めないようになりました。

最後に

インターネット上に公開しているサーバーでは、不正アクセスや不正進入のターゲットになることが多いので強制アクセス制御は重要なセキュリティ対策となっています。ちなみに、CentOSでは別の「SELinux」が標準となっています。
次回は、サーバーの電源を守る「UPS」(無停電電源装置)を扱います。

written by シェルスクリプトマガジン編集部(あ)