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}

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 jailに適切なアクセス許可を設定します。chroot jailおよびそのサブディレクトリとサブファイルは、rootユーザーによって所有され、通常のユーザーやグループによって書き込み可能であってはならないことに注意してください:
# chown root:root /home/test # chmod 0755 /home/test # ls -ld /home/test

ステップ2:SSH Chroot Jailのインタラクティブシェルの設定
5.まず、bin
ディレクトリを作成し、次にcpコマンドを使用して/bin/bash
ファイルをbin
ディレクトリにコピーします。以下のように実行します。
# 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/

/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

ファイルを保存して終了し、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

上記のスクリーンショットから、SSHユーザーがchroot jailに閉じ込められており、外部コマンド(ls、date、unameなど)を実行できないことがわかります。
ユーザーはbashとその組み込みコマンド(pwd、history、echoなど)のみ実行できます。以下の通りです。
# ssh [email protected] -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.次に、ls、date、mkdirなどのユーザーコマンドをbin
ディレクトリにインストールします。
# cp -v /bin/ls /home/test/bin/ # cp -v /bin/date /home/test/bin/ # cp -v /bin/mkdir /home/test/bin/

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/

ステップ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]

以下のようにSFTPを使用してみてください。
# sftp [email protected]

以上です!この記事では、Linuxで特定のディレクトリ(chroot jail)にSSHユーザーを制限する方法を紹介しました。このガイドについてのご意見を以下のコメントセクションでお寄せください。
Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/