ChrootedJailを使用してSSHユーザーアクセスを特定のディレクトリに制限する


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

LinuxなどのUnixライクなシステムでrootを変更(chroot)することは、特定のユーザー操作をLinuxシステムの他の部分から分離する手段です。現在実行中のユーザープロセスとその子プロセスの見かけのルートディレクトリを、chrootされたjailと呼ばれる新しいルートディレクトリに変更します。

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

ステップ1:SSH ChrootJailを作成する

1.以下のmkdirコマンドを使用してchrootjailを作成することから始めます。

# 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.その後、chrootjailに適切な権限を設定します。 chroot jailとそのサブディレクトリおよびサブファイルは、rootユーザーが所有している必要があり、通常のユーザーまたはグループが書き込みできないことに注意してください。

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test

ステップ2:SSH ChrootJail用のインタラクティブシェルをセットアップする

5.まず、 bin ディレクトリを作成してから、次のように/bin/bash ファイルを bin ディレクトリにコピーします。

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/

6.次に、bashに必要な共有 libs を以下のように特定し、それらを 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. chrootjailの一般構成ディレクトリ/home/test/etc を作成し、更新されたアカウントファイル(/ etc/passwdおよび/ etc/group)を次のようにこのディレクトリにコピーします。

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/

注:SSHユーザーをシステムに追加するたびに、更新されたアカウントファイルを/home/test/etc ディレクトリにコピーする必要があります。

ステップ4:ChrootJailを使用するように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:ChrootJailを使用したSSHのテスト

10.この時点で、chrootjailセットアップが期待どおりに機能しているかどうかをテストします。

# 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.ChrootJailを使用した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ユーザーを制限する方法を説明しました。以下のコメントセクションを使用して、このガイドについての考えをお聞かせください。