Ubuntu18 チェンジルート付きでSFTPユーザーの追加

Linux

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;
}

さて・・・これで設定は完了だ。
これで接続できるようになることを祈ります。

コメント

タイトルとURLをコピーしました