【きっかけ】
データ同期の際、rsync+SSHを利用。自動化を行う為に公開鍵認証方式(パスフレーズなし)で行っているが、
セキュリティ的に心配。万一の場合でも実行可能コマンドが制限されている、chroot環境を構築してみよう。
【手順】
chroot環境を作るのは、意外と手間な作業の為、ネット上で紹介されていたスクリプトを改修して、簡易化を行った。
(0) chroot環境構築スクリプトの入手
https://www.chovits.jp/git/?p=chroot_mk.git;a=summary
「shortlog」 一番上(最新)の[snapshot]をクリックするか、
https://www.chovits.jp/git/?p=chroot_mk.git;a=tree
から、chroot.sh、useradd.sh を入手。
[スクリプト作成環境]
RockyLinux8 X86_84
おそらく、同系統のOS(RHEL8やCentOS8)でも動作すると思う。
(1) SSHログイン(chroot環境で利用する)アカウントを作成。(例:user001)
# useradd -u xxxx -g xxxx user001
(2) 公開鍵を配置
※ 公開鍵/秘密鍵はログイン元の端末で作成済
# su - user001
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ vi authorized_keys
(公開鍵をコピペ)
(3) chroot構築スクリプト実行
# cd ~
# /root/chroot.sh
(デフォは、/chrootに出来る)
(4) /chroot配下(chroot環境)にアカウント情報を反映するスクリプト実行
# cd ~
# /root/useradd.sh user001
(5) sshd_configを修正する
cd /etc/ssh
# cp -pi sshd_config ~/sshd_config.bkup.YYYYMMDD
# vi sshd_config
Match User user001
ChrootDirectory /chroot/home/user001
(6) sshdをプロセス再起動
# systemctl restart sshd
(7) SSHログイン可能か確認
chroot環境にログインしているか確認
※ chroot環境内で必要なコマンドは、chroot.shを修正。
既にchroot環境を構築済みでも、必要コマンド追記後に再実行OK。
必要コマンドを除外した場合は、chroot環境から削除されないので手動で削除すること。
【最後に】
chroot環境が必要となる機会はあまり無いと思う。
sftpだけであれば、sshd_config 「ChrootDirectory /home/user001」を設定すれば、
/bin/bash などのshellが/home/user001配下に存在しなくても、ファイル転送できるらしい。
(参考サイト)
ChrootDirectoryを使ってsshでchroot環境の作成
https://lab.sonicmoov.com/development/server/chrootdirectory-ssh-chroot/