sftpでchrootする設定
提供: セキュリティ
スポンサーリンク
概要
sftp でログインするユーザーがファイルシステム全体を眺められる必要はありません。 たとえば、ファイル転送を目的としていて、動作が限定されているようなバッチ処理のためのアプリケーションアカウント がファイルシステムの / にアクセスできる必要はありません。
特定のディレクトリにファイルを置く、もしくはファイルをもっていくのであれば、そのディレクトリだけにアクセスできればよいということになります。
sftpでログインしてくるユーザーをchrootで特定のファイルシステムの空間に閉じ込められます。
ユーザーの作成
sudo useradd -s /sbin/nologin sftpuser
ディレクトリの作成
sudo mkdir /home/backup sudo mkdir /home/backup/sftpuser sudo chown sftpuser:sftpuser /home/backup/sftpuser
DIR=/home/sftp-users/ SFTPUSER=sftpuser SFTPUSERGROUP=sftpuser WORKDIR_NAME=writable sudo mkdir -p $DIR/$SFTPUSER sudo mkdir -p $DIR/$SFTPUSER/$WORKDIR_NAME sudo chown $SFTPUSER:$SFTPUSERGROUP $DIR/$SFTPUSER/$WORKDIR_NAME
sshd の設定
sshd の sshd_config に下記の設定を加えます。
Subsystem sftp /usr/libexec/openssh/sftp-server
はコメントアウトします。
#Subsystem sftp /usr/libexec/openssh/sftp-server
sftpuser というユーザーを使用する例です。 /home/backup に chroot します。
Subsystem sftp internal-sftp Match User sftpuser ChrootDirectory /home/backup AllowTCPForwarding no X11Forwarding no ForceCommand internal-sftp
sftponly というユーザーグループを作成して、使用する例です。 /home/scp-usersの任意のユーザのディレクトリに chroot します。
Subsystem sftp internal-sftp Match Group sftponly ChrootDirectory /home/sftp-users/%u AllowTCPForwarding no X11Forwarding no ForceCommand internal-sftp
設定の反映
sudo /etc/rc.d/sshd reload
sudo service sshd reload
複数のディレクトリを対象としたい場合
chroot に閉じ込めたいが、複数のディレクトリを操作したい場合には、 mount_nullfs / mount --bind を利用するといいでしょう。
試行錯誤
$ sudo -u sftpuser sftp sftpuser@localhost Connecting to localhost... Password: Write failed: Broken pipe Couldn't read packet: Connection reset by peer
ディレクトリのオーナーが root でないと下記のエラーがでます。
Sep 21 19:45:07 u1 sshd[4646]: fatal: bad ownership or modes for chroot directory "/home/sftpuser"
/home/backup は、 root のディレクトリなので、操作ができません。
sftp> ls Couldn't get handle: Permission denied
関連項目
ツイート
スポンサーリンク