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 | ☑️ | ☑️ | - |
| 7 | 7 | 0 |
パーミション770
| 読込み権限 | 書込み権限 | 実行権限 | 権限なし |
|---|---|---|---|
| r | w | x | - |
| 4 | 2 | 1 | 0 |
権限別
全部の権限ありは、単に足し算すれば良く、4+2+1 = 7 これを所有者・グループ・他ユーザーの3つを指定してれば「777」となり、よく見かけますね。
同じくよくある「755」は、表にするとこうなります。
| 所有者 | グループ | 他ユーザー | |
|---|---|---|---|
| 読込(read)4 | ☑️ | ☑️ | ☑️ |
| 書込(write)2 | ☑️ | - | - |
| 実行(execute)1 | ☑️ | ☑️ | ☑️ |
| 7 | 5 | 5 |
パーミション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は万能だけど覚えられないな。







