[AlmaLinux9]ssh接続でchroot設定のやり方
1. chroot設定
chrootは、ルートディレクトリを「/」ではなく、指定したディレクトリをルートにし、
ルート下のディレクトリ以外のアクセスを禁止することができます。
ここでは、「/my_chrootdir」をベースとします。
[root@xxx ~]#mkdir -p /my_chrootdir
2. 必要なファイル bashのコピー
/my_chrootdir がルートになると、通常使用しているコマンドができなくなりますので、/my_chrootdirにライブラリをコピーします。
[root@xxx ~]#cd /my_chrootdir
[root@xxx ~]#mkdir bin
[root@xxx ~]#mkdir lib64
[root@xxx ~]#cp -p /bin/bash /my_chrootdir/bin
[root@xxx ~]#cd /
lddコマンドで依存関係のファイルの確認
[root@xxx ~]# ldd /my_chrootdir/bin/bash
これで、必要なファイルが
/lib64/libtinf.so.6
/lib64/libdl.so.2
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
とわかりますので、これを/my_chroot/lib64へコピー
[root@xxx ~]#cp -p {/lib64/libtinf.so.6,/lib64/libdl.so.2,/lib64/libc.so.6,/lib64/ld-linux-x86-64.so.2} /my_chrootdir/lib64
ここで、chrootの実行
[root@xxx ~]#chroot /my_chrootdir
bash-y.y#
こうなれば、オッケーです。
※y.yは搭載されているBashのバージョンだと思います。
で、一旦終了
3. ls コマンドを参考として使用
参考例として、ls コマンドを使用可能にしたいと思います。
端末をもう一つ起動していただき、その端末で、
[root@xxx ~]#cp -p /bin/ls /my_chrootdir/bin
で ls コマンドをコピーします。
bash-y.y# の端末に移り、
bash-y.y#pwd
bin lib64 と出ると思います
pwd コマンドで、カレントディレクトリを確認し、
bash-y.y#cd bin
で、/my_chrootdir/bin のディレクトリに移り、
bash-y.y#./ls
で実行すると、 エラーが出ると思います。
実はこれ、依存関係のファイルが/my_chrootdir/lib64にないためです。
なので、依存関係のファイルをコピーします。
依存関係のファイルの確認
[root@xxx ~]#ldd /my_chrootdir/bin/ls
/lib64/libselinux.so.1
/lib64/libcap.so.2
/lib64/libc.so.6
/lib64/libpcre2-8.so.0
とわかりますので、これを/my_chrootdir/lib64へコピー
[root@xxx ~]#cp -p {/lib64/libselinux.so.1,/lib64/libcap.so.2,/lib64/libpcre2-8.so.0} /my_chrootdir/lib64
bash-y.y# が表示されている端末に移り、再度 lsコマンド を実行
bash-y.y#cd /bin
bash-y.y#./ls
bash ls
とでたらlsコマンドが実行されて成功したということです。
4. 続いて、ssh接続するために ユーザー登録
[root@xxx ~]#useradd hoge
[root@xxx ~]#passwd hoge
で、ユーザ名(仮にhogeとしてます)とパスワードを入れる
5. ユーザーhoge を my_chrootdirのhomeにコピー
[root@xxx ~]# mkdir -p /my_chrootdir/home
[root@xxx ~]# cp -pRf /home/hoge /my_chrootdir/home
6. ssh接続のためsshd_configを編集
[root@xxx ~]#vi /etc/ssh/sshd_config
最終行に
Match User hoge
ChrootDirectory /my_chrootdir
と追加し保存
その後、
[root@xxx ~]#systemctl restart sshd
で sshd を再起動
7.ここで、一旦接続実験
外部アクセスをする端末から
[xxxx@xxx ~]$ ssh hoge@xxx.xxx.xxx.xxx(sshサーバー側の端末IPアドレス)
パスワードを入れてるとアクセスできたと思います。
ただ、先程、コピーしたlsコマンドが not found とでて、そのカレントでは使えませんので、
pwd コマンドで、現在地を確認
bash-y.y$pwd
すると、/home/hoge にいるのがわかるかと思います。
では、binディレクトリに移りlsコマンドを実行します。
bash-y.y$cd /bin
bash-y.y$./ls
すると、
bash ls
と表示されたと思います。
これは、簡単なことをいうと、/my_chrootdir/bin のパスが通っていないから起こるようです。
すみません。詳しく知りません。
なので、/home/hoge の .bashrc に パスを追加します。
8. .bashrc の 編集して、再アクセス
[root@xxx ~]#vi /my_chrootdir/home/hoge/.bashrc
最後の行に
export="$PATH:/bin"
を追加し、クライアント側から再度アクセスしてみてください。
※すみません。パス指定これしか私にはわかりません。
そして、
[xxx@xxx ~]$ ls -a
と入力をしてみてくだい。
/home/hoge の中身が見れたと思います。
ちなみにcp などの他コマンドは、/my_chrootdir/binにコピーしてないので使えません。
では、なぜ、PATH 指定が
export="$PATH:/my_chrootdir/bin"ではなく、
export="$PATH:/bin"
なるかですが、
お察しの通り、/my_chrootdir が、 ルート になってるからだと思います。
たぶん、ログインされたときに、 /my_chrootdir が / の考え方になり、
その後、.bashrcなどが実行されるので、/bin の指定になるのだと思います。
あと、bash の装飾はよくわからないのでしておりません。
以上です。
もしよければ参考までに・・・
ありがとうございました。