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が入っている為、新規にインストールする必要は無い