Linuxサーバー(確認した環境はCentOS 7)で特定のユーザーに対してsftp(ファイル転送)で自分のホームディレクトにあるpublic_htmlへのファイル転送のみを許可したい(sshでの接続を禁止)場合の設定方法です。
sftp 専用ユーザー用のグループを作る
グループを作成し、sftpのみを許可したいユーザーはこのグループに追加する。このではsftponlyというグループを作成する。
groupadd sftponly
ユーザーのホームディレクトリのアクセス権限を変更する。
ユーザーのホームディレクトリの所有者をrootに変更する。chrootのためこれをしないとWinSCPだと以下のようなエラーでる。
このままだとユーザーがファイルのアップロードができないのでpublic_htmlディレクトリを作成し、このディレクトリにはユーザーを所有者とする。ここではuser01に対して操作をする。
chmod 755 /home/user01/
chown root:root /home/user01/
mkdir /home/user01/public_html/
chmod 755 /home/user01/public_html/
chown user01:user01 /home/user01/public_html/
ユーザーアカウントのsftp 専用グループへの追加
sftpのみを許可したいユーザーをグループに追加する。ここではuser01をsftponlyグループに追加する。
usermod -aG sftponly user01
以下のコマンドを実施してユーザーがグループに追加されたことを確認する。
groups user01
user01 : user01 sftponly
という風にsftponlyグループに追加されていることを確認する。
sshdの設定変更
OpenSSLのサーバーコンフィグを変更してsftponlyグループのユーザーにsftpで自分のホームディレクトリへのアクセスのみを許可するようにする。
# override default of no subsystems
#Subsystem sftp /usr/libexec/openssh/sftp-server #コメントアウト
Subsystem sftp internal-sftp # 追加する。
# コンフィグファイルの末尾に追加する。sftponlyグループにのみ適用する。
Match Group sftponly
ChrootDirectory /home/%u # ホームディレクトリのみアクセス可能
ForceCommand internal-sftp # sshでの接続を禁止する
PasswordAuthentication yes # パスワードを認証を行う場合に追加
参考サイト
chrootされたsftp専用ユーザを作るメモ
Linuxでユーザーをグループに追加する
SFTPでディレクトリ制限ありなユーザを作成する
Linux 新規グループの作成 - groupadd