別の端末を立ち上げて、test1.shを実行します。
1 |
$ ~/test1.sh |
本来は、いろいろな場合を考えて複数の動作を試しますが、test1.shはホームディレクトリー内の「test.txt」ファイルに「Hello!」を追記するだけなので1パターンで構いません。
aa-genprofコマンドを実行した端末に戻って、[F]キーを押します。これで、ひな型となるプロファイルが作成され、作成されたプロファイルがenforceモードになります。
1 2 3 4 5 6 7 8 9 |
Setting /home/ユーザー名/test1.sh to enforce mode. Reloaded AppArmor profiles in enforce mode. Please consider contributing your new profile! See the following wiki page for more information: http://wiki.apparmor.net/index.php/Profiles Finished generating profile for /home/ユーザー名/test1.sh. |
ひな型のプロファイルを確認します。/etc/apparmor.dディレクトリー内に、パスの「/」を「.」に変更した名前のファイルで格納されています。「/home/ユーザー名/test1.sh」に対するプロファイルは「home.ユーザー名.test1.sh」になります。「cat」コマンドで中身を確認してみると、
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo cat /etc/apparmor.d/home.ユーザー名.test1.sh # Last Modified: Tue Nov 20 13:25:05 2018 #include <tunables/global> /home/ユーザー名/test1.sh { #include <abstractions/base> #include <abstractions/bash> /bin/bash ix, /home/ユーザー名/test1.sh r, } |
になっています。「#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,」です。
1 2 3 4 5 6 7 8 9 10 11 12 |
# Last Modified: Tue Nov 20 13:25:05 2018 #include <tunables/global> /home/ユーザー名/test1.sh { #include <abstractions/base> #include <abstractions/bash> /bin/bash ix, /home/ユーザー名/test1.sh r, /home/ユーザー名/test.txt r, } |
サンプルプログラムを実行し、test.txtの書き込みが禁止されることを確認しましょう。
1 2 |
$ ./test1.sh ./test1.sh: 行 3: test.txt: 許可がありません |
「許可がありません」という表示になってtest.txtファイルに書き込めないようになりました。
インターネット上に公開しているサーバーでは、不正アクセスや不正進入のターゲットになることが多いので強制アクセス制御は重要なセキュリティ対策となっています。ちなみに、CentOSでは別の「SELinux」が標準となっています。
次回は、サーバーの電源を守る「UPS」(無停電電源装置)を扱います。
written by シェルスクリプトマガジン編集部(あ)