「sftpでchrootする設定」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「sftp を利用すると chroot を併用できます。 __TOC__ == 概要 == sftp でログインするユーザーがファイルシステム全体を眺...」)
 
 
行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]] に閉じ込めたいが、複数のディレクトリを操作したい場合には、 [[mount_nullfs]] / [[mount]] --bind を利用するといいでしょう。
+
 
+
 
== 試行錯誤 ==
 
== 試行錯誤 ==
 
 
<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]]
+
* WinSCP
 
* [[ssh]]
 
* [[ssh]]
 
* [[sshd]]
 
* [[sshd]]
行116: 行103:
 
* [[scponly]]
 
* [[scponly]]
 
* [[最小権限の原則]]
 
* [[最小権限の原則]]
<!--
+
<!-- vim: filetype=mediawiki
vim: filetype=mediawiki
+
 
-->
 
-->

2015年9月22日 (火) 21:29時点における最新版

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

関連項目