制限付きSFTPの設定
特定のディレクトリにだけアクセスできるSFTPを設定したく、いろいろ試してみていろいろとつまづいたりしたのでそれのメモ。環境はCentOS 6.5です。
前提
- SFTP用ユーザが追加されている
- SFTP用ユーザのグループが追加されている
- SFTP用ユーザの鍵が設定されている
- SFTP用ユーザの名前は
username
- 公開するディレクトリは
/var/www/username
前提はこんなもんかな?
エラーログの出力先の確認
ログイン失敗や権限がなくて実行出来なかった場合などのエラーは/var/log/secure
に出力されるようなので、うまく行かなかった場合はここを見ると良いかも。
エラーメッセージを検索すると結構いろいろ出てくるので、それで大抵は解決できると思う。
SSHの設定
/etc/ssh/sshd_config
を編集します。
-Subsystem sftp /usr/libexec/openssh/sftp-server
+#Subsystem sftp /usr/libexec/openssh/sftp-server
+Subsystem sftp internal-sftp
この箇所は、後で書くところで指定するから変更する必要ないよ、と書かれている情報もあったのだけれど修正しないとだめだったので変更をしています。
Match User username
ForceCommand internal-sftp
ChrootDirectory /var/www
これでSFTPをしたときは/var/www
に行くようになるはず。
パーミッション等の設定
ChrootDirectoryに指定されたディレクトリは、適切な所有者やパーミッションが指定されていないと正常に動作できないので設定をします。これがわかるまで苦労した……
最初に/var/www
の設定をします。
# cd /var
# chown root:root ./www
# chmod 0755 ./www
所有者とグループをroot
にします。それと、パーミッションを755
(drwxr-xr-x
)にします。
# cd ./www
# mkdir ./username
# chown username:username ./username
# chmod 0755 ./username
その下のディレクトリの/var/www/username
も同じようにそのSFTP用ユーザの権限とパーミッションに。
SSHの再起動
# service sshd restart
あとは最初にしたsshd_config
の設定を反映させるためにSSHを再起動する。
ログイン
試しにログインしてみる。
$ sftp -P port -i key username@ipaddr
Connected to ipaddr.
sftp>
となると思う。あとは普通にファイルを置いたりディレクトリを作ったり出来るはず。
ちなみにSSHで入ろうとすると。
$ ssh -p port -i key username@ipaddr
This service allows sftp connections only.
Connection to ipaddr closed.
SFTP接続だけだよ、と言われる。
ディレクトリの制限をする必要がないとき
ディレクトリの制限をする必要がない(ChrootDirectory
がない)場合で、SFTPだけのログインにしたい場合。そのユーザの.ssh/authorized_keys
を変更すると楽かも。
-ssh-rsa ...
+command="internal-sftp" ssh-rsa ...
authorized_keys
の行頭にこれを追加するだけでSFTP専用ユーザになる。上で設定したような、sshd_config
を編集したりという必要はないみたい。
authorized_keys
はこれ以外にも、特定ホストからしかログインを許可しない、とかいろいろ設定できるようなので調べてみると良いかも。