Linux chroot jailsをセットアップする方法

chroot jailという用語は、著名なセキュリティ研究者、Bill Cheswickの記事で1992年に Chroot jailsは2003年にircやFTPのようなアプリケーションで登場し始めました。 2005年、Sunはゾーンと呼ばれる”コンテナ”技術を導入し、これはコンテナで使用されるコア技術である名前空間の概念の前駆体でした。

Chrootの基本

Chrootを使用すると、管理者は基礎となるサーバー環境への露出を制御しながら、サービスまたはファイルシステムへのアクセスを制御できます。 一般的な2つの例は、Red Hat/CentOS/Fedoraシステムのブートシーケンスと「緊急シェル」、およびSecure FTP(SFTP)の中にあります。

コマンドは次のようになります:

chroot <newroot> ]

sudoコマンドと同様に、chrootコマンドは次のコマンドの環境を変更します。 つまり、newrootディレクトリに変更され、そのディレクトリも”作業中の”ディレクトリになります。 その後、commandはその場所で実行され、起動しないシステムを救出するなどの場合に便利です。

sudoとは異なり、あなたはディレクトリの”中”になります。 この方法は、外部メディアから起動しているが、作業を行うために”ローカル”ファイルシステムまたはコマンドにアクセスする必要がある場合に便利です。

chrootの他の一般的な用途は、ラッパーを使用してファイルシステムの残りの部分を隠すことによってサービスまたはユーザーを制限することであり、したがって、他のユーザーのデータに対するリモートユーザーのビューを制限することである。 このアプローチSFTPを使用して一般的な実装。

この例の作業を開始する前に、バックアップがあることを確認する必要があります。 この場合、/etc/ssh/sshd_configファイルを具体的に変更するため、ファイルをバックアップします:

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

今のところ、SFTPユーザーをサーバー上のホームディレクトリに制限するだけです。 この要件は、ユーザーを追加してグループに配置する必要があることを意味します:

# useradd -g sftpusers -s /sbin/nologin -p nick nick

これを行うと、nickにログインシェルのないアカウントが割り当てられることに注意してください。 SFTPを使用しているだけの場合は、ログイン権限を持つべきではありません。 次の記事では、リモートユーザーにシェルを提供することについて説明します。ここで、SFTPユーザーがログインするときに何をすべきかをsshサービスに指示する必要があります。 /etc/ssh/sshd_configファイルを開き、最後に次のものを追加します:

Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no

これらの設定を別のエントリセットとして追加し、Match構文を使用してこのセクションがこのグループのユーザーにのみ適用されることを示すことが重要 既存のエントリに変更を加えた場合、それらはすべてのSSHユーザーに適用され、リモートアクセスが中断される可能性があります。

構成行は次のように分解されます:

  • ForceCommandは、sshにSFTPサービスを提供するための組み込み機能を選択させます(これは独立して制御できます)。
  • ChrootDirectoryは、ユーザーを制限する場所をsshdに指示します。
  • Subsystem sftp internal-sftpsshdに内部のsftpサービスをロードして利用可能にするように指示します。

このSubsystemがまだ定義されていないことを確認する必要があるかもしれません。:

# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server

変更を加えてスペルを確認したら、変更を保存します。 その後、再起動しますsshd:

# systemctl restart sshd

新しいユーザーのテスト:

$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit

他のユーザーのディレクトリもすべて見ることができるように見えます。 ただし、これらのディレクトリに移動することはできません:

sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied

chrootされたユーザーを自分のホームディレクトリに誘導するには、sshd_configファイルのChrootDirectory行を次のように変更します:

ChrootDirectory /

このクイック変更により、ニックは自分のホームディレクトリにいるかのように見え、他のユーザーのファイルを見ることはできません:

sftp> pwdRemote working directory: /home/nicksftp>sftp> exit$ touch test.txt$ sftp nick@showmenick@showme's password:Connected to [email protected]> put test.txtUploading test.txt to /home/nick/test.txttest.txt 100% 0 0.0KB/s 00:00sftp> lstest.txtsftp>

どこに行ったの? これをチェックアウト:

# ls /home/nicktest.txt

achroot jailはそれ自体では十分なセキュリティ制限とはみなされないことに注意してください。 ユーザーが制限されたディレクトリから変更することを防ぎますが、これを回避する方法があります(一般的な考え方はchroot(2)manページで参照されています。

ラップアップ(今のところ)

だから、あなたはchrootがかなり便利なツールになることがわかります。 第2回では、特定のディレクトリをユーザーに割り当て、残りのサーバーを公開せずにリモートユーザーにシェル環境を提供することについて詳しく説明します。

コンテナに新しいですか? Containers Primerをダウンロードし、Linuxコンテナの基本を学びます。

コメントを残す

メールアドレスが公開されることはありません。