🦔

SFTP chroot 設定をする

2022/12/11に公開

はじめに

任意のディレクトリにのみにSFTPできるようにする必要があったので、手順を残しておく。

環境

OS: 5.10.144-127.601.amzn2.x86_64
openssl: 1.0.2k-24
openssh: 7.4p1-22
apache: 2.4.54-1

手順

準備

$ sudo chown -R apache /var/www
$ sudo chgrp -R apache /var/www
$ sudo chmod 2775 /var/www
$ find /var/www -type d -exec sudo chmod 2775 {} \;
$ sudo mkdir -p /var/www/html/example

SFTPユーザ作成

$ sudo useradd sftp-user
$ sudo usermod -aG apache sftp-user

ユーザ切り替え

$ sudo su - sftp-user

.ssh ディレクトリ作成

$ mkdir .ssh
$ chmod 700 .ssh

authorized_keys作成

$ cd ~/.ssh
$ touch authorized_keys
$ chmod 600 authorized_keys

keypair作成

$ ssh-keygen -b 4096
$ cat id_rsa.pub >> authorized_keys
$ exit

sftp設定

$ sudo vim /etc/ssh/sshd_config

-------------
############
sshd_config
############
# override default of no subsystems
# Subsystem sftp /usr/libexec/openssh/sftp-server
# chroot の場合
Subsystem sftp internal-sftp
Match User sftp-user
 ChrootDirectory /home/%u
 ForceCommand internal-sftp -u 002
------------

$ systemctl restart sshd

パーミッション変更

$ sudo chown root:root /home/sftp-user/
$ sudo chmod 755 /home/sftp-user/

特定ディレクトリをマウント

$ sudo mkdir -p /home/sftp-user/workdir/mountdir/
$ sudo chown sftp-user:sftp-user /home/sftp-user/workdir
$ sudo mount -B /var/www/html/only-sftp /home/sftp-user/workdir/mountdir/
$ sudo vim /etc/fstab

------------
# 追加
/var/www/html/example /home/sftp-user/workdir/mountdir/ none bind 0 0
------------

まとめ

chroot のルートディレクトリは、root:rootにする必要があり所有者以外には書き込み権限を付与してはいけない。

/var/www/html/example に対してシンボリックリンク作成してもアクセスはできないため
mountにて対応する必要があった。

Discussion