環境
- Ubuntu 12.10 64bit
要求
- 専用のユーザを作成して、SFTP 接続のみ利用可能で、SSH 接続を許可しない。
- アップロード先のディレクトリだけアクセス可能にしたい。
(参考)SSH(シェル)の制限かけてchrootの設定を有効にしたSFTPサーバを提供する方法
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
sshdを再起動する
$ sudo service sshd restart
ssh(シェル)が実行できないことを確認する
$ ssh sftp-user@123.45.67.890
sftp-user@123.45.67.890's password:
This service allows sftp connections only.
Connection to 123.45.67.890 closed.