sftpでchrootする設定

提供: セキュリティ
移動: 案内検索
スポンサーリンク

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 の設定

sshdsshd_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

関連項目




スポンサーリンク