Raspberry PiにSambaをインストールしてWindowsとファイルを共有する

Raspberry PiにSambaをインストールしてWindowsとファイルを共有してみました。

はじめに

以前 Raspberry Pi に Nginx をインストールして CGI を動かす環境を構築しました。

Nginxで配信するCGIやHTMLなどの資材を SCP や SFTP を使用して Raspberry Pi に配置していましたが少し面倒です。

できれば Windows PC のエクスプローラーからできると便利だと思い Samba をインストールしてフォルダを共有することにしました。

Samba のインストール

まずは apt で Samba をインストールします。

sudo apt update
sudo apt install samba

Samba の共有の設定

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

まずは Samba で共有するディレクトリを作成します。

以前 USBストレージにext4のファイルシステムを作成してマウントしたディレクトリを使用することにしました。

sudo mkdir /mnt/usb/www
sudo chown www-data:www-data /mnt/usb/www/
sudo chmod 700 /mnt/usb/www/

所有者は Nginx の実行ユーザーの www-data にしました。

Samba の設定

Samba の設定ファイルを編集する前に設定ファイルをバックアップしておきます。

cp -p /etc/samba/smb.conf ./

以下の内容を追記しました。

/etc/samba/smb.conf
[www]
   comment = WWW Directory
   path = /mnt/usb/www
   browseable = yes
   read only = no
   guest ok = no
   create mask = 0700
   directory mask = 0700
   valid users = www-data

デフォルトでホームフォルダやプリンターの設定が入っていますが今のところ特に必要ないのでコメントアウトしました。

現在 Nginx で配信しているファイルには CGI もあり実行権限が必要なのでファイルのパーミッションはひとまず 700 とすることにしました。

設定ファイルを編集したので Samba のサービスをリロードします。

sudo service smbd reload

Samba にユーザーを追加

つづいて pdbedit コマンドで Samba にユーザーを追加します。追加は -a オプションで -u オプションで追加するユーザを指定します。

追加するユーザは Nginx の実行ユーザに合わせて www-data にしました。

sudo pdbedit -au www-data

パスワードの設定のプロンプトが表示されますのでパスワードを設定します。

new password:
retype new password:

pdbedit コマンドの -L オプションで Samba のユーザーの一覧を表示して追加されていることを確認しました。

sudo pdbedit -L

www-data が一覧に表示されましたので追加できていました。uid も /etc/passwd の uid と一致しています。

www-data:33:www-data

Samba のユーザーは -x オプションで削除することができます。

Windows のエクスプローラで確認

Samba で共有したディレクトリを Windows のエクスプローラで表示することができるか確認しました。エクスプローラのアドレスバーに「\\192.168.0.33\www」を入力して接続します。(IPアドレスはRaspberry PiのIPアドレスを指定します)

資格情報の入力プロンプト

ユーザー名に「www-data」を入力、パスワードに先ほど設定したパスワードを入力して認証されることが確認できました。

エクスプローラからファイルとフォルダを作成してみます。

Windowsでファイルとフォルダの作成

Raspberry Pi 側で共有しているディレクトリにファイルとディレクトリが作成されているか確認します。

sudo ls -al /mnt/usb/www/

作成されていることと所有者が「www-data」になっていること、パーミッションが Samba の設定どおりになっていることが確認できました。

Raspberry Piでファイルとフォルダの作成の確認

Nginxの設定

ディレクトリの変更

現在 Nginx で配信する資材を配置しているディレクトリ構成は以下になっています。

    • /usr/lib/cgi-bin/NginxのCGIを配置するディレクトリです
    • /var/www/html/Nginxの静的ファイルを配信するドキュメントルートです

これらのディレクトリを Samba で共有しているディレクトリのシンボリックリンクに変更することにしました。

まずは現在のファイルとディレクトリを Samba で共有しているディレクトリにコピーしました。

sudo cp -Rp /usr/lib/cgi-bin/ /mnt/usb/www/
sudo cp -Rp /var/www/html/ /mnt/usb/www/
sudo chown -R www-data:www-data /mnt/usb/www/
sudo chmod -R 700 /mnt/usb/www/

パーミッションは Samba の設定で ファイルとディレクトリ共に 700 にしたので、それに合わせました。

念のため現在のディレクトリをバックアップします。

mkdir www_backup
sudo mv /usr/lib/cgi-bin/ ./www_backup/
sudo mv /var/www/html/ ./www_backup/

Nginx で配信する資材を配置しているディレクトリをSamba で共有しているディレクトリのシンボリックリンクに変更しました。

sudo ln -s /mnt/usb/www/cgi-bin /usr/lib/cgi-bin
sudo ln -s /mnt/usb/www/html /var/www/html

Nginx にアクセスして以前作成した CGI が表示されることの確認を行います。

Nginxの動作確認

無事表示されました。

おわりに

Raspberry Piに Samba をインストールしてWindows のエクスプローラからファイルの編集やフォルダの作成ができるようになりました。

Samba をインストールすることで今回の目的は簡単に実現することができました。

大容量のSSDなど購入してNAS化してもいいかもと思いました。その時は Samba の設定をしっかり調べてみようと思います。