ラズパイをファイルサーバーに!
Raspberry Pi OSでSambaのファイル共有ガイド

Raspberry Pi Compute Module 4・5(以下、CM4・CM5)でもSambaサービスを使えば、WindowsからでもmacOSからでもアクセスできるファイルサーバーになります。
サーバーとして機能するため、複数のクライアントPCから同時にファイルへアクセスが可能です。

家庭内はもちろん、社内利用などでサクッとファイル共有したいなら、Sambaサービスだけでも実用的です。
ファイルの権限設定は少し複雑に感じるかもしれませんが、実例を元になるべく分かりやすい内容にしたつもりです。
記事のコードを順番に実行すれば動作しますので試してみてください。

今回の環境

Sambaのインストール前提として、Raspberry Pi OSが起動済みで、初回セットアップウィザードも完了している状態とします。

  • Raspberry Pi CM4(eMMC32GB、RAM8GB)Raspberry Pi OS bookworm
    Raspberry Pi CM5(eMMC64GB、RAM8GB)Ubuntu24.04LTS
  • 有線LANケーブルでルーターと接続
  • キーボード、モニターを接続

共有するフォルダは、次の条件にしました。

  • 共有フォルダはeMMC内の/home直下に作成

決められたユーザー認証でアクセスする環境です。
今回は外付けHDDなどマウントが必要なドライブ内ではありませんから、OSをインストールした後ですぐに動作を試すことができます。

ネットワーク接続は有線LANであれば、LANケーブルを接続するだけでOKなのでオススメです。
Wi-Fiの場合は自宅(社内)のルーターに参加するように予め設定してください。

最も簡単な方法は、物理的にキーボード、マウス、およびモニターを用意し、有線LANでネットワークに接続させることです。
Raspberry Pi OS liteを用い、Wi-Fi環境とSSH接続だけで作業することも可能です。但し、lite版では足りないモジュールやライブラリも多いため、記事内容と同じでは上手く行きません。気を付けてください。

記事内容はCM4+Raspberry Pi OSで解説しています。
追加でCM5+Ubuntu24.04LTSでも検証しました。
一部、Ubuntuでは共有したファイルの権限付与が異なりましたが、他は記事内容の通りで動作は同じでした。順番にコマンドを実行していくだけで構築できます。お試しください。

Sambaをインストール

先ずはSambaをコマンドラインでインストールします。
デスクトップ環境があるなら端末アプリで作業します。CUI環境(コマンドラインのみ)や、SSH接続でも同じです。

apt updateだけは初めに実行しておきましょう。インストール元を最新にすることで要らぬエラーを出さないために重要です。
今回はfull-upgradeも施してからSambaパッケージをインストールします。

sudo apt update
sudo apt full-upgrade
sudo apt install samba samba-common-bin smbclient cifs-utils

Sambaのインストール自体はapt install sambaだけで良いのですが、上記のようにセットでインストールしておくと便利です。

今回確認したSambaのバージョンは 4 系です。

samba --version
Version 4.17.12-Debian

専用の共有ディレクトリを作成

Raspberry Pi OSはCM4/5内蔵のeMMCにインストールしました。この中でファイルを共有してみます。

他のマシンから閲覧・編集できるように、共有用ディレクトリ(フォルダ)を作成します。
分かり易いように「share」と名前を付け作成しました。

ここではホームディレクトリと同階層の/home直下に作成しています。
今回はRaspberry Pi上で分かりやすくするために/home/shareを使用していますが、本来は/srv/samba/shareなどを使用する方が適切です。

sudo mkdir /home/share

所有者とグループは初期状態ではrootですが、後ほど変更するためここではそのまま進めます。
先にSambaで使うユーザーとグループを作成してから、所有権を変更してセキュリティを高めた権限の付与をすることにします。

ユーザーの作成とパスワードの設定

smb.conf で設定した共有フォルダが、他のマシンのネットワーク一覧に表示されればアクセス可能です。
ゲストとしてアクセスさせることもできますが、今回は認証が必要なユーザーを新規に作成します。

私もよく困惑することに、SambaはRaspberry Pi OSのログイン名と同じ(例:pi)で解説されていることが多く、非常に分かりにくいことがありました。

Raspberry Pi OSにあるユーザーと同じで構わないのですけど、Samba専用のユーザーを別に作成し、そのユーザー名とパスワードでアクセスさせる方法が望ましいです。
但し、このユーザーは先にRaspberry Pi OS側で作成しておかないとなりません。

システム側にユーザーを追加

OS側にログインしているユーザー以外の新規ユーザー登録をsmbpasswdの前に実行します。
Sambaで利用する専用ユーザーとして新規作成します。
専用なので、Raspberry Pi OSにログインできる必要はありませんから、オプションを付けて作成しました(ホームディレクトリを作らない、ログインできないオプション)。

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

実行すると、こうなります。

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

ログインしているユーザー(例:pi)をSambaのユーザーにすることもできるのですが、すべて同じユーザー(例:pi)での動作となり、権限を分離したいときや、ログの閲覧などで逆にややこしくなります。当然ながらセキュリティとしても不向きです。

全くの1人で閉じた家庭内だけで使うのなら、お手軽で私もはじめはよく使っていました。
最初だけ面倒ではありますが、ユーザーを分けた方が逆に分かりやすいので、ログインしているユーザーをSambaのユーザーとするのはオススメしません。

Sambaにユーザーとパスワードを設定

OS側に新規ユーザー(ここではcm4smb)を追加できたので、続いてSambaにも追加します。

sudo smbpasswd -a cm4smb

実行後、パスワードを設定を訊かれます。
ログインしているユーザーと別に新たなパスワードを設定すると良いでしょう。

New SMB password:
Retype new SMB password:
Added user cm4smb.

続けて作成したユーザーを有効にしておきます。

sudo smbpasswd -e cm4smb

グループsambashareに追加

ローカルのユーザー(今回だとraspida)と作成したユーザー(今回はcm4smb)をsambashareグループに追加します。
sambashareは今回のインストールでは最初から存在しています。無ければ作成してください。(sudo addgroup sambashare

sudo usermod -aG sambashare raspida
# 現セッションを変更して反映
newgrp sambashare
# もしくはログオフ、再起動

こうすることで、Raspberry Pi OSでログインしているユーザー(今回はraspida)が、ディレクトリのパーミッション0770であっても、同じグループに所属しているためローカルからでもアクセスできるようにします。

作成したディレクトリの権限の付与

先程作成した/home/shareのディレクトリの権限(パーミッション)は、0770にしておきます。
完全なローカル環境であれば、0777のフル権限でも影響はないかもしれませんが、その他だけ権限を与えない0770で進めます。
後ほどsmb.confでsambashareグループを設定すれば、所有者グループの権限としてフルアクセスができます。

権限は0770、所有者は新たに作ったユーザーにし、所有グループはsambashareにします。

sudo chmod 0770 /home/share
sudo chown cm4smb:sambashare /home/share

これで下準備はできました。
次から設定ファイル(smb.conf)を編集していきましょう。

Sambaの設定ファイル(.conf)に追記

Sambaの設定はsmb.confに記述することになります。通常はグラフィカルなインターフェイスはありません。

最初から存在するデフォルトのconfファイルをバックアップしておきます。
後で間違えて分からなくなったとき、一発で元に戻せますのでやっておきましょう。

confファイルのバックアップ

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup

smb.confへの記述

どうやって共有フォルダにアクセスさせるのかを、smb.confに記述していきます。

sudo nano /etc/samba/smb.conf

次の条件で設定します。

/home/share → 追加したユーザーとパスワードで接続し、読み書きを可能としたい

開いたconfファイルの最終行に、次のような設定を追記します。

[share]
    comment = Share
    path = /home/share
    browseable = Yes
    read only = No
    valid users = cm4smb
    force group = sambashare
    create mask = 0666
;    force create mode = 0666
    directory mask = 0777

shareディレクトリは、作成したユーザー(cm4smb)しか接続を許可しない設定にしたいので、valid users = cm4smbを設定しています。
但し、sambashareグループにも入れてあるため(force group = sambashare)、ローカルユーザー(ここではraspida)もアクセスできて、Samba上では他のユーザーはアクセスできない仕様になります。

上から順番にご説明します。

今回はフォルダをshareにしたので、セクション名も同じ[share]にしました。

設定説明
comment=ファイルブラウザで表示させた時に表示されるコメントです。無くても構いません。
path =作成したshareフォルダを絶対パスで指定しています。
browsable =Yesにするとファイルブラウザでの表示(ブラウジング)ができます。表示したくない場合はNoにします。
read only =noで読み書き可能となり、writable = yesと同じ意味です。read onlyで設定するのが基本です。
valid users =指定したユーザーで認証が必須になります。
force group =同じグループに入れたローカルユーザーでもアクセス可能にしています。
create mask =マスクなので実際のファイルのパーミッションとは少し意味が異なります。
権限の計算後に付与できる最大値になります。
directory mask =create maskと同じ意味のディレクトリ側の設定です。
;force create mode =強制的に要求したパーミッション(例:0666)にしたい場合に設定します。

※smb.confのセミコロン(;)は、設定のコメントアウトです。シャープ(#)は文字列のコメントアウトです。

force group = sambashareでsambashareにしています。これで同じグループに入れたローカルユーザーでもアクセス可能にしています。

create mask = 0666directory mask = 0777は、マスクなので実際のファイルのパーミッションとは少し意味が異なります。
強制的に要望するパーミッション(例:0666)にしたい場合、追加でforce create mode = 0666を記述する必要があります。
セミコロンでコメントアウトしていますが、必要なら外して有効にしてください。

maskについては詳細は省きますが、Raspberry Pi OSやUbuntuのSambaでは初期値が0744、0755のため指定しました。
作成した共有フォルダのパーミッションや付与したい権限のルールによってcreate maskも変更する必要があります。

※smb.confのセミコロン(;)は、設定のコメントアウトです。シャープ(#)は文字列のコメントアウトです。

confファイルのチェック

追記したsmb.confファイルの間違いがないかチェックしましょう。
testparmコマンドは非常にシンプルなconfファイルのチェックプログラムです。

testparm

Loaded services file OK.と出ればOKです。
エラーが出ていたらそこを直してください。全角スペースやらスペルミスなどが見つかると思いますよ。エラーを発見するためという用途です。

これで一通りの設定が終わりました。

Sambaサービスの再起動

すべて設定が終わったので、システムではなくサービスだけを再起動します。システムを再起動してもOKです。

sudo systemctl restart smbd nmbd

他のPC/Macからアクセスして動作確認をしてみましょう。

他のマシンからアクセスしてみる

Windowsエクスプローラのアドレス欄にSambaをインストールしたRaspberry Piのアドレスを指定します。
macOSならFinderでコマンドキー(⌘)+ Kで表示されるサーバーへ接続のアドレス欄に入力します。

Windows:¥¥192.168.1.12
macOS:smb://192.168.1.12

もしくは、IPアドレスの代わりにホスト名でもOKです。

Windows:¥¥rpicm4.local
macOS:smb://rpicm4.local

smb.confbrowsable = noに設定している場合、該当のPath(パス)を直接指定することで接続できます。(¥¥rpicm4.local¥share

ファイルを書き込んでみる

それぞれ適当なファイルを手元のPC/Macからコピーしてみました。
権限や所有者はどうなっているかというと、ファイルは設定どおりに所有権がcm4smb:sambashare、ファイルの権限は666になりました。
ディレクトリは777です。
ローカルユーザー(raspida)が作成したディレクトリは、所有者とグループはraspidaで、権限は755です。

試しに、ローカル環境でもブラウズしてみてください。browsable = Yesなら、表示もされて中身も読めるはずです。
もしもエラーでアクセスできないば場合、設定の記述が足りていないか、作成した共有フォルダの権限が異なっていると思われます。
再度、確認してみてください。

CM5+Ubuntu24.04では、同じ設定でもファイルのパーミションは664になっていました。Samba上でもローカルでもグループの権限で読み書きはできますが、少し異なった結果でした。umaskの初期値やACLが関係しているようです。

ファイル権限(rwx)のまとめ

MacやLinux系でよく出てくるファイルのパーミッション(ファイル権限)は難しいですよね。
例えば今回のrw-rw-rw-は、数字で表すと666です。誰でも読み書きできる状態です。

ざっとまとめてみたので参考にしてください。

パーミッション記号の意味

記号意味ファイルの場合ディレクトリの場合
rread読み取り可(内容を表示)中のファイル一覧を表示可能
wwrite書き込み可(変更と削除)中のファイルの作成・削除可能
xexecute実行可(プログラムなど)プログラムの実行が可能
ディレクトリに「入る」ことが可能

権限の対象と ls -l 表示

対象説明ls -l 表示例
所有者(user)ファイルの作成者・所有者rwx------ の先頭3文字
グループ(group)所有者の所属グループメンバー---rwx--- の中間3文字
その他(other)それ以外の全ユーザー------rwx の末尾3文字

数値表現(chmod コマンド等で使用)

記号数値意味
r4読み取り
w2書き込み
x1実行

数値は合計して 3桁の数値で表せる
例: rwx = 4+2+1 = 7
例:rw-rw-rw-= 666

数値表現の例

数値例意味コマンド例
755所有者:すべて、グループ・他: 読み取り+実行chmod 755 ファイル名
644所有者:読み書き、他:読み取りのみchmod 644 ファイル名
700所有者のみすべての権限chmod 700 sample.txt

/home/shareで0770にした理由

今回は/home/shareは0770と権限を付与したので、所有者とグループがすべての権限があり、その他は権限なしとなります。
これはOS側の話であり、Sambaのそれとはまた異なります。ここがややこしいですよね。
0770なので本来はその他のユーザー権限は0ですから読み書きできないところ、今回はSamba側でsambashareグループへ強制的に設定しました。
ファイルが書き込まれた時にsambashareグループに上書きされ770でいうグループ権限(rwx=7)が読み書きも可能なため、ローカルユーザー(今回はraspida)でも読み書きできたというわけです。

権限を0777にすれば、誰でもフルコントロール権限で面倒ではないのですが、やはりセキュリティ的に推奨はできません。ローカル側(OS側)の権限は、なるべく0777ではない状態にしておきたいです。
今回はその他ユーザーの権限がない0770の共有ディレクトリも、sambashareグループにローカルユーザーも追加した結果、Samba上では認証が必要なcm4smbでしかアクセスできず、ローカル側ではログインしているユーザーでも中身が編集できる状態にすることができました。

この権限周りは、使い方によって様々なパターンが考えられます。もしもローカル側では何も権限がなくても良ければ、Samba側だけ考慮すれば良いので比較的に考え方は楽になります。
smb.confを変更した場合、その都度、適用させるためにサービスをリスタートする必要があります。

文字化け対策

最後に、もしもWindowsやmacOSで、Sambaのファイルが文字化けするようなら、[global]セクションに以下を追加しましょう。
記述されていても特に問題はないので、追記しておくことをオススメします。

#[global]の下に2行を追加。Unix系、Win系用の文字化け対策
   unix charset = UTF-8
   dos charset  = CP932

Raspberry Pi でファイル共有サーバーにしたいなら、Sambaのインストールだけでも十分に実用的です。
ファイルのアクセス権限を考えると、ちょっと奥が深いSambaサービスのファイル共有でした。


記事寄稿:ラズパイダ

非エンジニアでも楽しく扱えるRaspberry Pi 情報サイト raspida.com を運営。ラズベリーパイに長年触れた経験をもとに、ラズベリーパイを知る人にも、これから始めたいと興味を持つ人にも参考になる情報・トピックを数多く発信。PiLinkのサイトへは産業用ラズベリーパイについて技術ブログ記事を寄稿。