0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

私的サーバー構築日誌:公開鍵の送付専用ユーザー

Posted at

能書き

私的サーバー構築日誌:仕切り直しからの自宅サーバー構築、前回の続きです。

前回はオレオレ認証局で証明書を認証しまして、公開鍵(及び秘密鍵)を作成できる環境を作りました。

ここで問題になるのが公開鍵の送付です。

セキュリティを鑑みると、最終的には ssh を公開鍵認証するようにしたいのです。しかしその為には、クライアントマシンで作成した公開鍵をサーバーマシンに送付しなければなりません。

USBメモリで物理的に運搬、でも良いのですが一手間掛かります。折角なので電子的に送付できるようにしてスマートな操作を実現したい。

そこで、公開鍵送付専用のユーザーを作成する事にしました。

調べた結果、sftp なら OpenSSH だけあれば構築できるようです。余計なモジュールのインストールは不要。chroot 設定も可能。操作体系は ftp 準拠なので、変なコマンドを実行されてしまう事もありません。

この問題は以前も取り上げましたが、今回はユーザー名などを変更します(単純に、私の好みによります)

参考文献

目標

  • 公開鍵をsftpで運搬できるようにします。
    • sftp用のユーザーを用意します。
    • ディレクトリなどを用意し、手順を確立します。

サーバー設定

スナップショット

スナップショットだいじ。超だいじ。

サーバー
sudo zfs snapshot tank/root/ubuntu@$(date +%Y%m%d_%H%M%S)_before_transporter

ユーザー追加

  • ユーザー名は transporter
  • ホームディレクトリ無し
  • ログイン禁止

上記を踏まえて、下記のコマンドを実行します。ユーザー作成とパスワード設定になります。

サーバー
sudo useradd -s /usr/sbin/nologin -M transporter
サーバー
sudo passwd transporter

追加したユーザーの sftp 設定

transporter は共通鍵の送付専用です。その送付対象となる共通鍵ファイルは/srv/transportディレクトリに置く事とします。異論もおありでしょうけども、私はこう決めました!
と言う訳で皆様それぞれの思想に従って細かい点は調整をお願いします。

下記のコマンドを実行します。

サーバー
sudo mkdir /srv/transport
サーバー
cat | sudo tee /etc/ssh/sshd_config.d/transporter.conf >/dev/null <<___
Match User transporter
  X11Forwarding no
  AllowTcpForwarding no
  PermitTTY no
  PasswordAuthentication yes
  ForceCommand internal-sftp
  ChrootDirectory /srv/transport
___

ssh 設定ファイルを作成したらsshdを再起動します。

サーバー
sudo systemctl restart sshd

ディレクトリ作成

確認用のファイルとディレクトリを準備します。

どうも接続先ディレクトリは root がオーナーで、root 以外の書き込みが禁止されていないと、接続に失敗するようです。従って書き込み確認用にサブディレクトリを用意しておきます。主に公開鍵をやり取りするのでpublickeyというディレクトリ名にします。

サーバー
cd /srv/transport
sudo mkdir publickey
サーバー
sudo chgrp transporter publickey/
サーバー
sudo chmod g+w publickey/

こういう場合は権限に注意して確認します。

サーバー
$ ls -l
total 1
drwxrwxr-x 2 root transporter 2 Oct 19 20:14 publickey

確認

接続と転送

実験用に、公開鍵ではないテキストファイルを置きます。

サーバー
cd /srv/transport
echo hello,world | sudo tee hello.txt >/dev/null

別マシンからサーバーへtransporterユーザーでssh接続します。私はWin10マシンで実行しました。primary.homeが私のサーバーマシン名です

下記のように、これは失敗します。

クライアント
>ssh transporter@primary.home
transporter@primary.home's password:
PTY allocation request failed on channel 0
This service allows sftp connections only.
Connection to primary.home closed.

実は scp も失敗します。解説記事は見つからなかったのですが、どうも ssh 接続できないと scp も出来ないようです。

クライアント
>scp transporter@primary.home:/hello.txt .
transporter@primary.home's password:
protocol error: mtime.sec not present

sftp は成功します。

クライアント
>sftp transporter@primary.home
transporter@primary.home's password:
Connected to primary.home.
sftp> pwd
Remote working directory: /
sftp> ls -l
-rw-r--r--    1 root     root           12 Oct 19 11:22 hello.txt
drwxrwxr-x    2 root     1002            2 Oct 19 11:14 publickey
sftp> get hello.txt
Fetching /hello.txt to hello.txt
/hello.txt                                                                            100%   12     0.1KB/s   00:00
sftp> cd publickey
sftp> put hello.txt
Uploading hello.txt to /publickey/hello.txt
hello.txt                                                                             100%   12     0.3KB/s   00:00
sftp> ls -l
-rw-rw-r--    1 1002     1002           12 Oct 19 11:24 hello.txt
sftp> pwd
Remote working directory: /publickey
sftp> exit

putしたhello.txtを確認。

サーバー
cd /srv/transport/publickey/
ls -l

hello.txtが存在する事を確認します。

サーバー
$ cd /srv/transport/publickey/
$ ls -l
total 1
-rw-rw-r-- 1 transporter transporter 12 Oct 19 20:24 hello.txt

動作確認が終了したら、不要なファイルは削除しましょう。

サーバー
cd /srv/transport
sudo rm hello.txt
サーバー
cd publickey
sudo rm hello.txt

仕舞い

動作確認できたら/etcを Subversion 登録しましょう。

サーバー
sudo svn st /etc | grep "^?" | cut -b9- | sudo xargs -I{} find {} -type f -or -type d -or -type l | sudo xargs -t svn add
sudo svn ci /etc -m"set 'transporter' user"

これで、サーバーマシンとクライアントマシンの間で公開鍵を送付する手段を確保できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?