====== SFTP サーバー構築 ====== [[:linux|一つ上へ]] ===== 概要 ===== sftp-userというユーザーを作成し、''/sftp/chroot/home/sftp-user''というディレクトリ内のみ アクセス可能でログイン不可能の設定でSFTPサーバーを構築する。 ===== 手順 ===== bashログイン不可能なユーザーを作成。ディレクトリを''/sftp/chroot/home/sftp-user''とする。 useradd -m -d /sftp/chroot/home/sftp-user -s /sbin/nologin sftp-user ディレクトリが作成されなかった場合は作成する。 SFTPユーザーのルートディレクトリとする際、所有者をrootにしておかないとログインできないため、 所有者とグループを''root:sftp-user''としておく。 更に、このディレクトリの中に、書き込み可能なディレクトリを用意しておく。 こちらは所有者とグループを''sftp-user:sftp-user''に設定し、 パーミッションは700としておく。 mkdir -p /sftp/chroot/home/sftp-user chown root:sftp-user /sftp/chroot/home/sftp-user chmod 755 /sftp/chroot/home/sftp-user mkdir /sftp/chroot/home/sftp-user/writable chown sftp-user:sftp-user /sftp/chroot/home/sftp-user/writable chmod 700 sftp-user:sftp-user /sftp/chroot/home/sftp-user/writable ここで、ホームディレクトリ自体は750としてしまっても良い。その方が他のユーザーから読み取られる心配は少なくなる。 鍵を作成する。 ssh-keygen -t rsa 4096 # 名前はsftp-keyで作成、パスフレーズは無しにする 鍵を格納するためのディレクトリを作成し、公開鍵の内容を貼り付けて保存する。 authorized_keysファイルは、ユーザーが参照できるように所有権を設定しておく。 mkdir -p /sftp/chroot/sshkeys/sftp-user vim /sftp/chroot/sshkeys/sftp-user/authorized_keys chown sftp-user:sftp-user authorized_keys chmod 600 authorized_keys ==== SFTP で操作できるディレクトリを制限する ==== ユーザーが操作できるディレクトリを制限したいので、sshd_config を編集して以下を追加する。 ''%u''はユーザー名を表す。 # User Configuration Match User sftp-user ChrootDirectory /sftp/chroot/home/%u AuthorizedKeysFile /sftp/chroot/sshkeys/%u/authorized_keys ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no PasswordAuthentication no ここでは、** ForceCommand ** ディレクティブにinternal-sftp を指定することでsftpでの接続のみに制限している。 変更後、サービスを再起動して反映する。 systemctl restart sshd ==== 構成例2-Chrootなし、パスワード認証での設定 ==== 通常のユーザーのホームディレクトリをルートディレクトリとし、パスワード認証で接続するよう設定する。 また、ルートディレクトリ直下で読み書き可能とする。 ユーザーを作成し、パスワードを設定 useradd -s /usr/sbin/nologin sftp-pass passwd sftp-pass sshd_configを編集し、以下を追加 Match User sftp-pass ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no sshd を再起動する systemctl restart sshd ユーザーのホームディレクトリの所有者をrootに変更し、 パーミッションを775にする。 chown root: /home/sftp-pass chmod 775 /home/sftp-pass