ラズパイで「使える」sambaを構築する

2020-05-06

「使える」sambaを構築しよう

 ubuntuやラズパイでsambaを構築する記事は多く見かけますが、「誰でもが自由にアクセスできる」共有フォルダを作成する場合がほとんどだと思います。
 ここでは、「誰でもアクセス可」「特定のユーザのみアクセス可」「ゴミ箱機能」等、”使える”samba環境を構築します。
 ただし、環境構築を目的としているため、パフォーマンスについては考慮していません。具体的には、使用するラズパイはRaspberry Pi 3B+であり、外付けのSSDやHDDは使用していません。
 Raspberry Pi 4でも同じ設定となりますので、お持ちの方はラズパイ4でお試しください。

準備

 準備として、以下の環境を用意してください。

  • 最新のRaspbianが動作していること
    sudo apt-get update、sudo apt-get upgradeが実行済みであること
  • ラズパイのsambaにアクセスするためのPC環境があること
    ここでは、Windows10が動作するPCを想定しています。
  • 有線LANでインターネットに接続していること

IPアドレスの固定

 Raspbianをインストールした状態では、IPアドレスは固定されておらずDHCPサーバから取得しています。sambaを使用するためには、IPアドレスを固定している方が使い勝手がよくなるので、まずはIPアドレスを固定します。
 LXTerminalを起動し、以下のコマンドを入力してください。

sudo mousepad /etc/dhcpcd.conf

 Windowsのメモ帳のような画面になりますので、最終行に以下の4行を追加します。
 設定するIPアドレスやルータのアドレス等は、お使いの環境に合わせてください。

interface eth0
static ip_address=192.168.10.138/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1

 4行の追記ができたら、ファイルを上書き保存してからラズパイを再起動します。
 再起動後、LXTerminalを起動し、以下のコマンドを入力してください。
 IPアドレスが表示されますので、設定したアドレスになっていることを確認します。

ifconfig

sambaのインストール

 LXTerminalを起動し、以下のコマンドを入力してください。

sudo apt-get install samba

 「続行しますか?[Y/n」」が表示された場合は、Enterキーを押下します。(Enterキー押下と’Y’と入力してEnterキーを押下するのはどちらも同じ動きです。)

誰でもアクセスできる共有フォルダの設定

 アクセス制限せずに、誰でもアクセスできる共有フォルダを設定します。共有名は「public」とします。
 LXTerminalを起動し、以下のコマンドを入力してください。

mkdir /home/pi/samba
mkdir /home/pi/samba/puclic

 ファイルマネージャーを起動して、フォルダが作成できていることを確認します。

 sambaの設定ファイルを編集します。
 LXTerminalを起動し、以下のコマンドを入力してください。

sudo mousepad /etc/samba/smb.conf

 Windowsのメモ帳のような画面になりますので、最終行に以下の5行を追加します。
 追加後、ファイルを上書き保存して終了します。

[public]
path = /home/pi/samba/public
guest ok = yes
read only = no
force user = pi

 sambaのサービスを再起動します。 
 LXTerminalを起動し、以下のコマンドを入力してください。

sudo systemctl restart smbd

 以上でラズパイ側の設定は完了です。
 同じネットワークに接続しているWindowsパソコンから、接続できることを確認します。
 Windowsでエクスプローラーを起動し、アドレス欄に「\\192.168.10.138」と入力してEnterキーを押下します。
 誰でもアクセスできる共有フォルダである「public」が見えています。ファイルをコピーしたり削除して、使用できることを確認してください。
 アドレスは、お使いの環境に合わせてください。

パスワードで保護された共有フォルダの設定

 ここでは、アクセスするためのユーザ名とパスワードを知っている人のみがアクセスできる共有フォルダを設定していきます。共有名は「share」とします。
 LXTerminalを起動し、以下のコマンドを入力してください。
 「/home/pi/samba」フォルダは既に存在することを前提としています。

mkdir /home/pi/samba/share

 ファイルマネージャーを起動して、フォルダが作成できていることを確認します。

 sambaの設定ファイルを編集します。
 LXTerminalを起動し、以下のコマンドを入力してください。

sudo mousepad /etc/samba/smb.conf

 Windowsのメモ帳のような画面になりますので、最終行に以下の5行を追加します。
 追加後、ファイルを上書き保存して終了します。

[share]
path = /home/pi/samba/share
guest ok = no
read only = no
force user = pi

 sambaのサービスを再起動します。 
 LXTerminalを起動し、以下のコマンドを入力してください。

sudo systemctl restart smbd

 「share」フォルダへアクセスするためのユーザを作成します。
 ユーザ名は「smbuser」、パスワードは「password」とします。

 LXTerminalを起動し、以下のコマンドを入力してください。
 ユーザ作成時、パスワードの入力を求められるので「password」と入力してください。
 パスワードは確認も含めて2回入力します。
 入力したパスワードは表示されません。注意して入力してください。

 その後、いくつかの質問(入力要求)がありますが、すべてEnterキーを押下します。

sudo adduser smbuser

 次にsambaユーザの登録を行います。
 LXTerminalを起動し、以下のコマンドを入力してください。
 パスワードの入力を求められるので「password」と入力してください。
 パスワードは確認も含めて2回入力します。
 入力したパスワードは表示されません。注意して入力してください。

sudo pdbedit -a smbuser

 以上でラズパイ側の設定は完了です。
 同じネットワークに接続しているWindowsパソコンから、接続できることを確認します。
 Windowsでエクスプローラーを起動し、アドレス欄に「\\192.168.10.138」と入力してEnterキーを押下します。
 誰でもアクセスできる共有フォルダである「public」と、今回作成した「share」が見えています。
 「share」フォルダをダブルクリックすると、ユーザ名とパスワードの入力要求がありますので、ユーザ名は「smbuser」、パスワードは「password」を入力してください。
 アドレスは、お使いの環境に合わせてください。

ゴミ箱機能の追加

 ファイルサーバ(samba)上のファイルを削除すると、ゴミ箱には入らずにファイルが削除されます。ここでは、publicフォルダ内で削除したファイルを元に戻すことができるようにします。
 ゴミ箱と言ってもWindowsのゴミ箱とは異なります。具体的には、publicフォルダにゴミ箱用のフォルダを作成し、publicフォルダ内のファイルが削除されるとゴミ箱用のフォルダに移動します。
ゴミ箱用のフォルダは、隠しフォルダになりますのでWindowsの設定で隠しフォルダ/ファイルが見えるように設定しておく必要があります。隠しフォルダを見えるようにする手順は後述します。

 LXTerminalを起動し、以下のコマンドを入力してください。

sudo mousepad /etc/samba/smb.conf

 Windowsのメモ帳のような画面になりますので、先ほど追加した[public]の箇所に、以下の6行を追加します。
 追加後、ファイルを上書き保存して終了します。

vfs objects = recycle
recycle:repository = .recycle
recycle:version = yes
recycle:touch = yes
recycle:maxsize = 0
recycle:exclude = *~ *.tmp

 sambaのサービスを再起動します。 
 LXTerminalを起動し、以下のコマンドを入力してください。

sudo systemctl restart smbd

 以上で設定は完了です。
 それでは、ゴミ箱機能を確認します。

 まず、Windowsの設定で隠しフォルダ/ファイルが見えるようにします。既に設定できている場合は読み飛ばしてください。

 Windowsでエクスプローラーを起動し、「ファイル」-「フォルダーと検索のオプション変更(O)」をクリックします。
「表示」タブをクリックし、「隠しファイル、隠しフォルダ、および隠しドライブを表示する」のラジオボタンを選択します。選択後、「OK」をクリックします。

 次に「public」フォルダを開き、適当なファイルをコピー、あるいは作成します。ここでは「テスト用ファイル.txt」を作成しました。

 ファイルを削除します。削除後、一旦ウィンドウを閉じるか、上のフォルダに戻ってから再度publicフォルダを確認します。「.recycle」という名称のフォルダが存在しています。このフォルダの中を見ると、先ほど削除したファイルが存在します。

「smbuser」フォルダの非表示化

 ラズパイの共有フォルダを確認すると、「public」「share」の他に「smbuser」というフォルダが存在するのが分かります。
 これは、sambaユーザを作成した際にできた共有フォルダです。今回の設定では、この共有フォルダは使用しないので非表示にします。

 LXTerminalを起動し、以下のコマンドを入力してください。
 3か所に設定を追加します。1か所目は設定ファイルの途中に記述する必要があるので、注意してください。
 追加後、ファイルを上書き保存して終了します。

sudo mousepad /etc/samba/smb.conf

 sambaのサービスを再起動します。 
 LXTerminalを起動し、以下のコマンドを入力してください。

sudo systemctl restart smbd

 以上で設定は完了です。Windowsのエクスプローラーを起動し、「smbuser」フォルダが非表示であることを確認します。