sambaを設定して、PCとスマホ間のデータの受け渡しをしてみた
PCとスマホ間でデータの受け渡しを行うことがあります。 数MBとか、数十MB程度であれば、Googleドライブや、USBメモリ経由でも気にならないのですが 数百MBとか、GB単位のファイルとなると、手間も時間もかかります。(「なぜ、そんなデカイものを」という突っ込みは置いといて・・・)
そこで、sambaによるファイル共有を利用してみることにしました。
よく見かけるのは、smb.confに、共有ディレクトリのセクションを追記していく方法ですが、最近(?)では、それとは別に、root 以外のユーザーが共有の追加、修正、削除を行なうことを可能とする機能「ユーザー定義共有」という、コマンドで共有ディレクトリを設定する方法があるようなので、その方法で設定してみました。
環境
PC:Antergos Linux Release 17.6 (デスクトップ:Cinnamon)
Manjaro Linux(Cinnamon)やRaspberry piでも同じ手順で出来るようです。
スマホ:Android 7.0
手順
詳細
1.sambaのインストール
Antergos Linux(Cinnamon)では、デフォルトでsambaがインストールされていました。
しかし、設定ファイルであるsmb.confがありません。どうやら、自分でデフォルトの設定ファイルをダウンロードする必要があるようです。 ArchWikiによると、以下のコマンドでダウンロードできるようです。
2.ユーザー定義共有の作成
共有設定を格納するディレクトリ、および共有するユーザーグループ
$ sudo mkdir -p /var/lib/samba/usershare
システムアカウントとして、sambashareを作成
$ sudo groupadd -r sambashare
作成したディレクトリの所有グループを変更
$ sudo chown root:sambashare /var/lib/samba/usershare
アクセス権を変更(スティッキービット有り)
$ sudo chmod 1770 /var/lib/samba/usershare
sambashare グループにユーザー(自分:Z1000)を追加
ここで追加するユーザーは、Antergosに登録されているユーザーでなければいけない。
ここで追加したユーザーが、下記の共有ディレクトリ登録等のコマンド(net usershare)を実行できるらしい。
3.sambaの設定
/etc/samba/smb.confの設定
以下の設定は、自分だけがPCとスマホでデータを受け渡す事しか考えていないので、Homeディレクトリや、プリンタの共有は行っていません。
globalセクション
usershare path = /var/lib/samba/usershare
;作成を許可するユーザー定義共有の最大数(デフォルトは0らしいので、明示的に指定しないと、共有を作れないらしい)
usershare max shares = 3
;ゲストアクセスを許可しない
usershare allow guests = no
;ユーザーが所有しているディレクトリのみが共有可能とする
usershare owner only = yes
;rootによるサービスへのログインは許可しない
invalid users = root
;パスワードデータベース形式はTDBファイル
passdb backend = tdbsam
;クライアントに、正しいユーザー名とパスワードでログオンを行なわせる
security = user
;プリンタを共有しない
load printers = no
printcap name = /dev/null
disable spoolss = yes
disable spoolss です。spools(sが足りない)とすると、testparmでメッセージが出るので注意。
homesセクション
すべてコメント
; browseable = no
; writable = yes
printersセクション
すべてコメント
; path = /usr/spool/samba
; browseable = no
# Set public = yes to allow user 'guest account' to print
; guest ok = no
; writable = no
; printable = yes
$ testparm
4.サービスの再起動
$ sudo systemctl restart smbd.service
$ sudo systemctl restart nmbd.service
自動起動の設定
$ sudo systemctl enable smbd.service
$ sudo systemctl enable nmbd.service
5.sambaユーザーの作成
$ sudo pdbedit -a -u z1000
6.共有ディレクトリの作成と登録
共有名"Share"で、/home/z1000/Shareを共有する。
$ net usershare add Share /home/z1000/Share MyPrivateShare z1000:F
項目値備考
共有名 | Share | 指定必須 |
共有するディレクトリ | /home/z1000/Share | 指定必須 |
コメント | MyPrivateShare | 指定は任意 |
アクセス権 | z1000:F | ユーザーZ1000に対し、フルアクセスを許可する。 デフォルト(指定しない場合)は、読み取り専用らしいので書き込み権限を追加しないとスマホ側からアップロードできない。 アクセス権の指定は、"ユーザー:"の後ろに R:読み取り専用 D:拒否 F:フルコントロール のいずれかを指定する。 すべてのユーザーを対象とする場合には、ユーザー名をeveryoneとする。 複数のユーザーを指定する場合、","で区切る |
作成した共有ディレクトリの確認や削除は以下の通り
$ net usershare list
共有ディレクトリの情報
$ net usershare info
$ net usershare info Share
共有ディレクトリの削除
$ net usershare delete Share
7.スマホの設定
スマホでは、Flashlight + Clockのファイルマネージャーを使用しました。
こちらの設定の詳細は、省略しますが、5.sambaユーザーの作成で作成したユーザーを指定し、無事データの受け渡しが出来るようになりました。
Googleドライブ経由に比べ、クラウドにアップロードする手間もいらない上、転送速度が格段に速く、快適です。
参考にしたサイト
Samba - ArcWiki
ThinkIT 第4回:Samba 3.0.20以降の新機能を追え(3)
Sambaサーバ構築、5つのべからず:2008年版
smb.conf