Ubuntu日和

【第27回】ミニPCで作るSambaサーバー入門【Sambaサーバー構築編】

エクスプローラーでSambaの共有フォルダーを表示し、PowerShellでSambaサーバーのsmb.confを表示しているところ

 前回はLarkBox XのNVMe SSDを交換し、Ubuntu Serverをインストールしたところまでであった。今回は、いよいよSambaサーバーをセットアップする。

インストール後の設定

 インストール後ログインし、まずはパッケージのアップデートを行おう。アップデートのコマンドはご存知だろうが以下のとおりだ。

$ sudo apt update
$ sudo apt upgrade

 場合によっては再起動が必要なこともある。その後ホスト名でリモート接続するために必要なパッケージを以下のとおりインストールする。

$ sudo apt install avahi-daemon

 これでホスト名でのログインができるようになった。例えばホスト名が「larkbox-x」でユーザー名が「ikuya」の場合は、次のようになる。

$ ssh ikuya@larkbox-x.local

 最近(?)のWindowsにはOpenSSHクライアントもインストールされているので、PowerShellを起動して上記のコマンドを実行すれば、Windowsからでもログインできる(冒頭の図の左側参照)。

 現在の設定ではロケールと時刻が日本の設定になっていないので、次のコマンドを実行して修正する。

$ sudo locale-gen ja_JP.UTF-8
$ sudo localectl set-locale LANG=ja_JP.UTF-8
$ sudo timedatectl set-timezone Japan

Sambaのインストールと設定

 いよいよSambaのインストールと設定に移る。

 まずは、何はなくても次のコマンドを実行してSambaをインストールする。

$ sudo apt install samba

 Sambaを使用するためには、大きく3つのことを行う必要がある。

  • 共有ファイルを置くフォルダーの作成
  • Sambaを使用するユーザーの作成
  • Samba全体や、個々の共有フォルダーの設定

 個別に見ていこう。

共有ファイルを置くフォルダーの作成

 当然だが、共有ファイルを置くフォルダーが必要だ。場所はどこでもいいが、今回は/srv/samba/というフォルダーを作成することとする。すでに/srvフォルダーはあるので、次のコマンドを実行してその下にsambaフォルダーを作成する。

$ sudo mkdir /srv/samba

 今回はパスワードなしで誰でもアクセスできるpublicフォルダーと、個人名のフォルダーを作成する。個人名は「ikuya」とするが、適宜適切な名称に変更して欲しい。

$ sudo mkdir /srv/samba/{public,ikuya}

 Samba用のユーザーとして「samba」を作成し、次のコマンドを実行してpublicフォルダーはこの権限とする。個人用のフォルダーは個人の権限とする。

$ sudo adduser --system --group --no-create-home samba
$ sudo chown samba: /srv/samba/public/
$ sudo chown ikuya: /srv/samba/ikuya/
$ sudo chmod 775 /srv/samba/public/
$ sudo chmod 775 /srv/samba/ikuya/

 コマンドを少し詳しく解説すると、Ubuntuでユーザーを追加するコマンドはadduserだ。useraddコマンドもあるが、一旦忘れていい。今回は通常ログインに使用するユーザーではなく、Sambaというシステムだけで使用する便宜上のユーザーなので、–systemオプションを付けている。–groupはユーザーと同名のグループを作成するオプションだ。–no-create-homeはその名のとおりで、ホームフォルダー(今回だと/home/samba)を作成しないオプションである。引数の最後には、作成するユーザー名(=グループ名)を付ける。

 chownコマンドではファイルやフォルダーの所有者と所有グループを変更する。今回/srv/samba/public/フォルダーはsambaユーザーが使用するので、引数にsambaを入れている。後ろの「:」は、ユーザー名とグループ名が同じ場合、グループ名を省略できるオプションで、すなわち「samba:samba」を略したものだ。

 UbuntuというかUnix系OSのパーミッション(権限)はWindowsと比較するとシンプルで、簡易的に数字3桁で表せる。数字の並びに意味があり、最初はユーザー、真ん中がグループ、最後はそれ以外となる。

 「775」はフォルダーや実行ファイルで使用されるパーミッションだ。権限があるユーザーとグループは読み書きと実行可能で、パーミッションがない場合でも読み込みと実行だけはできる。

 chmodコマンドは引数のパーミッションに変更するコマンドというわけだ。

Sambaを使用するユーザーの作成

 大前提として、Sambaで使用するユーザーはUbuntuにも存在していなくてはならない。よってすでに存在しているユーザー(ここではikuya)をSambaでも使用するユーザーとする。

 Sambaのユーザー管理は原則としてpdbeditコマンドを使用する。まずは次のコマンドを実行してユーザーsambaをSambaで使用できるようにする。

$ sudo pdbedit -a samba

 パスワードを聞かれるが、何も入力しないでエンターキーを2回押す。

 続けて次のコマンドを実行し、ユーザーikuyaをSambaで使用できるようにする。

$ sudo pdbedit -a ikuya

 こちらはきちんとパスワードを入力する。

 Sambaで使用するユーザーの設定はこれでおしまいだ。

Samba全体や個々の共有フォルダーの設定

 Sambaの設定は、原則として/etc/samba/smb.conf(以下smb.conf)に書く。

 smb.confを見てみると、大量にコメントはあるものの、セクションがおおむね「[global]」とそれ以外に分かれていることに気づく。Samba全体の設定は「[global]」に、そうではないものはそれぞれのセクションに書くと考えるとわかりやすい。

 次を参考に、smb.confに追記しよう。

[global]
   guest account = samba

[Public]
   writeable = yes
   path = /srv/samba/public
   create mask = 0664
   directory mask = 0775
   force user = samba
   force group = samba
   guest ok = yes
   guest only = yes

[ikuya]
   writeable = yes
   path = /srv/samba/ikuya
   create mask = 0664
   directory mask = 0775
   force user = ikuya
   force group = ikuya

 diffで見てみると以下のとおりだ。

$ diff -u /etc/samba/smb.conf.orig /etc/samba/smb.conf
--- /etc/samba/smb.conf.orig    2023-05-02 17:12:26.106211363 +0900
+++ /etc/samba/smb.conf 2023-05-02 17:12:58.226716528 +0900
@@ -31,6 +31,8 @@
 # server string is the equivalent of the NT Description field
    server string = %h server (Samba, Ubuntu)

+   guest account = samba
+
 #### Networking ####

 # The specific set of interfaces / networks to bind to
@@ -240,3 +242,21 @@
 # to the drivers directory for these users to have write rights in it
 ;   write list = root, @lpadmin

+
+[Public]
+   writeable = yes
+   path = /srv/samba/public
+   create mask = 0664
+   directory mask = 0775
+   force user = samba
+   force group = samba
+   guest ok = yes
+   guest only = yes
+
+[ikuya]
+   writeable = yes
+   path = /srv/samba/ikuya
+   create mask = 0664
+   directory mask = 0775
+   force user = ikuya
+   force group = ikuya

 smb.confの設定変更後は、必ず次のコマンドを実行して書式が正しいかを確認するようにしよう。

$ sudo testparm

 エラーが出ていなければsmb.confには問題はないので、続けて実際に適用する。

$ sudo systemctl reload smb

エクスプローラーで確認

 共有フォルダーができたので、早速Windows端末から確認しようと「ネットワーク」をクリックしても、残念ながら表示されない。Ubuntuでは特に問題ないのだが。

「ネットワーク」をクリックしてもLarkBox Xが表示されず、ゲスト参加のTH80が表示されている

 ただしCtrl+lキーを押してホスト名を直接入力すると表示される。

意外と知られていないCtrl+lキーでのパスの入力

 これでは不便なので、補助パッケージをインストールする。

wsdd2パッケージのインストールと設定

 補助パッケージの名称は「wsdd2」といい、まずはこれをインストールする。

$ sudo apt install wsdd2

 デフォルトでは自動起動しないようになっているので、自動起動するように変更する。

$ sudo systemctl enable --now wsdd2.service

 これでエクスプローラーにSambaサーバーが表示されるようになったはずだ。

「ネットワーク」をクリックするとLarkBox Xが表示されるようになった

 早速Windowsで撮影したスクリーンショットを置いて、記事を書いているPCに持ってきた。複数のPCがある場合はNASがあると便利だ。

 もしこれでもエクスプローラーにSambaサーバーが表示されなかったら、smb.confの「guest account = samba」の下に「netbios name = (ホスト名)」を追記するといいだろう。

運用に関して

 これでSambaサーバーのセットアップが完了したが、実際に使用する時には日々のメンテナンス(パッケージのアップデート)が発生する。いちいちリモートでログインしてパッケージのアップデートを実行するのは面倒なので、できることなら自動化したい。

 またSSDのシングルドライブにデータを置いておくのは心配なので、バックアップも取りたい。外付けHDDを接続するでもいいが、せっかくのミニPCという特徴がなくなってしまう。できればどこか別のところに置きたい。

 いずれも実現可能であるが、今回は紙幅の都合で紹介しない。また別の機会としたい。その機会があるかどうかは読者の反応次第といったところだろう。