ネガティブACL
アクセス制御リストを設定することにより、ユーザーがファイルシステムの特定の部分にアクセスするのを防ぐことができます。たとえば、ユーザーabcd
が以下のファイルにアクセスできないようにするには/home
:
setfacl -m user:abcd:0 /home
このアプローチは簡単ですが、アクセスしたくないすべてのものへのアクセスをブロックすることを忘れないでabcd
ください。
クルート
表示できるものを確実に制御abcd
するには、chrootをセットアップします。つまり、ユーザーをファイルシステムのサブツリーに制限します。
chrootの下で、ユーザーが必要とするすべてのファイル(mysql
およびユーザーが実行できるようにする場合は、そのすべての依存関係)を作成する必要がありますmysql
。chrootへのパスは/home/restricted/abcd
; mysql
プログラムが利用できるの下にする必要があります/home/restricted/abcd
。シンボリックリンクルックアップはchroot jailの影響を受けるため、chrootの外側を指すシンボリックリンクは役に立ちません。Linuxでは、バインドマウントをうまく利用できます。
mount --rbind /bin /home/restricted/abcd/bin
mount --rbind /dev /home/restricted/abcd/dev
mount --rbind /etc /home/restricted/abcd/dev
mount --rbind /lib /home/restricted/abcd/lib
mount --rbind /proc /home/restricted/abcd/proc
mount --rbind /sbin /home/restricted/abcd/sbin
mount --rbind /sys /home/restricted/abcd/sys
mount --rbind /usr /home/restricted/abcd/usr
ファイルをコピーすることもできます(ただし、ファイルが最新のものであることに注意する必要があります)。
ユーザーをchrootに制限するには、にChrootDirectory
ディレクティブを追加し/etc/sshd_config
ます。
Match User abcd
ChrootDirectory /home/restricted/abcd
以下でテストできます:
chroot --userspec=abcd /home/restricted/abcd/ /bin/bash
セキュリティフレームワーク
SELinuxやAppArmorなどのセキュリティフレームワークを使用することもできます。どちらの場合も、穴を残さないようにするために、かなり繊細な構成を作成する必要があります。