jessie向けの新ページを作成しました。こちらからどうぞ

6.SAMBAサーバーの立て方(Windowsファイル共有サーバー)(NAS化) - RaspberryPiで各種サーバー作り! - ある阪大生の物置小屋

「SAMBA」はWindows共有で用いられるSMBプロトコルに対応したファイルサーバーです。
これをRaspbianにインストールし、USBHDD等と組み合わせれば、きっちりとしたファイルサーバーが出来上がります。
ここでは、そんな「SAMBA」を利用して、ファイル共有サーバ(NAS)を立てる方法について説明します。

6.1.「SAMBA」をインストールする前に(前準備)

「SAMBA」をインストールする前に、SAMBA用のユーザーを作成し、USBHDDを起動時にマウントするようにしておきましょう。
USBHDDはあらかじめFAT32でフォーマットしておいてください。

  1. 以下のコマンドで、SAMBA用のユーザーを作成します。
    sudo useradd -s /bin/false (任意のユーザ名)
    
  2. 以下のコマンドで、SAMBA用のユーザーのパスワードを変更します。
    sudo passwd (先程のユーザ名)
    
  3. USBHDDをRaspberyPiに差し込み、以下のコマンドでデバイス名を確認します。
    sudo fdisk -l
    
    大体は、「sda1」・「sdb1」といった名前になっていると思います。
  4. 以下のコマンドで、USBHDDをマウントします。
    #マウントポイント作成
    sudo mkdir /mnt/HDD
    
    #USBメモリーをマウント
    sudo mount /dev/(デバイス名) /mnt/HDD
    
  5. 以下のコマンドで、USBHDDのUUIDを確認します。
    sudo blkid /dev/(デバイス名)
    
  6. 起動時のマウントの仕方を記載している「/etc/fstab」を以下のように編集します。
    (追加)
    UUID="(USBHDDのUUID)" /mnt/hdd      vfat    auto,nodev,async,rw,nouser,noexec,iocharset=utf8,codepage=932,uid=(SAMBA用のユーザーのユーザーID),gid=(SAMBA用のユーザーのグループID),fmask=002,dmask=002 0 0
    
    SAMBA用のユーザーのユーザーID・グループIDを確認するには、以下のコマンドで。
    id (SAMBA用のユーザー名)
    
  7. 以下のコマンドで、再起動して、USBHDDがマウントされていることを確認する。
    #再起動
    sudo reboot
    
    #マウント確認
    df
    #「Mounted on」を確認し正しくマウントされていることを確認する。
    

6.2.「SAMBA」のインストール

「SAMBA」をインストールするには、以下のコマンドでインストールできます。

sudo apt-get install samba

6.3.「SAMBA」の設定

  1. 以下のコマンドで、SAMBAのユーザーデータベースに、「SAMBA用ユーザ」を登録し、「pi」を削除する。
    #「SAMBA用ユーザ」を登録
    sudo pdbedit -a -u (SAMBA用のユーザー名)
    
    #「pi」を削除
    sudo pdbedit -x -u pi
    
  2. SAMBAの設定ファイル「/etc/samba/smb.conf」を以下のように編集する。
    ([global]に追加)
    workgroup = (自身のワークグループ)
    hosts allow = (ファイル共有したいネットワークアドレス)/(サブネットマスク) localhost
    interfaces = (ファイル共有したいネットワークアドレス)/(サブネットマスク) localhost
    bind interfaces only = yes
    deadtime = 60
    max connections = 100
    guest ok = no
    invalid users = root pi @sudo
    map to guest = Never
    
    (ファイルの最後に追加)
    [hdd]
     comment = hdd
     path = /mnt/hdd
     read only = no
     guest ok = no
     valid users = sharehdd
    
    (変更)
    obey pam restrictions = no
    ↓
    #obey pam restrictions = no
    
    unix password sync = yes
    ↓
    #unix password sync = yes
    
    pam password change = yes
    ↓
    #pam password change = yes
    
    usershare allow guests = yes
    ↓
    #usershare allow guests = yes
    
    (更にホームディレクトリを共有しない場合、[homes]以下をコメントアウトしてもらえればOKです。)
    
  3. 以下のコマンドで、SAMBAの設定ファイル「/etc/samba/smb.conf」が正しく書かれているか確認する。
    testparm
    
  4. 以下のコマンドで、iptablesの設定を書き換え、SAMBAの通信が通るようにする。
    sudo iptables -A INPUT -j ACCEPT -s (ファイル共有したいネットワークアドレス)/(サブネットマスク) --protocol udp --destination-port 137:138
    sudo iptables -A INPUT -j ACCEPT -s (ファイル共有したいネットワークアドレス)/(サブネットマスク) --protocol tcp --destination-port 139
    sudo iptables -A INPUT -j ACCEPT -s (ファイル共有したいネットワークアドレス)/(サブネットマスク) --protocol tcp --destination-port 445
    
    #WindowsがWebDAV優先で接続しようとすることに対する対策(Webサーバーを立てているなどの場合は追加しない)
    sudo iptables -A INPUT -j REJECT -s (ファイル共有したいネットワークアドレス)/(サブネットマスク) -p tcp --destination-port 80 --reject-with tcp-reset
    ( sudo iptables -A OUTPUT -j ACCEPT -p tcp --tcp-flags FIN,SYN,RST RST -m state --state RELATED,ESTABLISHED )
    
    2.5.の通り、iptablesの設定の変更後は以下のコマンドで設定を記録しておくこと。
    sudo iptables-save | sudo tee /etc/iptables/rules.v4
    
    一見SAMBAとは関係のない80番(http)ポートですが、Windowsでは接続の際に、まずSAMBAではなく、WebDAVというプロトコルで接続しようとします。
    これにより、サーバ接続後、右クリック等でファイル情報を取得しようとすると、WebDAVの応答待ちでエクスプローラーがフリーズします。
    これを防ぐために、80番(http)ポートに接続があった場合に、RSTパケットを返すことで、応答待ちをさせないようにしています。
  5. 以下のコマンドで、SAMBAに設定を読み直しさせます。
    sudo /etc/init.d/samba reload
    
  6. 外部からサーバを見てみる。
    Windowsの場合は、「ネットワーク」から見れます。
    中へアクセスする際には、設定したSAMBA用ユーザー名とパスワードでログインしてください。
    その他のOSから見る方法は、ネット等で調べてください。(^^;)

6.参考サイト

製品紹介(Amazonアフィリエイト)



2016/06/22 iptablesの設定の書き換えと、WebDAVの説明追加