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

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

パート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をダウンロードして、基本を学びましょう。


Linux
  1. TermuxはAndroidをLinux開発環境に変えます

  2. RequestTrackerをLinuxコンテナに移動する方法

  3. MediaWikiをLinuxコンテナに移動する方法

  1. WordPressをLinuxコンテナに移動する方法

  2. Linux名前空間でChrootを実行する方法は?

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

  1. Linuxのchrootjailを設定する方法

  2. Linux での sftp コマンドの例

  3. Linux:サービスへの処理