LoginSignup
2
1

[AlmaLinux9]ssh接続でchroot設定のやり方

Last updated at Posted at 2023-10-24

ここをクリックすると他の技術投稿の目次に行きます

[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 の装飾はよくわからないのでしておりません。

以上です。
もしよければ参考までに・・・
ありがとうございました。

ここをクリックすると他の技術投稿の目次に行きます

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1