Android搭建Samba 并使用OTG存储

2022-11-28

需求背景

在对家用Nas不断地探索中,感觉不论用什么设备,都感觉费电+吵+不安全,直到我突然意识到,Android也是Linux。

实验设备

硬件设备:LG g8 操作系统:Android 10,已经root 操作软件:Termux,非Google Play版

操作步骤

安装Termux

需要注意请不要在Google Play下载此软件,会提示有功能限制。去github下载release或者F-Droid下载安装就可以了。

更换Termux源

更换源然后更新软件,选个离自己近的就可以。

termux-chgange-repo
pkg upgrade

安装sshd

为了操作方便,直接安装sshd,然后从其他电脑连接操作就可以了。

pkg install openssh                    #安装openssh
sshd                                                      #启动ssh服务端
id                                                         #查看自己的用户名,类似于u0_a**
passwd            #为自己设置一个密码
ifconfig                                            #查看自己的ip地址
ssh u0_a341@10.***.***.*** -p8022#远程连接,注意termux上的sshd默认端口是8022

提权

安装sudo,并用sudo任意执行一条命令,再手机上同意提权即可。

pkg install tsu

插入OTG,并修改读写权限

插入并安装成功OTG后,就可以在/storage/下查看到OTG的可读(注意,此时还不可写)目录。 然后mount重新mount下OTG,实现可写(我估计只需要mask=7就可以,不过这样也没问题,mount命令不是很熟练):

mount -o rw,multiuser,mask=7,derive_gid,default_normal,remount /storage/xxxx-xxxx

配置Samba

先安装必要的软件并且初始化存储:

pkg install samba
termux-setup-storage

然后开始修改配置文件(termux默认的samba配置文件是$PRIFIX/etc/samba/smb.conf),这个文件并不存在,需要手动创建一下,然后复制默认的samba配置来初始化这个文件:

mkdir$ PREFIX/etc/samba
cp /data/data/com.termux/files/usr/share/doc/samba/smb.conf.example $PREFIX/etc/samba/smb.conf

修改这个配置的storage节内容,把OTG的存储配置过去:

[storage]
path = /storage/xxxx-xxxx
writable = yes

结下来创建一个samba用户就可以了:

smbpasswd -L -a samba

最后由于Android不允许使用1024下面的端口,所以我们将termux的samba使用的4445端口映射到通用的445端口上去(这个时候root的用场就派上了):

sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445

使用termux执行smbd,就可以在各个samba客户端上来读写文件了。

整理成脚本

为了方便操作,将samba操作整理为脚本

touch $PREFIX/bin/samba
chmod +x $PREFIX/bin/samba

samba脚本的内容

#!/bin/bash
case $1 in
start)
sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
smbd
;;
stop)
sudo kill -10 ``sudo ss -lntp | grep smbd | head -1 |awk '{print $4 " " $NF}'| awk -F "[: =,]" '{print $6 }'``
sudo iptables -t nat -D PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -D OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
;;
restart)
sudo kill -10 ``sudo ss -lntp | grep smbd | head -1 |awk '{print $4 " " $NF}'| awk -F "[: =,]" '{print $6 }'``
sudo iptables -t nat -D PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -D OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
smbd
;;
*)
echo 'Samba Service'
echo 'samba start'
echo 'samba stop'
echo 'samba restart'
esac

参照与引用

安卓与电脑的极速共享

Reddit: Using termux as SAMBA server?