- 専用のユーザを作成して、SFTP 接続のみ利用可能で、SSH 接続を許可しない。
- アップロード先のディレクトリだけアクセス可能にしたい。
- 対象クライアントは多数想定
SFTP専用のユーザを作成してパスワードを設定する
$ sudo useradd sftp-user
$ sudo passwd sftp-user
SFTP専用ユーザのホームディレクトリを /(rootディレクトリ)に設定する ChrootDirectory を使うと見かけ上ホームディレクトリは / になるため。
$ sudo usermod -d / sftp-user
実際にファイルを読み書きするディレクトリを作成する
$ sudo chown root:root /home/
$ sudo mkdir /home/sftp-user
$ sudo chown root:root /home/sftp-user
$ sudo chmod 755 /home/sftp-user
SFTP専用ユーザーのグループを作成する
$ sudo groupadd sftponly
SFTP専用ユーザーのグループを設定を変更する
$ id sftp-user
uid=1001(sftp-user) gid=1001(sftp-user) groups=1001(sftp-user)
$ sudo usermod -G sftponly sftp-user
$ id sftp-user
uid=1001(sftp-user) gid=1001(sftp-user) groups=1001(sftp-user),1002(sftponly)
sshd設定、internal-sftpを使用する
$ sudo vim /etc/ssh/sshd_config
/usr/lib/openssh/sftp-serverをコメントアウトし、 internal-sftp を追加する
-#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
SFTP専用ユーザが読み書きするディレクトリを作成する
下記の例では、接続すると test ディレクトリのみが表示されるようになる。
$ cd /home/sftp-user
$ sudo mkdir test
$ sudo chown sftp-user:sftp-user test
SFTP専用ユーザをchrootに閉じ込める
$ sudo vim /etc/ssh/sshd_config
下記の設定を追加する。
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
AuthorizedKeysFile /home/%u/.ssh/authorized_keys
sshdを再起動する
$ sudo service sshd restart
sftpログイン確認
sftp -i ~/.ssh/xxxx.pem -oStrictHostKeyChecking=no ログインユーザ@IPアドレス
ユーザを追加する場合
SFTP専用グループの作成は不要で、ユーザをグループに追加する
- 参考文献
SFTPサーバを用意する - Qiita (usutaniさんの投稿)
https://qiita.com/usutani/items/fdabef73b5dff60c95c6