ウェブサイト検索

Chroot刑務所を使用してSSHユーザーアクセスをホームディレクトリに制限する


特にウェブサーバー上では、SSHユーザーセッションを特定のディレクトリに制限する理由はいくつかありますが、明白な理由はシステムのセキュリティです。SSHユーザーを特定のディレクトリにロックするために、chrootメカニズムを使用できます。

Unix系システム(Linuxなど)におけるルートの変更(chroot)とは、特定のユーザー操作をLinuxシステムの残りの部分から分離する手段です。これは、現在実行中のユーザープロセスおよびその子(親)プロセスの見かけ上のルートディレクトリを、新しいルートディレクトリであるchrooted jailに変更します。

このチュートリアルでは、LinuxでSSHユーザーのアクセスを特定のディレクトリに制限する方法を示します。すべてのコマンドはrootユーザーとして実行しますので、通常のユーザーとしてサーバーにログインしている場合はsudoコマンドを使用してください。

ステップ1:SSHのチュルートジェイルを作成する

1. 以下のmkdirコマンドを使用してchrootジャイルを作成します:

# mkdir -p /home/test

2. 次に、必要なファイルを特定します。sshd_configのマニュアルページによれば、ChrootDirectoryオプションは、認証後にchrootするディレクトリのパス名を指定します。そのディレクトリには、ユーザーのセッションをサポートするために必要なファイルとディレクトリが含まれていなければなりません。

インタラクティブセッションには、少なくともシェル(一般的にはsh)と、null、zero、stdin、stdout、stderr、ttyデバイスなどの基本的な/devノードが必要です。

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}

3. 次に、mknodコマンドを使用して次のように/devファイルを作成します。以下のコマンドでは、-mフラグがファイルのパーミッションビットを指定するために使用され、cはキャラクタファイルを意味し、2つの数字はファイルが指すメジャーとマイナー番号です。

# mkdir -p /home/test/dev/		
cd /home/test/dev/
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8

4. その後、chrootジャイルに適切な権限を設定します。chrootジャイルとそのサブディレクトリおよびサブファイルはrootユーザーが所有し、通常のユーザーやグループが書き込みできないようにする必要があります:

# chown root:root /home/test
chmod 0755 /home/test
ls -ld /home/test

ステップ2: SSH Chroot ジェイルのためのインタラクティブシェルを設定する

5. 最初に、bin ディレクトリを作成し、次に /bin/bash ファイルを bin ディレクトリに cp コマンドを使って次のようにコピーします:

# mkdir -p /home/test/bin
cp -v /bin/bash /home/test/bin/

6. 次に、共有 libs のために必要な bash を特定し、以下のようにそれらを lib ディレクトリにコピーします:

# ldd /bin/bash
mkdir -p /home/test/lib64
cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/

ステップ3:SSHユーザーの作成と設定

7. 次に、useraddコマンドを使用してSSHユーザーを作成し、そのユーザーに対して安全なパスワードを設定します。

# useradd tecmint
passwd tecmint

8. chrootジャイルの一般設定ディレクトリ、/home/test/etcを作成し、更新されたアカウントファイル(/etc/passwdと/etc/group)を次のようにこのディレクトリにコピーします:

# mkdir /home/test/etc
cp -vf /etc/{passwd,group} /home/test/etc/

ステップ4: Chroot Jailを使用するようにSSHを構成する

9. では、sshd_configファイルを開いてください。

# vi /etc/ssh/sshd_config

ファイル内の下記の行を追加または変更します。

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test

ファイルを保存して終了し、SSHDサービスを再起動します:

# systemctl restart sshd
OR
service sshd restart

ステップ5: Chroot Jailを使用したSSHのテスト

10. この時点で、chroot ジェイルの設定が期待通りに機能しているかテストします:

# ssh [email 
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname

上のスクリーンショットから、SSHユーザーがchrootされた監獄に閉じ込められており、外部コマンド(ls、date、unameなど)を実行できないことがわかります。

ユーザーは、以下に示すように、bashとその組み込みコマンド(pwd、history、echoなど)のみを実行できます。

# ssh [email 
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history

ステップ6. SSHユーザーのホームディレクトリを作成し、Linuxコマンドを追加する

11. 前のステップから、ユーザーがルートディレクトリにロックされていることがわかります。SSHユーザーのためにホームディレクトリを作成できます。これを今後のすべてのユーザーに対して実行してください。

# mkdir -p /home/test/home/tecmint
chown -R tecmint:tecmint /home/test/home/tecmint
chmod -R 0700 /home/test/home/tecmint

12. 次に、bin ディレクトリに ls、date、mkdir などのいくつかのユーザーコマンドをインストールします:

# cp -v /bin/ls /home/test/bin/
cp -v /bin/date /home/test/bin/
cp -v /bin/mkdir /home/test/bin/

13. 次に、上記のコマンドのために共有ライブラリを確認し、それらをchrootされたジャイルライブラリディレクトリに移動します:

# ldd /bin/ls
cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/

ステップ7. Chroot Jailを使用したSFTPのテスト

14. sftpを使用して最終テストを行い、インストールしたコマンドが正常に動作しているか確認してください。

/etc/ssh/sshd_configファイルに以下の行を追加してください:

#Enable sftp to chrooted jail 
ForceCommand internal-sftp

ファイルを保存して終了します。その後、SSHDサービスを再起動します:

# systemctl restart sshd
OR
service sshd restart

15. さて、SSHを使用してテストします。次のエラーが表示されます:

# ssh [email 

次のようにSFTPを使用してみてください:

# sftp [email 

今回はここまでです!この記事では、Linuxで特定のディレクトリ(chroot環境)にSSHユーザーを制限する方法を紹介しました。このガイドについての感想を下のコメント欄でお知らせください。

関連記事: