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

# 
[ここをクリックすると他の技術投稿の目次に行きます](https://qiita.com/FUKUTAKA7938/items/2312362e44dbcecd11ca)
#

# [AlmaLinux9]ssh接続でchroot設定のやり方
<tb></tb>
## 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 の装飾はよくわからないのでしておりません。

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

# 
[ここをクリックすると他の技術投稿の目次に行きます](https://qiita.com/FUKUTAKA7938/items/2312362e44dbcecd11ca)
#