ubuntuにてドキュメントルートの特定の下層ディレクトリに接続できるSFTP専用のユーザーを作ります。
工程がめっちゃ多い。
パーミッションあたりがうまく出来てないと、他の設定に問題がなくてもSFTP接続ができないです。
ユーザーの追加
adduserコマンドで聞かれる所は未入力でエンターで飛ばしていい。
$ sudo adduser [ユーザー名]
ユーザー `[ユーザー名]' を追加しています...
新しいグループ `[ユーザー名]' (1002) を追加しています...
新しいユーザー `[ユーザー名]' (1003) をグループ `[ユーザー名]' に追加しています...
ホームディレクトリ `/home/[ユーザー名]' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました
koho のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
フルネーム []:
部屋番号 []:
職場電話番号 []:
自宅電話番号 []:
その他 []:
以上で正しいですか? [Y/n] Y
グループの追加
今回は、このユーザーをwww-dataグループに所属させます
グループ作成
$ groupadd www-data
グループ確認
$ cat /etc/group
グループにユーザーを追加
$ sudo usermod -aG www-data [ユーザー名]
ubuntuなどのDebian系ならば
$ adduser [ユーザー名] www-data
鍵を作る
ローカル側で作業しても良いが、今回はそのユーザーで再ログインしてssh-keygenします。
念の為、ディレクトリを自分の場所に移動してからssh-keygenする
$ su [ユーザー名]
パスワード:
$ cd
~$ pwd
/home/[ユーザー名]
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/[ユーザー名]/.ssh/id_rsa): [エンター]
Created directory '/home/[ユーザー名]/.ssh'.
Enter passphrase (empty for no passphrase): [エンター]
Enter same passphrase again: [エンター]
Your identification has been saved in /home/[ユーザー名]/.ssh/id_rsa
Your public key has been saved in /home/[ユーザー名]/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:記号の羅列 [ユーザー名]@サーバー名
The key's randomart image is:
+---[RSA 3072]----+
| . |
| . o |
| . + |
| o * * |
| * S . . |
| + O B.=.= . |
| . * . OEX.ooo|
| + B++o..|
| ...o+o |
+----[SHA256]-----+
.sshの中を見るとファイルが2つできている
$ ls .ssh
id_rsa id_rsa.pub
id_rsa 秘密鍵
id_rsa.pub 公開鍵
id_rsa.pub 公開鍵の設定
公開鍵はそのサーバーの.sshフォルダにauthorized_keysとして保存します。
id_rsa.pubのファイル名をauthorized_keysに変更して、パーミッションを600にします。
$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
id_rsa 秘密鍵
秘密鍵は接続したいクライアントに保存します。
私の場合はホスト名.keyというように名前を変更しておきます。
こパーミッションを600にしておきます。
SFTP接続のみの設定
/etc/ssh/sshd_configを編集します。
初期設定で使われているSubsystem sftpの/usr/lib/openssh/sftp-serverより上位互換の個別設定ができるinternal-sftpに切り換えます。
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
そして個々の設定を追加していきます
Match User [ユーザー名]
ChrootDirectory [このユーザーが接続できるディレクトリ]
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
最後に再起動
$ sudo systemctl restart sshd
パーミッションの設定
さて、最後にパーミッションを設定します。
チェンジルートはrootユーザーrootグループである必要があります。
そしてその下層にpublicなど775にしたユーザーが操作できるディレクトリを下げて設置する必要があります。
これができてないと、SFTPで接続ができないです。
$ chown root:root /var/www/hoge
$ chmod 755 /var/www/hoge
$ mkdir /var/www/hoge/public
$ chown -R root:www-data /var/www/hoge
$ chmod 775 /var/www/hoge/public
nginxドキュメントルート
/var/www/hoge/publicをドキュメントルートとするnginxの設定を行います。
location /hoge {
alias /var/www/hoge/public;
index index.html index.php;
}
さて・・・これで設定は完了だ。
これで接続できるようになることを祈ります。
コメント