メモのページ - チラシの裏メモ 3枚目

通信技術や気になった事を黙々とメモし続ける

OpenBSDでSFTPサーバの設定

AndroidタブレットVASTKING KingPad SA8とNexus 7(2013)にてゲストOSとして時々立ち上げているOpenBSDを自宅LAN用SFTPサーバとして稼働させるべく、SFTPの設定をした際のメモ。
尚、当記事作成時のOpenBSDの最新版はバージョン7.1だが所有しているAndroidタブレットのゲストOSとしては動作が非常に重たい為、許容範囲内な6.3で実装した。


今回の要件
・vsftpプラスSSL,TSLによるFTPSではなく、sshの拡張機能のSFTPを使用
・ChrootDirectoryで公開ディレクトリを指定
・アカウントはftpuserとする
・エミュレータはLimbo PC Emulatorを使用(アーキテクチャは異なるがVirtualBoxのようなツール)
そもそもOpenBSDとは何ぞや? に関しては以下の記事を参照。
https://debslink.hatenadiary.jp/entry/20220515/1652626120 OpenBSDにリプレース完了


/etc/ssh/sshd_configファイルにて元々設定されている/usr/libexec/sftp-serverを使っても良いのだがchrootでディレクトリ指定をしたい為、internal-sftpを選択。
設定に取り掛かる前に、動作しているOpenSSHのバージョンを確認する。
internal-sftpはOpenSSHバージョン4.8以降で対応。
ChrootDirectoryはOpenSSHバージョン4.9以降で対応。
ssh -Vを打った結果OpenSSHのバージョンは7.7である事が分かった為、internal-sftpとChrootDirectory共に対応している事になる。
併せて、uname -aコマンドで当方の環境も出力させる。

$ uname -a
OpenBSD jpmtkvmsv99.mydns.jp 6.3 GENERIC#490 i386
$
$ bash --version
bash --version
GNU bash, version 4.4.19(1)-release (i386-unknown-openbsd6.3)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$
$ ssh -V
OpenSSH_7.7, LibreSSL 2.7.2
$


SFTP用アカウントの作成
SFTP接続の為のアカウントを別途作成する。useraddコマンドではなく、対話式でユーザ名だけでなくパスワードやディレクトリの設定が出来るadduserコマンドでSFTP用のアカウントを作成。
SFTP用アカウントのユーザ名はftpuserとした。

尚、root権限でコマンドを実行する際はsudoコマンドではなくdoasコマンドを使用している。
doasコマンドに関しては以下のリンク先(BSD界四方山話 第25回 OpenBSD 5.8登場 - sudo(8)を廃止してdoas(1)を導入)を参照。

$ doas adduser
Use option ``-silent'' if you don't want to see all warnings and questions.

Reading /etc/shells
Check /etc/master.passwd
Check /etc/group

Ok, let's go.
Don't worry about mistakes. There will be a chance later to correct any input.
Enter username []: ftpuser
Enter full name []:
Enter shell bash csh git-shell ksh nologin sh [ksh]: ksh
Uid [1001]:
Login group ftpuser [ftpuser]: ftpuser
Login group is ``ftpuser''. Invite ftpuser into other groups: guest no
[no]:
Login class authpf bgpd daemon default pbuild staff unbound xenodm
[default]:
Enter password []:
Enter password again []:

Name:        ftpuser
Password:    ****
Fullname:    ftpuser
Uid:         1001
Gid:         1001 (ftpuser)
Groups:      ftpuser
Login Class: default
HOME:        /home/ftpuser
Shell:       /bin/ksh
OK? (y/n) [y]:
Added user ``ftpuser''
Copy files from /etc/skel to /home/ftpuser
Add another user? (y/n) [y]: n
Goodbye!
$


設定ファイル/etc/ssh/sshd_configの修正
元々有るsftp-serverは使用せずinternal-sftpを使用、SFTP用アカウントanoncvsの設定はコメントアウトしftpuser用に追記する内容に修正した。
・Subsystem sftp internal-sftpを追加
・Match User anoncvs以下をコメントアウト
・Match User ftpuserおよびMatch User ftpuserの各項目を追記

$ doas vi /etc/ssh/sshd_config
:
略
:
# override default of no subsystems
#Subsystem      sftp    /usr/libexec/sftp-server
Subsystem       sftp    internal-sftp

# Example of overriding settings on a per-user basis
# Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand internal-sftp
Match User ftpuser
        X11Forwarding no
        AllowTcpForwarding no
        ChrootDirectory /home/ftpuser
        ForceCommand internal-sftp


公開ディレクトリのパーミッションの設定
chroot出来るようにディレクトリの所有者をrootに設定、rootのみ書き込み権限を付与する。

$ doas chown root /home/ftpuser
$ doas chgrp ftpuser /home/ftpuser

設定後の確認。公開ディレクトリ/home/ftpuserの権限設定は以下のとおり。

$ ls -la /home/ftpuser
total 36
drwxr-xr-x  3 root     ftpuser  512 May 21 09:33 .
drwxr-xr-x  4 root     wheel    512 May 21 09:33 ..
-rw-r--r--  1 ftpuser  ftpuser   87 May 21 09:33 .Xdefaults
-rw-r--r--  1 ftpuser  ftpuser  769 May 21 09:33 .cshrc
-rw-r--r--  1 ftpuser  ftpuser  101 May 21 09:33 .cvsrc
-rw-r--r--  1 ftpuser  ftpuser  359 May 21 09:33 .login
-rw-r--r--  1 ftpuser  ftpuser  175 May 21 09:33 .mailrc
-rw-r--r--  1 ftpuser  ftpuser  212 May 21 09:33 .profile
drwx------  2 ftpuser  ftpuser  512 May 21 09:33 .ssh
$

ftpuserアカウント作成の際に生成されたファイルやディレクトリが有る為、それらは全て削除。

$ doas rm /home/ftpuser/.Xdefaults
$ doas rm /home/ftpuser/.cshrc
$ doas rm /home/ftpuser/.cvsrc
$ doas rm /home/ftpuser/.login
$ doas rm /home/ftpuser/.mailrc
$ doas rm /home/ftpuser/.profile
$ doas rm -rf /home/ftpuser/.ssh

再度、設定後の確認。これで公開ディレクトリの準備が出来た。

$ ls -la /home/ftpuser
total 8
drwxr-xr-x  2 root  ftpuser  512 May 21 09:49 .
drwxr-xr-x  4 root  wheel    512 May 21 09:33 ..
$

一通り設定を終えたら、rcctlコマンドでsshdを再起動させる。

$ doas rcctl reload sshd
sshd(ok)
$

その後は公開ディレクトリに適当にファイルを置き、以下のようになる。

$ ls -la /home/ftpuser/
total 666224
drw-r-xr-x  2 root     sftponly        512 May 18 07:01 .
drwxr-xr-x  4 root     wheel           512 Mar  5 20:41 ..
-rw-r--r--  1 ftpuser  ftpuser      199559 May 18 06:58 OpenBSD_6.3_Errata.pdf
-rw-r--r--  1 ftpuser  ftpuser      557796 May 18 06:57 OpenBSD_6.3_Release_Notes.pdf
-r--r--r--  1 ftpuser  ftpuser        1961 May 18 07:01 README.txt
-rw-r--r--  1 ftpuser  ftpuser   340158464 Mar 25  2018 install63.iso
-r--r--r--  1 ftpuser  ftpuser          65 May 18 07:02 install63.iso.sha256.txt
$


SFTP通信の確認
MacBook AirからWLAN経由で、AndroidタブレットのゲストOSのOpenBSDで稼働しているSFTPサーバにアクセス。
FTPクライアントはCyberduckを使用。
Cyberduckを立ち上げて新規接続から入り、接続方式は「SFTP (SSHによる暗号化FTP)」を選択。
FTPサーバのIPアドレスやポート番号やユーザ名、パスワードを入力し接続ボタンをクリックすると、SFTPサーバに接続する。
SFTP接続の確立の際、「そのホストは現在システムに認識されていません」と書かれたウインドウが表示される。その際は「許可」をクリックしSFTP接続を確立させる。

以下の画像のとおり、ftpuserアカウントでSFTPに接続出来た事がわかる。
また、/home/ftpuserディレクトリが/ディレクトリに見えている事もわかる。


Androidタブレットでの運用に関する問題点
・3〜4年前もしくはそれ以降のハイエンド機種なAndroidスマホにデプロイする方はサクサクと動く。Alpine LinuxのようにCUI画面のフォントサイズが変更出来るのであれば、機種変更し使わなくなったSONY Xperia XZ2でOpenBSDの新しいバージョン7.0や7.1を動かしたい。
・Nexus 7(2013)では発生していないが、VASTKING KingPad SA8ではスリープ状態になるとLimbo PC Emulatorごと落ちる事が有る。
KingPad SA8の方がNexus 7よりサクサク動くのだが、Limbo PC Emulatorごと落ちる事象を直さないと常用は厳しい。


リンク集など
OpenBSDに関する過去の記事
https://debslink.hatenadiary.jp/entry/20220515/1652626120 OpenBSDにリプレース完了
https://debslink.hatenadiary.jp/entry/20220312/1647048957 2022年のNexus 7 (2013)

SFTPに関する過去の記事
https://debslink.hatenadiary.jp/entry/20220111/1641903376 Alpine LinuxのFTPで暗号化通信 SFTP編


doasコマンドについて
https://gihyo.jp/admin/serial/01/bsd-yomoyama/0025 BSD界四方山話 第25回 OpenBSD 5.8登場 - sudo(8)を廃止してdoas(1)を導入
https://man.openbsd.org/doas doas(1) - OpenBSD manual pages
https://qiita.com/belgianbeer/items/b2b63815d7c6c7a171ee sudoがアレなので doasに乗り替えてみる
※OpenBSDバージョン5.8以降では元からdoasが入っている為、新規にインストールする必要は無い