はじめに
SMB、FTPのサーバをAndroid上で立てないと行けないシーンがあったので、その時のメモです。
Andoridはroot権限なしではウェルノウンポート(0~1023)が使用できません。root化済み端末でTermuxでsu -cコマンドを使用して、ウェルノウンポートでsambaサーバを建てようとしましたが、エラーでできなかったので諦めました。
方法
SMB、FTPサーバ自体は、1024以上のポート番号で立て、その後Root権限を使用したポートフォワーディングでウェルノウンポートと接続する感じです。
Termux(もしくはADB Shell)で実行するコマンドは、
su -c iptables -t nat -A PREROUTING -i インターフェース -p tcp --dport 公開したいウェルノウンポート -j REDIRECT --to-port 1024以上のポート番号
です。インターフェース名は、ip aや、ifconfigとかで把握できます。例えば、SSHポートはTermuxではディフォルトでは、8022ですが、以下を実行すれば22とかになります。
su -c iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 22 -j REDIRECT --to-port 8022
自動セットアップ
先ほどのコマンドで設定したポートフォワーディングは再起動すると解消されていしまいます。そのため、起動時に自動でセットアップする必要があります。その時は、Termux:Bootを使用するといいです。インストールした後にTermuxのホームディレクトリで
vim .termux/boot/start_port.sh
を実行し、先ほど実行したコマンドを記述します。あとは、
chmod 775 .termux/boot/start_port.sh
で実行権限をつけてあげればあとは、起動時に自動でポートフォワーディングが設定されます。sshdとかを記述しておいてもいいかもしれません。
おまけ(Termux上でRootユーザとして、pkgでインストールしたプログラムを実行する方法)
そのままsu -cや、suで昇格してもパスが通ってないので見つからない、と言われて実行できません。
なので、パス(/data/data/com.termux/files/usr/bin)を通してやります。恒久的ではなく、ログアウトするまでなら、
su
PATH=$PATH:/data/data/com.termux/files/usr/bin
export PATH
でパスを通せます。この後に任意のTermux上のpkgでインストールしたプログラムRootユーザで実行できます。他のプログラムを呼び出さないものであれば、whichでパスを検索して、su -cで直接パスを指定して実行することもできます。
おわりに
自分は、MiXplorerのファイル共有機能を使用して、FTPとSMBサーバを立てています。Root化済みの端末でのTermuxは、普通のLinuxと同じように本当にいろいろできるので楽しいです。
AndroidでRoot権限奪取のことをRoot化って言うの今になって思うと違和感があるなぁ