第11章 ポリインスタンス化されたディレクトリーの設定
デフォルトでは、すべてのプログラム、サービス、およびユーザーは、一時ストレージとして /tmp
、/var/tmp
、およびホームディレクトリーを使用します。これにより、これらのディレクトリーは、競合状態攻撃やファイル名に基づく情報漏洩に対して脆弱になります。/tmp/
、/var/tmp/
、およびホームディレクトリーをインスタンス化して、これらがすべてのユーザー間で共有されないようにし、各ユーザーの /tmp-inst
および /var/tmp/tmp-inst が
/tmp
および /var/tmp
ディレクトリーに個別にマウントされるようにすることができます。
手順
SELinux でポリインスタンス化を有効にする:
# setsebool -P allow_polyinstantiation 1
getsebool allow_polyinstantiation
コマンドを入力すると、SELinux でポリインスタンス化が有効になっているかどうかを確認できます。必要な権限を使用して、再起動後もデータが永続的になるようにディレクトリー構造を作成します。
# mkdir /tmp-inst /var/tmp/tmp-inst --mode 000
SELinux ユーザー部分を含むセキュリティーコンテキスト全体を復元します。
# restorecon -Fv /tmp-inst /var/tmp/tmp-inst Relabeled /tmp-inst from unconfined_u:object_r:default_t:s0 to system_u:object_r:tmp_t:s0 Relabeled /var/tmp/tmp-inst from unconfined_u:object_r:tmp_t:s0 to system_u:object_r:tmp_t:s0
システムで
fapolicyd
アプリケーション制御フレームワークを使用している場合は、/etc/fapolicyd/fapolicyd.conf
設定ファイルでallow_filesystem_mark
オプションを有効にして、基礎となるファイルシステムがバインドマウントされているときに、fapolicyd
がファイルアクセスイベントを監視できるようにします。allow_filesystem_mark = 1
/tmp
、/var/tmp/
、およびユーザーのホームディレクトリーのインスタンス化を有効にします。重要pam_namespace_helper
プログラムは/etc/security/namespace.d
内の追加ファイルを読み取らないため、/etc/security/namespace.d/
ディレクトリー内の別のファイルではなく、/etc/security/namespace.conf
を使用します。マルチレベルセキュリティー (MLS) を備えたシステムでは、
/etc/security/namespace.conf
ファイルの最後の 3 行のコメントを解除します。/tmp /tmp-inst/ level root,adm /var/tmp /var/tmp/tmp-inst/ level root,adm $HOME $HOME/$USER.inst/ level
マルチレベルセキュリティー (MLS) のないシステムでは、
/etc/security/namespace.conf
ファイルに次の行を追加します。/tmp /tmp-inst/ user root,adm /var/tmp /var/tmp/tmp-inst/ user root,adm $HOME $HOME/$USER.inst/ user
セッションに
pam_namespace.so
モジュールが設定されていることを確認します。$ grep namespace /etc/pam.d/login session required pam_namespace.so
オプション: クラウドユーザーが SSH キーを使用してシステムにアクセスできるようにします。
-
openssh-keycat
パッケージをインストールします。 /etc/ssh/sshd_config.d/
ディレクトリーに次の内容のファイルを作成します。AuthorizedKeysCommand /usr/libexec/openssh/ssh-keycat AuthorizedKeysCommandRunAs root
sshd_config
のPubkeyAuthentication
変数がyes
に設定されているかどうかを確認して、公開鍵認証が有効になっていることを確認します。デフォルトでは、sshd_config
の行がコメントアウトされているにもかかわらず、PubkeyAuthentication
は yes に設定されています。$ grep -r PubkeyAuthentication /etc/ssh/ /etc/ssh/sshd_config:#PubkeyAuthentication yes
-
ポリインスタンス化を適用する各サービスのモジュールに、
セッションに必要な pam_namespace.so unmnt_remnt
エントリーを、セッションの include system-auth
行の後に追加します。たとえば、/etc/pam.d/su
、/etc/pam.d/sudo
、/etc/pam.d/ssh
、/etc/pam.d/sshd
の場合:[...] session include system-auth session required pam_namespace.so unmnt_remnt [...]
検証
- 非 root ユーザーとしてログインします。ポリインスタンス化が設定される前にログインしていたユーザーは、変更が有効になる前にログアウトしてログインする必要があります。
/tmp/
ディレクトリーが/tmp-inst/
の下にマウントされていることを確認します。$ findmnt --mountpoint /tmp/ TARGET SOURCE FSTYPE OPTIONS /tmp /dev/vda1[/tmp-inst/<user>] xfs rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota
SOURCE
出力は環境によって異なります。* 仮想システムでは、/dev/vda_<number>_
が表示されます。* ベアメタルシステムでは、/dev/sda_<number>_
または/dev/nvme*
が表示されます。
関連情報
-
/usr/share/doc/pam/txts/README.pam_namespace の
readme ファイルはpam
パッケージとともにインストールされます。