この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
他社様より scp / sftp を使用してファイルアップロード頂きたいとき、単にユーザアカウントを発行しポート制限を解除するのみの場合、 ssh ログインによるコマンド実行や上位階層への移動といった心配が発生します。そこでファイル転送専用にアカウント作成を行うこととなります。
■ § 手順概要
- sftpしか行えないユーザを所属させる sftponly グループを作成します。
- sftponly グループに所属する sftpclient ユーザを作成します。
- sshサーバ側で sftponly グループは sftp しか行えないように設定します。
- sshサーバを再起動し完了。
※ グループ名 sftponly・ユーザ名 sftpclient は環境に合わせて作成してください。
■ § 手順
※ root ユーザで実施します。
1. グループ作成
コマンドの実行を行えなくする為のグループを作成します。
# groupadd sftponly
2. ユーザ作成
上記グループに所属するユーザを作成します。
# useradd -s /bin/false -G sftponly sftpclient
# mkdir /home/sftpclient/uploads
# chown root:root /home/sftpclient
# chmod 755 /home/sftpclient
# chown sftpclient:sftpclient /home/sftpclient/uploads
/etc/passwd ファイルに下記ユーザが登録されており、ログインシェルが /bin/false (ログインできない状態)となっていることを確認する。
sftpclient:x:505:505::/home/sftpclient:/bin/false
※ ユーザ作成後にグループに所属させる場合は vigr コマンドで 直接 /etc/group ファイルを編集します。
# vigr
sftponly:x:506:sftpclient
3. sshサーバ設定
/etc/ssh/sshd_config ファイルを編集します。
# 132行目あたり
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
# 最下行
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
4. sshd再起動
※ sshd_config を書き換えた後は設定を反映させる為に sshd を再起動する必要があります。
/etc/init.d/sshd restart
service sshd restart
systemctl restart sshd.service など
再起動が完了したら WinSCP, FileZilla, Fugu などのクライアントで接続確認を行います。
■ § Appendix
※ /etc/sshd_config では sshポートを分かりにくい数値に変更したり、管理ユーザのログインを禁止したり、鍵認証の強制(パスワードのみの認証は拒絶)合わせて行うとよりセキュリティーを高められます。
Port 58272
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
※ sshdが停止していると新しくsshログインできません。既に接続中のsshセッションは維持されていますので sshd が起動失敗した場合でも気づきにくいので、sshd を再起動した際は別のプロンプトを開き接続できることを確認すると良いです。
※ 鍵の作成や ssh 関連記事
http://doruby.kbmj.com/sakuma85_on_rails/20080228/ssh_root_1