パート1「Linuxchrootjailの設定方法」では、chroot
について説明しました。 コマンドを実行し、sshd
でchrootラッパーの使用方法を学習しました sftpusers
を分離する グループ。 sshd_config
を編集する場合 chrootラッパーを呼び出して、それに一致する特性を与えるには、sshd
chrootjailまたはラッパー内で特定のコマンドを実行します。この手法が、リモートユーザーに安全ではなく、封じ込められたアクセスを実装するのにどのように役立つ可能性があるかを見てきました。
拡張例
部分的にレビューとして、以前に行ったことを拡張することから始めます。まず、リモートユーザー用のカスタムディレクトリを設定します。 sftpusers
を使用します もう一度グループ化します。
使用するカスタムディレクトリを作成し、所有権を設定することから始めます。
# mkdir -p /sftpusers/chroot
# chown root:root /sftpusers/chroot
今回は、sftpusers
ではなく、rootを所有者にします グループ。このように、ユーザーを追加するときに、ユーザーはディレクトリ全体を表示する権限を持って開始することはありません。
次に、制限するユーザーを作成し(この場合はユーザーごとにこれを行う必要があります)、新しいユーザーをsftpusers
に追加します。 これらはsftp
であるため、グループ化し、ログインシェルを拒否します ユーザー:
# useradd sanjay -g sftpusers -s /sbin/nologin
# passwd sanjay
次に、sanjay
のディレクトリを作成します 所有権と権限を設定します:
# mkdir /sftpusers/chroot/sanjay
# chown sanjay:sftpusers /sftpusers/chroot/sanjay
# chmod 700 /sftpusers/chroot/sanjay
次に、sshd_config
を編集します ファイル。まず、既存のサブシステム呼び出しをコメントアウトし、内部サブシステム呼び出しを追加します。
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
次に、マッチケースエントリを追加します:
Match Group sftpusers
ChrootDirectory /sftpusers/chroot/
ForceCommand internal-sftp
X11Forwarding no
AllowTCPForwarding no
ディレクトリの指定に戻ったことに注意してください。ただし、今回は、sanjay
を防ぐために所有権をすでに設定しています。 他の誰かのものを見ることから。その末尾の/
次に、sshd
を再起動します とテスト:
[skipworthy@milo ~]$ sftp sanjay@showme
sanjay@showme's password:
Connected to sanjay@showme.
sftp> ls
sanjay
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
sanjay
sftp> touch test
Invalid command.
それで。 Sanjayは自分のフォルダしか見ることができず、cd
する必要があります 何か役に立つことをするためにそれに。
サービスまたは特定のユーザーを分離する
では、リモートユーザーに使用可能なシェル環境を提供したり、特定のサービスにchrootjail環境を作成したりする場合はどうでしょうか。これを行うには、jailedディレクトリとルートファイルシステムを作成してから、必要なツールとライブラリへのリンクを作成します。これらすべてを行うのは少し複雑ですが、RedHatはプロセスを簡単にするスクリプトと基本的な手順を提供します。
注: 私はRedHatEnterprise Linux 7および8で以下をテストしましたが、この機能はRed Hat Enterprise Linux 6で利用可能であると理解していますが、このスクリプトがFedora、CentOS、またはその他で機能しないと考える理由はありません。 Red Hatのディストリビューションですが、マイレージは(いつものように)異なる場合があります。
まず、chrootディレクトリを作成します:
# mkdir /chroot
次に、yum
からスクリプトを実行します 必要なビットをインストールします:
# yum --releasever=/ --installroot=/chroot install iputils vim python
--releasever=/
フラグは、現在のローカルリリース情報を渡して、新しい--installroot
のリポジトリを初期化します。 、新しいインストール場所がどこにあるかを定義します。理論的には、yumまたはdnfリポジトリの任意のバージョンに基づいたchroot jailを作成できます(ただし、スクリプトは現在のシステムリポジトリで開始されます)。
このツールを使用して、VIMエディタやPythonなどの基本的なネットワークユーティリティをインストールします。必要に応じて、この刑務所内で実行したいサービスなど、他のものを最初に追加することができます。これは、yum
の優れた点の1つでもあります。 と依存関係。依存関係の解決の一環として、yum
ライブラリとともにファイルシステムツリーに必要な追加を行います。ただし、次に追加する必要のあるものがいくつか省略されています。すぐにわかります。
これで、パッケージと依存関係がインストールされ、この新しいルートファイルシステムに関連して、この新しいリポジトリ用に新しいGPGキーが作成されました。次に、エフェメラルファイルシステムをマウントします:
# mount -t proc proc /chroot/proc/
# mount -t sysfs sys /chroot/sys/
そして、開発バインディングを設定します:
# mount -o bind /dev/pts /chroot/dev/pts
# mount -o bind /dev/pts /chroot/dev/pts
これらのマウントはないことに注意してください この方法で再起動しても存続しますが、この設定により、chrootjail環境でテストして遊ぶことができます。
次に、テストして、期待どおりにすべてが機能していることを確認します。
# chroot /chroot
bash-4.2# ls
bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
ファイルシステムとライブラリが正常に追加されたことがわかります:
bash-4.2# pwd
/
bash-4.2# cd ..
ここから、正しいルートが表示され、上に移動できません:
bash-4.2# exit
exit
#
これで、chrootラッパーが終了しました。これは、ローカルログインシェルからrootとして入力したためです。通常、sftp
で見たように、リモートユーザーはこれを実行できないはずです。 例:
[skipworthy@milo ~]$ ssh root@showme
root@showme's password:
[root@showme1 ~]# chroot /chroot
bash-4.2#
これらのディレクトリはすべてrootによって作成されたため、所有者はrootであることに注意してください。次に、このchrootをsshd_config
に追加します 、今回はこのユーザーだけに一致するため:
Match User leo
ChrootDirectory /chroot
次に、sshd
を再起動します 。
/etc/passwd
もコピーする必要があります および/etc/group
ホストシステムから/chroot
へのファイル ディレクトリ:
[root@showme1 ~]# cp -vf /etc/{passwd,group} /chroot/etc/
注: 上記の手順をスキップすると、ログインできますが、結果の信頼性が低くなり、ログインの競合に関連するエラーが発生する可能性があります
次にテストを行います:
[skipworthy@milo ~]$ ssh leo@showme
leo@showme's password:
Last login: Thu Jan 30 19:35:36 2020 from 192.168.0.20
-bash-4.2$ ls
-bash-4.2$ pwd
/home/leo
よさそうだ。さて、あなたは何か役に立つことを見つけることができますか?楽しみましょう:
[root@showme1 ~]# yum --releasever=/ --installroot=/chroot install httpd
できた releasever=/
を削除します 、ただし、予期しない結果が生じる可能性が少ないため、そのままにしておきます。
[root@showme1 ~]# chroot /chroot
bash-4.2# ls /etc/httpd
conf conf.d conf.modules.d logs modules run
bash-4.2# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)
つまり、httpd
必要に応じてありますが、デモンストレーションのために、Pythonの簡単なワンライナーを使用することもできます。これもインストールしました:
bash-4.2# python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...
これで、chrootjailで実行されている単純なWebサーバーができました。理論的には、chroot jail内から任意の数のサービスを実行し、それらを「封じ込め」て他のサービスから遠ざけることができるため、ユーザーエクスペリエンスを損なうことなく、より大きなリソース環境の一部のみを公開できます。
Linuxコンテナは初めてですか? Containers Primerをダウンロードして、基本を学びましょう。