ウェブサイト検索

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


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

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

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

ステップ 1: SSH Chroot ジェイルを作成する

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

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

ステップ 2: SSH Chroot Jail の対話型シェルをセットアップする

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. chrootjail の一般構成ディレクトリ /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. この時点で、chrootjail セットアップが期待どおりに機能しているかどうかをテストします。

ssh [email 
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname

上のスクリーンショットから、SSH ユーザーが chrooted 刑務所にロックされており、外部コマンド (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. 次に、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. 次に、上記のコマンドの共有ライブラリを確認し、それらを chrootedjail ライブラリ ディレクトリに移動します。

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 で特定のディレクトリ (chrootedjail) 内の SSH ユーザーを制限する方法を説明しました。このガイドについてのご意見がございましたら、以下のコメント セクションをご利用ください。