Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

これまでmacOSとRaspberry Pi で使ってきたnetatalkが脆弱性によりサポートから外れました。お手軽だったのに残念です。aptからはインストールできなくなってしまった。

2023年10月、2年振りにOSがbookwormへメジャーバージョンアップしたタイミングで、改めてRaspberry Pi OSにsambaを設定してみました。

その後、Raspberry Pi 5が手に入れ、同じように設定しました。

ファイルのやり取り

Raspberry Pi を使う際、ファイルを共有する目的で、使うRaspberry Piとは別のファイルサーバがあると便利です。

もし無ければ、使用している今のRaspberry Piにsambaをインストールしてファイル共有しましょう。同じネットワーク内にあるWindowsやMac、スマホやタブレットからもファイルを共有できるようになります。

単純なファイル送信する方法は他にもあります。

  • scpコマンドで送る
  • FTPソフトで送受信する

シームレスにデスクトップのファイルマネージャーから使うなら、やはりsambaサーバの方がお手軽です。

※この記事は2023年11月3日に公開した記事を再編集しています。

sambaのインストール

先ずはRaspberry Piにsambaをインストールします。

sudo apt update
sudo apt install samba

状況によっては次のライブラリやソフト類もインストールします。

sudo apt install samba samba-common-bin smbclient cifs-utils

設定ファイルの場所は/etc/内で、これを編集して使います。

sudo nano /etc/samba/smb.conf

変更を適用するためのsambaサーバを再起動するコマンド

sudo systemctl restart smbd nmbd

nmbdも指定しておきます。※nmbdはNetBIOSのネームサービス

Windows の「ネットワークコンピューター」 やMacの「ネットワーク」のコンピューター一覧に表示されるでしょう。

sambaをインストールした後は、samba.confの設定と、Raspberry Pi内で共有するディレクトリの権限管理を設定していきます。

ファイルの権限について

共有されるファイルやディレクリは、権限の管理をして利用します。

権限はパーミションと言い、755、666、644など数字や、+xといったrwxで表せます。

パーミション(Permission)について

権限は数字かrwx-で指定できます。

chmod 0777 ディレクトリ名

所有者グループ他ユーザー
読込(read)4☑️☑️-
書込(write)2☑️☑️-
実行(execute)1☑️☑️-
770

パーミション770

読込み権限書込み権限実行権限権限なし
rwx-
4210

権限別

全部の権限ありは、単に足し算すれば良く、4+2+1 = 7 これを所有者・グループ・他ユーザーの3つを指定してれば「777」となり、よく見かけますね。

同じくよくある「755」は、表にするとこうなります。

所有者グループ他ユーザー
読込(read)4☑️☑️☑️
書込(write)2☑️--
実行(execute)1☑️☑️☑️
755

パーミション755

分かりやすいのは数字でしょうか。

これらを踏まえて設定していくことになります。

chmod 0755 /home/raspida/Public

■Pi 5は8GBモデルがオススメ

smb.confの編集

指定したディレクトリをsmb.confの編集(または追記)で指定していく形式です。

sudo nano /etc/samba/smb.conf

smb.confでは、#または;がコメントアウトになります。シャープで文字列のメモとし、セミコロンで値をコメントアウトする使い方です。

先に[global]セクションに基本を追記しておきます。

[global]
    #追加2行 文字化け対策
    unix charset = UTF-8
    dos charset  = CP932

    #インターフェイス別のipアドレス範囲を指定もできる
;   interfaces = 127.0.0.0/8 eth0 (デフォルト値)
    interfaces = 127.0.0.0/8 eth0

    #上記範囲内のホストだけに接続を限定させるためYes
;   bind interfaces only = yes(デフォルト値)
    bind interfaces only = yes

最初の2行にある文字化け対策は追記しておきましょう。

インターフェースに、IPアドレス範囲か開始のアドレスを設定できます。特別な構成にしないのなら、例のようなデフォルトのままでもOKです。

smb.confのコメントにもあるようにファイアウォールを設定していない環境なら、bind interfaces only = yesにした方が良いとのことです。

デフォルト値のままなので、セミコロンを外すだけでOKです(コメントアウトを外す)。

例:インターフェイス名(eth0の後にIPアドレス範囲を指定。サブネットマスクも記載)

interfaces = eth0 192.168.2.10/24 192.168.3.10/255.255.255.0

次に、最下部へ共有するディレクトリを明記していきます。

共有するディレクトリを作成する

ここでは、home直下に「public」というディレクトリを作成し設定していきます。

sudo mkdir /home/public

このままだと所有ユーザーと所有グループはrootのままです。

ゲストアカウントでアクセスさせるので、特に権限はそのままでこのまま進めますね。

smb.confの最下段に設定を追記します。色々と設定方法はありますが、最低限の設定となると次の通りです。

[public]
    path = /home/public
	guest ok = Yes
	guest only = Yes
	read only = No

例では、最初の[public]は共有名なので、分かりやすいよう作成したディレクトリと同名で記載しました。

ゲスト関係を2つ、そしてディレクトリの場所、読み込みのみをNOとしました。

ここまでを保存し内容を反映させるため、設定ファイルであるsmb.confをリロードするか、sambaサービスを再起動しておきます。Raspberry Pi自体を再起動しても構いません。

sudo smbcontrol all reload-config

または

sudo systemctl restart smbd nmbd

またはRaspberry Piの再起動。

Samba設定ジェネレーター

smb.confをサクッと作成するジェネレーターを用意しました。

ゲスト接続の確認

ログインの必要が無くゲストでアクセスできて、自由にファイルの受け渡しができるといった形式です。自分だけが使うだけなら、これでいいのかなとも思います。

globalセクションは一度設定すれば済みます。

最下部に別のディレクトリを指定していけば複数のディレクトリを共有できます。別の権限管理でも大丈夫です。

この状態でRaspberry Pi 5がMacのネットワーク内に現れ、作成したpublicディレクトが表示されました。

WindowsならエクスプローラーにIPアドレス¥パスでアクセスできます。¥¥192.168.X.X¥public

ゲストとして接続すれば、publicディレクト内へアクセスできます。

試しに適当なファイル(test.txt)などを作成してから開いてみます。

sudo touch /home/public/test

もしくはテキストファイルを作成
sudo nano /home/public/test.txt

ユーザーとパスワードでアクセス設定する場合

次は、予め決められたユーザーがアクセスできる共有をさせる場合です。これが一般的でしょうか。

忘れがち(私が!?)なのは、sambaでユーザー&パスワードを利用する場合、sambaへユーザーを加える前に、システム上にそのユーザーが存在しないとなりません。

現在ログインしているユーザーとは別に、ここでは例として「piblack」というユーザーを追加します。

更にsmbpasswdでsambaに登録してあげて、そこで設定するパスワードでアクセスすることになります。

ユーザーの追加とsambaへ登録

新たにユーザーを作成しsambaに登録します。

そのままsambaユーザーを新規作成だと、システム側に該当ユーザーがいないためエラーになります。

sudo smbpasswd -a piblack
New SMB password:
Retype new SMB password:
Failed to add entry for user piblack.

先にシステム側へユーザーを登録するのですけど、ログインさせるユーザーである必要がないため、オプションを付けてユーザーを作成する方法を採りました(ホームディレクトリを作らない、ログインできないオプション)。

sudo adduser --system --group --no-create-home piblack
sudo smbpasswd -a piblack

こちらの方がスマートで、後からsambaユーザーを削除するのもシンプルで分かりやすいと思いました。

既存のユーザーを登録する場合

もしも新たにユーザーを作成せす、Raspberry Pi OSで使っているユーザーをsambaに登録するならadduserは実行せずsmbpasswdだけで構いません。

この時Uオプションを追加して既存のユーザー名にします。

sudo smbpasswd -aU 既存ユーザー名

sambaへ接続するパスワードは、この時に設定したsmbpasswdコマンドのパスワードを利用します。

取り出すだけなら既存ユーザー登録が便利かも?!

既存ユーザーを登録するだけで、smb.confを修正・追記しなくても、Homeディレクトリの権限と同じユーザーですから登録したパスワードでアクセスは可能です。ファイルを取り出すことはできます。 逆にラズパイ側へはPCユーザーの権限がありませんからそのままでは書き込めません。

adduser、useradd、smbpasswd、pdbeditが分かりづらい話

ユーザー絡みで分かりづらいのが、adduserとuseraddです。どちらのコマンドでもオプションこそ違えどユーザーを作成できることです。

Raspberry Pi はDebian系なので、推奨されているのはadduserになっています。

しかし、sambaでアクセスするためだけのユーザーであれば、ホームフォルダは必要ないため、useraddでも良さそうな気がしましたが、adduserでもオプションでイケますね。

useraddは古い?

useraddはパスワードの設定をsudo passwd ユーザー名で別に設定する必要があります。

adduserの場合

sudo adduser test
ユーザ `test' を追加しています...
新しいグループ `test' (1005) を追加しています...
Adding new user `test' (1005) with group `test (1005)' ...
ホームディレクトリ `/home/test' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい パスワード:
新しい パスワードを再入力してください:
No password has been supplied.
新しい パスワード:
新しい パスワードを再入力してください:
passwd: パスワードは正しく更新されました
test のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
    フルネーム []:
    部屋番号 []:
    職場電話番号 []:
    自宅電話番号 []:
    その他 []:
以上で正しいですか? [Y/n] y
Adding new user `test' to supplemental / extra groups `users' ...
ユーザ `test' をグループ `users' に追加しています...

useraddの場合

sudo useradd test
(何も表示されない)

オプションを利用

でも、ホームフォルダは要らない。

あくまでもSambaで使いたいユーザーだというなら、オプションを利用する方法があります。

sudo adduser --system --group --no-create-home ユーザー名

sudo adduser --system --group --no-create-home testman
システムユーザ `testman' (UID 114) を追加しています...
新しいグループ `testman' (GID 124) を追加しています...
新しいユーザ `testman' (UID 114) をグループ `testman' に追加しています...
Not creating `/nonexistent'.

これならホームディレクトリが作られないから、結果的にややこしくないでしょう。

つまり、sambaだけで使うユーザー名で、Raspberry Pi OSへは別のユーザーでログインします。

smbpasswdとpdbedit

同じく、sambaにユーザーを登録するコマンドも、smbpasswdとpdbeditとあり、違いが分かりづらいですよね。

smbpasswd(8) smbpasswd コマンドは、 ローカルおよびリモートの Samba パスワードを設定するツールである。

pdbedit(8) pdbedit コマンドは、Samba サーバーのローカルユーザーデータベースの管理に使用できる。 samba

上手く説明ができません。pdbeditの方が新しい高機能版ってことですかね?

Raspberry Pi 公式ドキュメントでもsmbpasswdコマンドで説明されていました。

但し、pdbeditのユーザー一覧を表示するオプションは便利だ。

sudo pdbedit -L
piblack:1002:
raspida:1000:
pigreen:113:

以上を踏まえて、smbpasswdでユーザーを追加登録しました。

共有フォルダの作成

Raspberry Pi とsambaにユーザーを新規追加できたら、先程のゲストオンリー同様にディレクトリを作成してみます。

既存ユーザーではなく、ホームディレクトリを作成しないオプションにしたため改めて作成しています。

今回は権限も設定しておきます。

新たに「shareblack」を作成し、権限を付与しました。

sudo mkdir /home/shareblack
sudo chmod 755 /home/shareblack

同じく、最下部へ新しく共有名セクションを追加していきます。

最低限はこれでOKです。piblackのみアクセスを許可しておきます。

[shareblack]
;    comment = piblack Access Only
	path = /home/shareblack
	read only = No
	valid users = piblack

ここで保存したら、やはりsambaサーバのサービスを再起動します。

sudo systemctl restart smbd nmbd

これで指定したユーザー(今回はpiblack)とパスワードで共有フォルダへアクセスできました。

Macでの例

この時、ホームディレクトリは作成しないオプションだったので、piblackディレクトリにはアクセスできません。Publicは可能です。

書式チェックをしよう

testparmコマンドで、smb.confの記述ルールにミスがないか確認しましょう。

$ testparm

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

Enterキーで設定したパラメーターが表示されます。

[public]
	guest ok = Yes
	guest only = Yes
	path = /home/public
	read only = No

[shareblack]
	comment = piblack Access Only
	path = /home/shareblack
	read only = No
	valid users = piblack

confファイルの書式とパラメータ

パラメータは他にもたくさんあります。

ラズパイからファイルを取り出したいだけであれば、シンプルにゲストで共有させると楽ですね。

少し難しいですけど、Webサイトのマニュアルも参考にしてください。

数個のファイルを取り出すだけなら

Raspberry Piからファイルを取り出すだけであれば、一時的に接続する方法があります。大量に継続的には向いていません。

1つはSCPコマンドやSFTPがありますけど、もっと簡単に行える方法もあります。

例えば、スクリーショットを1〜2枚取り出すのに、sambaの設定が面倒な場合によく使います。

9999ポートで取り出す簡易サーバ

継続的にやるならSFTPが少しは楽かも。

SFTP

SCPは万能だけど覚えられないな。