Chroot刑務所を使用してSSHユーザーアクセスをホームディレクトリに制限する
特にウェブサーバー上では、SSHユーザーセッションを特定のディレクトリに制限する理由はいくつかありますが、明白な理由はシステムのセキュリティです。SSHユーザーを特定のディレクトリにロックするために、chrootメカニズムを使用できます。
Unix系システム(Linuxなど)におけるルートの変更(chroot)とは、特定のユーザー操作をLinuxシステムの残りの部分から分離する手段です。これは、現在実行中のユーザープロセスおよびその子(親)プロセスの見かけ上のルートディレクトリを、新しいルートディレクトリであるchrooted jailに変更します。
このチュートリアルでは、LinuxでSSHユーザーのアクセスを特定のディレクトリに制限する方法を示します。すべてのコマンドはrootユーザーとして実行しますので、通常のユーザーとしてサーバーにログインしている場合はsudoコマンドを使用してください。
ステップ1:SSHのチュルートジェイルを作成する
1. 以下のmkdirコマンドを使用してchrootジャイルを作成します:
# mkdir -p /home/test
2. 次に、必要なファイルを特定します。sshd_configのマニュアルページによれば、ChrootDirectoryオプションは、認証後にchrootするディレクトリのパス名を指定します。そのディレクトリには、ユーザーのセッションをサポートするために必要なファイルとディレクトリが含まれていなければなりません。
インタラクティブセッションには、少なくともシェル(一般的にはsh)と、null、zero、stdin、stdout、stderr、ttyデバイスなどの基本的な/devノードが必要です。
# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
3. 次に、mknodコマンドを使用して次のように/devファイルを作成します。以下のコマンドでは、-mフラグがファイルのパーミッションビットを指定するために使用され、cはキャラクタファイルを意味し、2つの数字はファイルが指すメジャーとマイナー番号です。
# mkdir -p /home/test/dev/
cd /home/test/dev/
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8
4. その後、chrootジャイルに適切な権限を設定します。chrootジャイルとそのサブディレクトリおよびサブファイルはrootユーザーが所有し、通常のユーザーやグループが書き込みできないようにする必要があります:
# chown root:root /home/test
chmod 0755 /home/test
ls -ld /home/test
ステップ2: SSH Chroot ジェイルのためのインタラクティブシェルを設定する
5. 最初に、bin ディレクトリを作成し、次に /bin/bash ファイルを bin ディレクトリに cp コマンドを使って次のようにコピーします:
# mkdir -p /home/test/bin
cp -v /bin/bash /home/test/bin/
6. 次に、共有 libs のために必要な bash を特定し、以下のようにそれらを lib ディレクトリにコピーします:
# ldd /bin/bash
mkdir -p /home/test/lib64
cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
ステップ3:SSHユーザーの作成と設定
7. 次に、useraddコマンドを使用してSSHユーザーを作成し、そのユーザーに対して安全なパスワードを設定します。
# useradd tecmint
passwd tecmint
8. chrootジャイルの一般設定ディレクトリ、/home/test/etcを作成し、更新されたアカウントファイル(/etc/passwdと/etc/group)を次のようにこのディレクトリにコピーします:
# mkdir /home/test/etc
cp -vf /etc/{passwd,group} /home/test/etc/
ステップ4: Chroot Jailを使用するようにSSHを構成する
9. では、sshd_configファイルを開いてください。
# vi /etc/ssh/sshd_config
ファイル内の下記の行を追加または変更します。
#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
ファイルを保存して終了し、SSHDサービスを再起動します:
# systemctl restart sshd
OR
service sshd restart
ステップ5: Chroot Jailを使用したSSHのテスト
10. この時点で、chroot ジェイルの設定が期待通りに機能しているかテストします:
# ssh [email
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
上のスクリーンショットから、SSHユーザーがchrootされた監獄に閉じ込められており、外部コマンド(ls、date、unameなど)を実行できないことがわかります。
ユーザーは、以下に示すように、bashとその組み込みコマンド(pwd、history、echoなど)のみを実行できます。
# ssh [email
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
ステップ6. SSHユーザーのホームディレクトリを作成し、Linuxコマンドを追加する
11. 前のステップから、ユーザーがルートディレクトリにロックされていることがわかります。SSHユーザーのためにホームディレクトリを作成できます。これを今後のすべてのユーザーに対して実行してください。
# mkdir -p /home/test/home/tecmint
chown -R tecmint:tecmint /home/test/home/tecmint
chmod -R 0700 /home/test/home/tecmint
12. 次に、bin ディレクトリに ls、date、mkdir などのいくつかのユーザーコマンドをインストールします:
# cp -v /bin/ls /home/test/bin/
cp -v /bin/date /home/test/bin/
cp -v /bin/mkdir /home/test/bin/
13. 次に、上記のコマンドのために共有ライブラリを確認し、それらをchrootされたジャイルライブラリディレクトリに移動します:
# ldd /bin/ls
cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
ステップ7. Chroot Jailを使用したSFTPのテスト
14. sftpを使用して最終テストを行い、インストールしたコマンドが正常に動作しているか確認してください。
/etc/ssh/sshd_configファイルに以下の行を追加してください:
#Enable sftp to chrooted jail
ForceCommand internal-sftp
ファイルを保存して終了します。その後、SSHDサービスを再起動します:
# systemctl restart sshd
OR
service sshd restart
15. さて、SSHを使用してテストします。次のエラーが表示されます:
# ssh [email
次のようにSFTPを使用してみてください:
# sftp [email
今回はここまでです!この記事では、Linuxで特定のディレクトリ(chroot環境)にSSHユーザーを制限する方法を紹介しました。このガイドについての感想を下のコメント欄でお知らせください。













