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