用語chrootjail 1992年に、著名なセキュリティ研究者であるBill Cheswickによる記事で最初に使用されました(この種のことに興味がある場合は、ここで記事を見つけることができます)。 Chroot刑務所は、IRCやFTPなどのアプリケーションで2003年に登場し始めました。 2005年、Sunはゾーンと呼ばれる「コンテナ」テクノロジーを導入しました。これは、名前空間の概念の前身でした。 、これはコンテナで使用されるコアテクノロジーです。
Chrootの基本
Chrootを使用すると、管理者は、基盤となるサーバー環境への公開を制御しながら、サービスまたはファイルシステムへのアクセスを制御できます。発生する可能性のある2つの一般的な例は、Red Hat / CentOS /FedoraシステムとSecureFTP(SFTP)での起動シーケンスと「緊急シェル」です。
コマンドは次のようになります:
chroot <newroot> [[command][arguments]]
sudo
に似ています コマンド、chroot
コマンドは、次のコマンドの環境を変更します。つまり、newroot
に変更されます ディレクトリを作成し、そのディレクトリを「作業」ディレクトリにします。 command
次に、その場所で実行されます。これは、起動しないシステムを救助する場合などに役立ちます。
sudo
とは異なり 、ディレクトリに「入り」ます。この方法も、外部メディアから起動しているが、作業を行うために「ローカル」ファイルシステムまたはコマンドにアクセスする必要がある場合に役立ちます。
chroot
の他の一般的な使用法 ラッパーを使用してサービスまたはユーザーを制限することです ファイルシステムの残りの部分を非表示にするため、リモートユーザーによる他のユーザーのデータの表示を制限します。このアプローチSFTPを使用した一般的な実装。
この例の作業を開始する前に、バックアップがあることを確認する必要があります。この場合、/etc/ssh/sshd_config
をバックアップします 特にファイルに変更を加えるため、ファイル:
[root@showme1 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
今のところ、SFTPユーザーをサーバー上のホームディレクトリにのみ制限します。この要件は、ユーザーを追加してグループに入れる必要があることを意味します:
[root@showme1 ~]# useradd -g sftpusers -s /sbin/nologin -p nick nick
これを行うと、nick
が割り当てられることに注意してください ログインシェルのないアカウント。この手法は実用的であり、優れたセキュリティプラクティスでもあります。SFTPを使用しているだけの場合は、ログイン権限を持ってはいけません。次の記事では、リモートユーザーにシェルを提供する方法について説明します。
ここで、ssh
に指示する必要があります SFTPユーザーがログインしたときに何をするかをサービスします。/etc/ssh/sshd_config
を開きます ファイルを作成し、最後に以下を追加します:
Subsystem sftp internal-sftp
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
これらの設定を個別のエントリセットとして追加し、Match
を使用することが重要です。 このセクションがのみであることを示す構文 このグループのユーザーに適用されます。既存のエントリに変更を加えた場合、それらはすべてに適用されます。 SSHユーザー。リモートアクセスが中断される可能性があります。
構成行は次のように分類されます。
-
ForceCommand
ssh
を作成します 組み込みの機能を選択して、SFTPサービス(個別に制御できます)を提供します。 -
ChrootDirectory
sshd
に通知します ユーザーを制限する場所。 Subsystem sftp internal-sftp
sshd
に通知します 内部のsftp
をロードします サービスを提供し、利用できるようにします。
このSubsystem
を確認する必要があるかもしれません 構成ファイルの前半でこの行をコメントアウトしても、まだ定義されていません:
# override default of no subsystems
# Subsystem sftp /usr/libexec/openssh/sftp-server
変更を加えてスペルを確認したら、先に進んで変更を保存します。次に、sshd
を再起動します :
[root@showme1 ~]# systemctl restart sshd
新しいユーザーをテストします:
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> ls
accounting ansible fred jason kenny lisa
nick
sftp> pwd
Remote working directory: /
sftp> exit
おっと、ちょっと待ってください。他のすべてのユーザーのディレクトリも表示されているようです。ただし、これらのディレクトリに移動することはできません:
sftp> cd fred
sftp> ls
remote readdir("/fred"): Permission denied
ChrootDirectory
を変更することで、chrootされたユーザーを自分のホームディレクトリに誘導できます。 sshd_config
の行 このようなファイル:
ChrootDirectory /
この迅速な変更により、ニックは自分のホームディレクトリにいるかのように見え、他のユーザーのファイルを表示できなくなります。
sftp> pwd
Remote working directory: /home/nick
sftp>
sftp> exit
[skipworthy@milo ~]$ touch test.txt
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> put test.txt
Uploading test.txt to /home/nick/test.txt
test.txt 100% 0 0.0KB/s 00:00
sftp> ls
test.txt
sftp>
どこに行ったの?これをチェックしてください:
[root@showme1 ~]# ls /home/nick
test.txt
chroot jail
に注意してください ではありません それ自体が適切なセキュリティ制限であると見なされます。ユーザーが制限されたディレクトリから変更するのを防ぎますが、これを回避する方法があります(一般的な考え方はchroot(2)
で参照されます マニュアルページ。本番環境またはビジネスクリティカルなコンテキストでこのトリックを使用することを検討している場合は、このページを確認する必要があります。)
まとめ(今のところ)
つまり、chroot
であることがわかります。 非常に便利なツールになります。パート2では、特定のディレクトリをユーザーに割り当て、サーバーの残りの部分を公開せずにリモートユーザーにシェル環境を提供する方法について詳しく説明します。
コンテナは初めてですか? Containers Primerをダウンロードして、Linuxコンテナーの基本を学びましょう。