GNU/Linux >> Linux の 問題 >  >> Linux

Linuxのchrootjailを設定する方法

用語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コンテナーの基本を学びましょう。


Linux
  1. Linuxのchroot刑務所をさらに深く掘り下げる

  2. ArchLinuxでSFTPサーバーをセットアップする方法

  3. Linuxで$Path変数を設定する方法

  1. Linuxでシステムホスト名を設定または変更する方法

  2. Linuxでタイムゾーンを設定または変更する方法

  3. CentOS / RHEL :chroot jail SFTP のセットアップ方法

  1. Linuxでプリンタを設定する方法

  2. Linuxでcronジョブを設定する方法

  3. Linux で Chroot SFTP をセットアップする方法 (SSH ではなく SFTP のみを許可する)