とあるタスクでSFTP接続に関して調べたため、自分への復習も兼ねてアウトプットします。
SFTP接続とは
SFTP(SSH File Transfer Protocol)は、SSHトンネルを利用して、サーバー間でファイルのやり取りができるプロトコルです。通常のFTPと比較して、やり取りが暗号化されているため、より安全にファイルのやり取りができます。
やりたいこと
タスクでは、下記内容を行いました。
・接続するサーバー上にSFTPでアクセスできる特定のユーザーアカウントを作成する。
・サーバーにホスティングされているWordPressの特定のディレクトリにファイルを送る。
※サーバーはAWSのLinuxサーバーを使用しております。
手順
1.SSH接続をしたのち、接続するサーバー上にSFTPでアクセスできる、特定のユーザーアカウントを作成する
# サーバーにSSH接続をする。
ssh -i {秘密鍵情報} (ユーザー名)@(サーバーのIPアドレス)
# SFTP接続設定を行うために管理者権限設定
sudo su
# ユーザーを作成する(例: sftp_user)
useradd sftp_user
# パスワード設定
passwd password
# ユーザーが作成されているか確認
cd /home
ls
2.作成したユーザーのユーザーディレクトリに「755」権限を付与する
chmod 755 /home/sftp_user
# パーミッションの確認
ls -la
3.sshd_config
(サーバーのSSHの設定ファイル)でSFTP設定をし、SFTPユーザーのみパスワード認証をする。
→PasswordAuthentication yes
にすることで、ユーザーはパスワード認証によってSFTP接続ができる。
→ForceCommand internal-sftp
にすることで、このユーザーはデフォルトSFTP接続で、ssh接続は行わないという設定を行う。
vi /etc/ssh/sshd_config
→ Match User sftp_user
PasswordAuthentication yes
ForceCommand internal-sftp
# sshdの再起動
systemctl restart sshd
4.ユーザーディレクトリにマウントする用のディレクトリを作成する
cd /home/sftp_user
mkdir wp-content
5.ユーザーディレクトリをWordPressのファイルがホスティングされているパブリックディレクトリにマウントする
# ユーザーディレクトリをWordPressのファイルがホスティングされているパブリックディレクトリにマウントする
# mount --bind (マウントする側のディレクトリ)(マウントされる側のディレクトリ)
mount --bind /var/www/html/wp-content /home/sftp_user/wp-content
マウントされる側のディレクトリに上記/home/sftp_userがあるかどうか確認する。
mount
6.マウントの永続化設定をし、正しく適用できているのかを確認する。
# fstabファイル(マウントの設定について書かれたファイル)を編集して永続マウントの設定を追加
vi /etc/fstab
# 下記の永続マウントの設定を追加する
/var/www/html/wp-content /home/sftp_user/wp-content none bind 0 0
# 永続化マウントの設定が適用されているのかを確認
mount -a
7.SFTPクライアントから接続をし、特定のディレクトリにファイルを転送する
例)WinSCP、FileZilla
ディレクトリの権限
ディレクトリに権限をつける理由は、セキュリティとアクセス制御のためです。
セキュリティ: サーバに接続できた人全員がディレクトリ内のファイルに対して変更ができないようにし、データの破壊等を防ぐため
アクセス制限: 認証されたユーザーでも、必要以上の権限(書き込み権限等)を付与しないことによって、意図しない変更を防ぐため
ディレクトリの権限変更はchmod
、所有者変更はchown
で行います。
権限 | 説明 | 数値表現 |
---|---|---|
読み取り (r) | ファイルやディレクトリ内容の閲覧が可能 | 4 |
書き込み (w) | 内容の変更や新しいファイルの作成が可能 | 2 |
実行 (x) | ファイルの実行、ディレクトリへのアクセス | 1 |
例)750→所有者はすべての権限、所有者グループのユーザーは読み取りと実行、その他の方は権限なし
最後に
最後まで読んでいただき、ありがとうございます!