ssh公開鍵認証で chroot SFTPファイル転送
SFTPでホームページ更新を ssh 公開鍵認証,chroot でアクセスできるディレクトリを制限する。
Windows 10 WSL で Linux が Windows 上で動く。Ubuntu や Debianもあるが,Kali Linux でやってみた。
Kali Linux には,OpenSSH 及び apache2 をインストールしてある。
コマンドプロンプトで kali と入力して Kali linux を起動する。
ssh公開鍵認証を用意する。接続ユーザーはこの例ではatc5。
ssh-keygen コマンドで,.sshディレクトリに秘密鍵ファイル id_rsa, 公開鍵ファイルid_rsa.pub が生成される。
公開鍵ファイルは,authorized_keysにリネームしておく。
.ssh ディレクトリのパーミッションは700,.ssh/authorized_keysは600にする。
cd /home/atc5
mkdir -p .ssh
ssh-keygen -t rsa
mv .ssh/id_rsa.pub .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
chroot の対象にするディレクトリは上位のディレクトリも含めてrootのみライト可(755以下)にしないと接続できない。rootでchroot用のディレクトリを作成する。
mkdir –p /home/chroot/atc5/html
/var/www/html/site1 がホームページのドキュメントルート。
drwxr-xr-x 1 root root 512 Mar 1 22:30 .
drwxr-xr-x 1 root root 512 Feb 27 22:55 ..
drwxrwxrwx 1 atc5 atc5 512 Mar 1 22:30 site1
drwxrwxrwx 1 usr1 usr1 512 Mar 1 22:29 site2
drwxrwxrwx 1 usr2 usr2 512 Mar 1 22:29 site3
site1ディレクトリのオーナーは atc5 なので,site1 に chroot できない(オーナーがrootではないため)。
site1のオーナーをrootで755にした場合,chroot はできるか,atc5 は site1 内にファイルやサブディレクトリの追加ができない。
そこでディレクトリをマウントできる bind mount で,chrootの対象ディレクトリ下の html に site1 をマウントする。
mount --bind /var/www/html/site1 /home/chroot/atc5/html
/etc/ssh/sshd_config を編集する。一番下に Match User atc5を以下のように追記する。 /home/chroot/atc5が chroot 先となる。
Match User atc5
PasswordAuthentication no
PubkeyAuthentication yes
ChrootDirectory /home/chroot/atc5
ForceCommand internal-sftp
再起動しても消えないように,bind mount を/etc/fstabに書いておく。
/var/www/html/site1 /home/chroot/atc5/html none bind 0 0
IPは 192.168.0.7 であり,WSL なので Windows 10 のIPと同じ。
wifi0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.7 netmask 255.255.255.0 broadcast 192.168.0.255
http://192.168.0.7/site1/でホームページを確認する。
WinSCPで接続する。秘密鍵にssh-keygen コマンドで作成しておいた id_rsa ファイルを指定すると自動的にppkファイルに変換してくれる。
公開鍵認証で接続してリモート側に html ディレクトリが表示された。chroot しているので上位のディレクトリにはアクセスできない。
コメント 0