4月18日の記事「AndroidスマホでAlpine Linuxを動かす」の続き。
今回は、Androidスマートフォン SONY Xperia XZ2の中で動作するAlpine LinuxにてFTPサーバを立ち上げ、LAN内のPCからFTP接続した。
AndroidスマホにはFTPサーバのアプリが有るが、Androidスマホで動作するAlpine LinuxでもFTPサーバを構築し運用する事が出来る。
VMware WorkstationやVirtualBoxにデプロイしたAlpine LinuxにてFTPサーバを構築出来る事は、勿論言うまでも無い。
以下は、Limbo PC EmulatorとvsftpdとFFFTPの設定に関するメモ。
当方の環境
・スマホ(ホスト機):SONY Xperia XZ2 / Android OS 9
・ホスト機の通信環境:WLANと4G回線
・エミュレータ:Limbo PC Emulator 2.10.0
・ゲストOS:alpine-virt-3.11.5-x86_64.iso
・ソフトウェアキーボード:Androidアプリの「Hacker's Keyboard」
Limbo PC Emulator、vsftpd、FFFTPで設定が必要。
Limbo PC Emulatorの設定
Limbo PC Emulatorにて通信のフィルタリング設定が入っているようで、ゲスト機(FTPクライアント)から外部機器(FTPサーバ)へ接続出来るものの、外部機器(FTPクライアント)からゲスト機(FTPサーバ)へ接続出来ない。
しかし、Host Forward設定で通したいポート番号を指定すれば外部機器からも接続が可能である。
ゲスト機(Alpine Linux)を一旦落とし、Network設定のHost Forwardに以下を設定。
構文は hostfwd=ユーザPC側tcp|udp:ユーザPC側IPアドレス:ユーザPC側port-ホスト機側アドレス:ゲスト側port
qemuコマンドと同じ構文だ。
hostfwd=tcp::22222-:22
自分の環境では、ユーザPC(Windows機)とホスト機(Nexus7)のIPアドレスはDHCPによる自動設定につき、省略した。
ユーザPC側のPort番号は21に設定するとLimbo PC Emulatorが落ちる為、適当に2221を入れてみた。
PCからSSHでAlpine Linuxにアクセスしたい場合は、以下のように追記が可能である。
hostfwd=tcp::22222-:22,hostfwd=tcp::22221-:21
Tera TermやPuTTY等SSHクライアントツールやsshコマンドでアクセスする際は、ポート番号22221を指定。
vsftpdの設定
vsftpd.confの編集前に、公開するディレクトリの作成とパーミッション設定。
自分の環境では/pubをFTP公開用のディレクトリとした。
# mkdir /pub # chown nobody:nogroup /pub
自分の環境では、設定ファイルvsftpd.confのパスは/etc/vsftpd/vsftpd.conf
Limbo PC Emulatorのネットワーク設定はNATのみである為、Passiveモードで。
設定内容に関しては以下のリンク先が分かり易い。
http://www.nina.jp/server/redhat/vsftpd/vsftpd.conf.html
設定完了後はvsftpdを立ち上げなおし、設定内容に問題が無いか確認する。
確認の為 vsftpd /etc/vsftpd/vsftpd.conf を実行した際、設定内容に整合性が無い場合やスペルミス等が有ると該当する行が出力される。
# rc-service vsftpd stop # rc-service vsftpd start # vsftpd /etc/vsftpd/vsftpd.conf
以下はvsftpd.confの設定内容。ここでは明示的に設定している行のみ載せている。
Anonymousログインに関する内容等、余計な設定も一緒に載っていると思われるが、それに関してはここでは触れない。
listen=YES anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES ascii_upload_enable=YES ascii_download_enable=YES ftpd_banner=Welcome to FTP Test service. chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list pam_service_name=vsftpd local_root=/pub anon_root=/pub allow_writeable_chroot=YES pasv_enable=YES pasv_min_port=60001 pasv_max_port=60005 pasv_promiscuous=YES port_enable=YES pasv_addr_resolve=YES
FFFTPの設定
次はクライアント側の設定。ここでは設定変更箇所のみ載せている。
[ 拡張タブ内 ]
PASVモードを使う:チェック
ポート番号:22221 Limbo PC EmulatorのHost ForwardのユーザPC側Port番号と同じ値
セキュリティ:自動認識
[ 暗号化タブ内 ]
FTPS (Explicit)で接続:チェック
FTPS (Emplicit)で接続:チェック
[ 特殊機能タブ内 ]
PASVで返されるアドレスを無視:にチェック
Windows PC側の設定
当項目もクライアント側の設定。
Windows PCをクライアント機とする場合、Windowsファイアーウォールの設定をいじる必要がある。
Windowsシステムツール - コントロールパネル - システムとセキュリティ - Windows Defenderファイアーウォール - 詳細設定の順に移り、受信の規則と送信の規則にてLimbo PC Emulatorのhostfwdで設定したポート番号を許可する設定を入れる。
FTP設定後の確認
Limbo PC Emulator、vsftpd、FFFTPの各設定を終えたら、FFFTPを立ち上げてAlpine Linux内のFTPサーバにアクセスしてみる。
/pub内のファイルがFFFTPのウインドウ内に表示されたら、PC~FTPサーバ間でファイルのコピーを試行。
クライアント側からサーバにアクセス出来ない場合...
①ping打ってリプライ来るか確認。
・リプライ来るならvsftpの設定もしくはFTPクライアント側の設定の問題。
②FTPのサービスが動いているか確認。
・rc-statusコマンドを叩き、vsftpdサービスが動いているか確認。
・vsftpdサービスが動いていなかったらrc-service vsftpd startで立ち上げる。
③FTPクライアントツールの設定を確認。
・ポート番号は21ではなく上記で設定した22221になっているか。
・パッシブモードが有効になっているか。
④ユーザのアクセス権を確認。※ここで言うアクセス権はchownやchmodとは関係無い。
・/etc/vsftpd.chroot_listファイルにユーザ名の記載が有るか。
・/etc/vsftpd.chroot_listファイルのパスは正しいか。
⑤公開しているディレクトリのパーミッションを確認。
・読み込み権と書き込み権が有るか確認。
・自分の場合、公開しているディレクトリはchmod 777に設定している。
⑥他のアプリを立ち上げると、Limbo PC Emulatorが落ちる。
・設定画面内「Advanced」の「High Priority」にチェックを入れ、Alpine Linuxを立ち上げる。
FTPの暗号化通信について
2022/1/11追記
当記事では暗号化に関する設定には触れておりません。
下記リンク先の「Alpine LinuxのFTPで暗号化通信 FTPS編」と「Alpine LinuxのFTPで暗号化通信 SFTP編」をご参照ください。
リンク集
https://alpinelinux.org/ Alpine Linux
https://pkgs.alpinelinux.org/contents? Alpine Linux packages
https://sourceforge.net/projects/limbopcemulator/ Limbo PC Emulator
https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard&hl=ja Hacker's Keyboard
https://www.sonymobile.co.jp/xperia/softbank/xz2/spec.html SONY Xperia XZ2
https://security.appspot.com/vsftpd.html vsftpd
https://github.com/ffftp/ffftp FFFTP
Alpine Linuxに関する記事
https://debslink.hatenadiary.jp/entry/20200418/1587204948 AndroidスマホでAlpine Linuxを動かす
https://debslink.hatenadiary.jp/entry/20211024/1635075047 Alpine Linuxの保守用コマンド (2021/10/24追加)
https://debslink.hatenadiary.jp/entry/20211228/1640668431 Alpine Linuxでawallを使ってiptables設定 (2021/12/28追加)
https://debslink.hatenadiary.jp/entry/20220101/1640973274 Alpine LinuxのFTPで暗号化通信 FTPS編 (20221/1追加)
https://debslink.hatenadiary.jp/entry/20220111/1641903376 Alpine LinuxのFTPで暗号化通信 SFTP編 (2022/1/11追加)