「sftpでchrootする設定」の版間の差分
提供: セキュリティ
行5: | 行5: | ||
== 概要 == | == 概要 == | ||
[[sftp]] でログインするユーザーがファイルシステム全体を眺められる必要はありません。 | [[sftp]] でログインするユーザーがファイルシステム全体を眺められる必要はありません。 | ||
− | たとえば、ファイル転送を目的としていて、動作が限定されているようなバッチ処理のための | + | たとえば、ファイル転送を目的としていて、動作が限定されているようなバッチ処理のための'''アプリケーションアカウント''' がファイルシステムの / にアクセスできる必要はありません。 |
特定のディレクトリにファイルを置く、もしくはファイルをもっていくのであれば、そのディレクトリだけにアクセスできればよいということになります。 | 特定のディレクトリにファイルを置く、もしくはファイルをもっていくのであれば、そのディレクトリだけにアクセスできればよいということになります。 | ||
[[sftp]]でログインしてくるユーザーを[[chroot]]で特定のファイルシステムの空間に閉じ込められます。 | [[sftp]]でログインしてくるユーザーを[[chroot]]で特定のファイルシステムの空間に閉じ込められます。 | ||
− | |||
== ユーザーの作成 == | == ユーザーの作成 == | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo useradd -s /sbin/nologin sftpuser | sudo useradd -s /sbin/nologin sftpuser | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== ディレクトリの作成 == | == ディレクトリの作成 == | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo mkdir /home/backup | sudo mkdir /home/backup | ||
行35: | 行31: | ||
sudo chown $SFTPUSER:$SFTPUSERGROUP $DIR/$SFTPUSER/$WORKDIR_NAME | sudo chown $SFTPUSER:$SFTPUSERGROUP $DIR/$SFTPUSER/$WORKDIR_NAME | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== sshd の設定 == | == sshd の設定 == | ||
− | |||
[[sshd]] の [[sshd_config]] に下記の設定を加えます。 | [[sshd]] の [[sshd_config]] に下記の設定を加えます。 | ||
行69: | 行63: | ||
ForceCommand internal-sftp | ForceCommand internal-sftp | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 設定の反映 == | == 設定の反映 == | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo /etc/rc.d/sshd reload | sudo /etc/rc.d/sshd reload | ||
行79: | 行71: | ||
sudo service sshd reload | sudo service sshd reload | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 複数のディレクトリを対象としたい場合 == | == 複数のディレクトリを対象としたい場合 == | ||
− | + | [[chroot]] に閉じ込めたいが、複数のディレクトリを操作したい場合には、 mount_nullfs / [[mount]] --bind を利用するといいでしょう。 | |
− | [[chroot]] に閉じ込めたいが、複数のディレクトリを操作したい場合には、 | + | |
− | + | ||
== 試行錯誤 == | == 試行錯誤 == | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ sudo -u sftpuser sftp sftpuser@localhost | $ sudo -u sftpuser sftp sftpuser@localhost | ||
行105: | 行93: | ||
Couldn't get handle: Permission denied | Couldn't get handle: Permission denied | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 関連項目 == | == 関連項目 == | ||
* [[scpとsftpの違い]] | * [[scpとsftpの違い]] | ||
* [[sftp-server]] | * [[sftp-server]] | ||
− | * | + | * WinSCP |
* [[ssh]] | * [[ssh]] | ||
* [[sshd]] | * [[sshd]] | ||
行116: | 行103: | ||
* [[scponly]] | * [[scponly]] | ||
* [[最小権限の原則]] | * [[最小権限の原則]] | ||
− | <!-- | + | <!-- vim: filetype=mediawiki |
− | vim: filetype=mediawiki | + | |
--> | --> |
2015年9月22日 (火) 21:29時点における最新版
概要
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