Chrooted Jail を使用して特定のディレクトリへの SSH ユーザーアクセスを制限する方法

SSHユーザーセッションを特定のディレクトリに制限する理由はいくつかありますが、特にWebサーバーではシステムセキュリティが顕著です。特定のディレクトリにSSHユーザーをロックするために、chrootメカニズムを使用できます。

Unix系システム(Linuxなど)でのルートディレクトリの変更(chroot)は、特定のユーザー操作をLinuxシステムの残りから分離する手段です。現在実行中のユーザープロセスとその子(親)プロセスに新しいルートディレクトリであるchrooted jailと呼ばれる新しいルートディレクトリを設定します。

このチュートリアルでは、Linuxで特定のディレクトリへのSSHユーザーアクセスを制限する方法を紹介します。すべてのコマンドはrootとして実行することに注意してください。サーバーに通常のユーザーとしてログインしている場合は、sudoコマンドを使用してください。

1. 以下のmkdirコマンドを使用して、chroot jailを作成します。

1.次のmkdirコマンドを使用してchroot jailを作成することから始めます:

# mkdir -p /home/test

2.次に、sshd_configのマニュアルページに従って、必要なファイルを特定します。ChrootDirectoryオプションは、認証後にchrootするパス名を指定します。このディレクトリは、ユーザーのセッションをサポートするために必要なファイルとディレクトリを含んでいる必要があります。

インタラクティブなセッションの場合、少なくともシェル(一般的にsh)と基本的な/devノード(null、zero、stdin、stdout、stderr、ttyデバイスなど)が必要です:

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
Listing Required Files

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
Create /dev and Required Files

4.その後、chroot jailに適切なアクセス許可を設定します。chroot jailおよびそのサブディレクトリとサブファイルは、rootユーザーによって所有され、通常のユーザーやグループによって書き込み可能であってはならないことに注意してください:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Set Permissions on Directory

ステップ2:SSH Chroot Jailのインタラクティブシェルの設定

5.まず、binディレクトリを作成し、次にcpコマンドを使用して/bin/bashファイルをbinディレクトリにコピーします。以下のように実行します。

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
Copy Files to bin Directory

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/
Copy Shared Library Files

ステップ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/
Copy Password Files
Note: Each time you add more SSH users to the system, you will need to copy the updated account files into the /home/test/etc directory.

ステップ4: SSHのchrootジェイル使用設定

9.次に、sshd_configファイルを開きます。

# vi /etc/ssh/sshd_config

そして、ファイル内の以下の行を追加/変更します。

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
Configure SSH Chroot Jail

ファイルを保存して終了し、SSHDサービスを再起動します。

# systemctl restart sshd
OR
# service sshd restart

ステップ5: Chrootジェイルを使用したSSHのテスト

10.この時点で、chroot jailの設定が期待どおりに機能しているかテストしてください:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Testing SSH User Chroot Jail

上記のスクリーンショットから、SSHユーザーがchroot jailに閉じ込められており、外部コマンド(lsdateunameなど)を実行できないことがわかります。

ユーザーはbashとその組み込みコマンド(pwdhistoryechoなど)のみ実行できます。以下の通りです。

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
SSH Built-in Commands

ステップ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
Create SSH User Home Directory

12.次に、lsdatemkdirなどのユーザーコマンドをbinディレクトリにインストールします。

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
Add Commands to SSH User

13.次に、上記のコマンドの共有ライブラリを確認し、chroot jailライブラリディレクトリに移動します。

# 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/
Copy Shared Libraries

ステップ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 protected]
Test SSH Chroot Jail

以下のようにSFTPを使用してみてください。

# sftp [email protected]
Testing sFTP SSH User

以上です!この記事では、Linuxで特定のディレクトリ(chroot jail)にSSHユーザーを制限する方法を紹介しました。このガイドについてのご意見を以下のコメントセクションでお寄せください。

Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/