↑ 「FreeBSDで遊ぼう」のページへ

↑ トップページへ

★ [SilverSackの自画自賛] FreeBSDで遊ぼう

★

 家庭内サーバーの構築 - 5. ファイルサーバーの構築(Samba 4.8.2)


家庭内でファイルを共有するファイルサーバーを構築します。そこそこの容量がクラウドで無料で手に入る昨今ですが、バックアップやそこそこ容量のある共有ファイルの置き場所として重宝すると考えて作ってみました。クラウドは転送速度が遅いので、扱う容量が大きいと使い勝手が悪いですよね。

例として、以下の三つのファイル共有を作成してみます。

  1. Sambaのインストールと設定
  2. smb4.confの作成と編集
  3. 誰でもフルアクセスできる共有設定
  4. 誰でもアクセスできるが、家族(masao, masako, masaki, masami)だけが書き込みできる共有設定
  5. 自分(masao)だけがアクセスできる共有設定
  6. 作成した内容と内容の確認
  7. アクセスするユーザーのSambaパスワードの設定
  8. 動作中のSambaの操作

  1. Sambaのインストールと設定
  2. まず、ファイル共有ツールであるSambaのインストールとそれ用の設定を行います。

    1. Sambaのインストール
    2. Sambaをインストールします。4.5, 4.6, 4.7, 4.8といろいろなバージョンがありますが、最新の安定版の4.8をインストールします。
      コマンドプロンプトで以下のコマンドを打ってください。

        # pkg install samba48[ENTER]
    3. rc.confファイルの編集
    4. OS起動時にSambaも起動するようにrc.confファイルを編集します。コマンドプロンプトで

        # ee /etc/rc.conf[ENTER]

      と打ってrc.confを開き、以下の入力をします。

        samba_server_enable="YES"
  3. smb4.confの作成と編集
    1. ファイルの構成
    2. Sambaの設定ファイルであるsmb4.confは、以下のセクションの作成が可能で、その各セクションに設定を書き込むことになります。

      [global]セクション
      共有機能全体に対する設定を書くセクションです。
      [homes]セクション
      各ユーザー毎のファイル共有に関する設定を書くセクションです。
      [printers]セクション
      各プリンター毎のプリンター共有に関する設定を書くセクションです。
      [(共有名)]セクション
      (共有名)で作成したファイル共有に関する設定を書くセクションです。(共有名)は、自分で好きに設定できます。

      今回は、

      • 誰でもフルアクセスできるもの
      • 誰でもアクセスできるが、家族(masao, masako, masaki, masami)だけが書き込みできるもの
      • 自分(masao)だけがアクセスできるもの

      というファイル共有を行いますので、

      • プリンター共有は使用しない(今時、Windowsように用意されているツールを使った方がよほど便利だと思う)ので、[printers]セクションはなし。
      • [homes]セクションは、便利そうだが、今回はなんとなく使用しない。
      • 共有名は、「誰でもアクセスできる」-Shared、「家族だけが書き込みできる」-Family、「自分だけがアクセスできる」-Masaoとする。

      として、全体構成は、

        [global]
         設定、、、
        [Shared]
         設定、、、
        [Family]
         設定、、、
        [Masao]
         設定、、、

      となります。

      様々なパラメーターについては、デフォルトの設定がありますので、それを変更するものだけをここで書けばOKです。デフォルト値は、

        # testparm > /usr/local/etc/smb4.defaults[ENTER]

      とすると、/usr/local/etc/samba24フォルダーにあるsmb4.defaultsに書き出されるので、

        # more /usr/local/etc/smb4.defaults[ENTER]

      といったような方法で、確認できます。

      さて、実際の作成作業に移ります。まず、設定ファイルを作成して、エディタで開きます。

        # ee /usr/local/etc/smb4.conf[ENTER]
    3. 全体に関する設定
    4. ここでは、[global]セクションの記載を取り上げます。

      1. セクション名の記入
      2. まずはセクション名を書きます。以下の内容を書き込みます。

          [global]
      3. 共有全体に関する名称等の設定
      4. 以下の内容を書き込みます。

          workgroup = WORKGROUP
          server string = (適当に自分でつけてください)
          netbios name = (適当に自分でつけてください)

        workgroupは、サーバーが表示されるワークグループ名、server stringは、ブラウズリストでコンピューター名の横に表示されるテキスト、netbios nameは、サーバーのNetBIOS名、をそれぞれ設定します。

      5. ネットワーク関係の設定
      6. ここら辺は、結果オーライでこうなっているだけで、技術的なバックグラウンドを理解していません。こう設定しないとクライアント側のWindows PCで、ファイルサーバーが表示されませんでした。以下の内容を書き込みます。

          dns proxy = no
          local master = yes
          os level = 200

        dns proxyとlocal masterをyesからnoへ、os levelを20から200に変更して見えるようになりました。domain logons(no), domain master(auto), preferred master(auto)は、デフォルトのままです。

      7. 言語設定
      8. デフォルトの言語は、欧米文字なので、日本語に変更します。以下の内容を書き込みます。

          unix charset = UTF-8
          dos charset = CP932
      9. アクセス制限
      10. 家庭内サーバーとするので、アクセスを家庭内ネットワークのIPアドレスに制限します。それぞれの環境で書く内容は異なりますが、以下のような内容になるはずです。

          hosts allow = 127.0.0.1, (ファイルサーバーのIPアドレスの3つめの.までの部分).0/(サブネットマスク)

        私の場合は、ファイルサーバーのアドレス=192.168.10.2、サブネットマスク=255.255.255.0なので、

          hosts allow = 127.0.0.1, 192.168.10.0/255.255.255.0

        となります。これで192.168.10.0~255のアドレスに制限されます。サブネットマスクの数字に0がある場合は、もうちょっと簡便な表記もあって

          hosts allow = 127.0.0.1, 192.168.10.

        でも同様の意味になります。

      11. ユーザー設定
      12. アクセスできるユーザーに関する共通設定をします。以下の内容を書き込みます。

          security = user
          map to guest = Bad User

        意味は、"security=user - アクセスはユーザー単位で制御する、map to guest=Bad User - 登録のないユーザーのアクセスを拒否しない、ということです。登録のないユーザーのアクセスは、他にguest ok, guest onlyといったパラメーターと合わせて制御するのですが、これは共有毎に設定するので、各共有のセクションに記載します。

        他に関係するパラメーターは、guest account(デフォルト値 : nobody)-登録のないユーザーがアクセスした際のユーザー名、username level(デフォルト値 : 0)-ユーザー名の大文字/小文字を区別するかどうか、デフォルトは区別する(Masaoとmasaoは別ということ)がありますが、私はデフォルトのままにしています。

      13. プリンター設定
      14. プリンターサーバーにはしないので、以下の内容を書き込みます。

          load printers = no

        デフォルトではyesになっています。

      15. ログファイル保管場所の設定
      16. ログファイルの保管場所がデフォルトでは設定されていないので、以下の内容を書き込みます。

          log file = /var/log/samba4/log.%m

        %mは、このサーバーのNetBIOS名になります。

    smb4.confには、これ以外に各共有の設定も書きますが、共有に必要な設定はsmb4.confの編集だけではないので、共有の設定全体を一項目にまとめることにして、smb4.confの編集もそちらに書きます。

  4. 誰でもフルアクセスできる共有設定
  5. 「誰でもアクセスできる」の具体的な意味は家庭内ネットワークにアクセスできた人は誰でもという感じなので、家でパソコンをネットにつないでいる家族に加えて、例えば「家に来た知人にアクセスを許可」とか「PCだけじゃなくてスマホも」とかそんなような範囲のイメージになるかと思います。

    1. smb4.confの編集
      1. セクション名の記入
      2. まずはセクション名を書きます。以下の内容を書き込みます(名前は別に好きに決めたらいいわけですが)。

          [Shared]

        Windows PC等のクライアント側では「Shared」という名前で共有フォルダーが表示されます。

      3. 共有に関する全体設定
      4. 以下の内容を書き込みます。

          path = /usr/home/shared
          comment = Volume for Everybody
          read only = no

        pathは、共有するディレクトリ、commentは、共有に関する説明、read onlyは、読み取り専用か書き込み可能かの設定です。read onlyのデフォルトはyesですが、このボリュームは誰でも書き込めるようにするので、noにします。

        他に関連するパラメーターとしては、available(デフォルト値 : yes)-noにするとサービスを停止できる、メンテ目的で利用機会があるか、browsable(デフォルト値 : yes)-表示させるかどうか、デフォルトのままでいいので設定不要かと、administrarive share(デフォルト値 : no)-管理用の共有とするかどうか、これもデフォルトのままでいいので設定不要かと、writable(デフォルト値 : no)-read onlyの逆の意味でのパラメーター、read only=noの代わりにwritable=yesと書いてもいい、といったものがあります。

      5. ユーザー設定
      6. ネットワークに入れた人は誰でもアクセスできるように、以下の内容を書き込みます。

          guest ok = yes
          guest only = yes

        パラメーターの意味は名前の通りです。guest okは、ユーザー登録のないアクセスを許す、guest onlyは、アクセス時にユーザー認証をしない、ということです。
        他に関係するパラメーターは、valid users(デフォルト値 : (設定なし))-アクセスを許すユーザーのリスト、administrative users(デフォルト値 : (設定なし))-アクセスした際、管理者権限を持つユーザーのリスト、ありますが、ここではデフォルトのままにします。

      7. 共有の操作権限の設定
      8. アクセスしたユーザーに「読み取り可能/書き込み可能/実行可能」の権限をどう持たせるかを設定します。

          create mask = 0777
          directory mask = 0777

        create maskは、作成したファイルの操作権限、directory maskは、作成したディレクトリの操作権限です。ここでアクセスしたユーザーの権限は1の位の数字で設定されます。4(読み取り可能) + 2(書き込み可能) + 1(実行可能) = 7になります。その左側の数字が一桁目より小さいというのはあり得ない(千の位は0ですが)ので、0777となります。デフォルト値は、create mask=744、directory mask=755で、オーナー以外は書き込みができない設定です。

    2. 共有するディレクトリの作成と設定
    3. 共有するディレクトリを作成し、上記のdirectory maskの設定に従ってアクセス設定をします。コマンドプロンプトで以下のコマンドを打ちます。

        # mkdir -p /usr/home/shared[ENTER]
        # chmod 0777 /usr/home/shared[ENTER]
  6. 誰でもアクセスできるが、家族(masao, masako, masaki, masami)だけが書き込みできる共有設定
  7. ネットワークにログインしたユーザーは全員アクセスできるが、書き込みできるのは家族だけで、他は閲覧のみという設定の共有です。

    1. smb4.confの編集
      1. セクション名の記入
      2. まずはセクション名を書きます。以下の内容を書き込みます(名前は別に好きに決めたらいいわけですが)。

          [Family]

        Windows PC等のクライアント側では「Family」という名前で共有フォルダーが表示されます。

      3. 共有に関する全体設定
      4. 以下の内容を書き込みます。

          path = /usr/home/family
          comment = Volume for My Family
          read only = no

        パラメーターの意味等については既に書いたので省きます。

      5. ユーザー設定
      6. アクセスできるのは家族四人に限定するように、以下の内容を書き込みます。

          guest ok = yes
          guest only = no

        guest okはyes、guest onlyはnoの設定だと、誰でもアクセスできるが、登録されたユーザーからのアクセスはそのユーザーの設定に従うことになります。この意味は次項を参照してください。

      7. 共有の操作権限の設定
      8. 家族はフォルダのグループに登録して10の位のアクセス設定を、他のユーザーは1の位のアクセス設定を適用させるので、10の位は7(読み書き実行全てOK)、1の位はフォルダは5(読み取りと実行)ファイルは4(読み取りのみ)、100の位は7にします。

          create mask = 0774
          directory mask = 0775

        意味は前述の通りです。

    2. グループの作成とユーザーの追加
    3. 共有のためのグループを作成して、作成したグループに家族(masao, masako, masaki, masami)を追加します。コマンドプロンプトで以下のコマンドを打ちます。

        # pw groupadd family[ENTER]
        # pw groupmod family -M masao,masako,masaki,masami[ENTER]
    4. 共有するディレクトリの作成と設定
    5. (1)共有するディレクトリを作成し、(2)アクセス設定を上記のdirectory maskに合わせ、(3)所属グループを家族が所属するfamilyに変更します。コマンドプロンプトで以下のコマンドを打ちます。

        # mkdir -p /usr/home/family[ENTER]
        # chmod 0775 /usr/home/family[ENTER]
        # chown :family /usr/home/family[ENTER]
  8. 自分(masao)だけがアクセスできる共有設定
  9. 自分だけがアクセスできる共有です。

    1. smb4.confの編集
      1. セクション名の記入
      2. まずはセクション名を書きます。以下の内容を書き込みます(名前は別に好きに決めたらいいわけですが)。

          [Masao]

        Windows PC等のクライアント側では「Masao」という名前で共有フォルダーが表示されます。

      3. 共有に関する全体設定
      4. 以下の内容を書き込みます。

          path = /usr/home/masao
          comment = Volume for Masao
          read only = no

        パラメーターの意味等については既に書いたので省きます。pathは、ユーザー登録をした際に設定されたユーザーディレクトリを指定します。

      5. ユーザー設定
      6. ここでは、まず、ゲストログインを無効にします。アクセスをmasaoに限定するのはディレクトリへのアクセス権限の設定で行います。

          guest ok = no
      7. 共有の操作権限の設定
      8. ここで指定したディレクトリはMasaoがオーナーなので、この操作権限は百の位になります。これを7にして他は0にします。

          create mask = 0700
          directory mask = 0700
    2. 共有するディレクトリの設定
    3. 共有するディレクトリのアクセス設定を、上記のdirectory maskの設定に従って変更します。コマンドプロンプトで以下の入力をします。

        # chmod 0700 /usr/home/masao[ENTER]

      これでオーナーのmasao以外はアクセスできません。

  10. 作成した内容と内容の確認
  11. 作成したsmb4.confは、testparmで記載内容のチェックができます。以下のコマンドを流してください。

      # testparm /usr/local/etc/smb4.conf[ENTER]

    チェック結果が画面に表示されます。「Loaded services file OK」と表示されたら問題ありません。問題がある時は、local masterとかのディレクティブ名が出てきて問題の内容が表示されるので、それを見て修正してください。

  12. アクセスするユーザーのSambaパスワードの設定
  13. Samba用のパスワードはFreeBSDに登録したパスワードとは別なので、登録した各ユーザーに対して、Sambaで共有機能を使用するユーザーのSamba用のパスワードを登録します。コマンドプロンプトで以下の入力をします。

      # pdbedit -a -u masao[ENTER]
      new password : (パスワードを入力する)
      retypr new password : (パスワードを入力する)
      # pdbedit -a -u masako[ENTER]
      new password : (パスワードを入力する)
      retypr new password : (パスワードを入力する)
      # pdbedit -a -u masaki[ENTER]
      new password : (パスワードを入力する)
      retypr new password : (パスワードを入力する)
      # pdbedit -a -u masami[ENTER]
      new password : (パスワードを入力する)
      retypr new password : (パスワードを入力する)
  14. 動作中のSambaの操作
  15. 動作中のSambaの停止、再起動、状態確認、Sambaの起動は、以下のコマンドで行います。
    1. Sambaの起動
    2. コマンドプロンプトで以下のコマンドを打ってください。

        # service samba_server start[ENTER]
    3. Sambaの停止
    4. コマンドプロンプトで以下のコマンドを打ってください。

        # service samba_server stop[ENTER]
    5. Sambaの再起動
    6. コマンドプロンプトで以下のコマンドを打ってください。

        # service samba_server restart[ENTER]
    7. Sambaの状態確認
    8. コマンドプロンプトで以下のコマンドを打ってください。

        # service samba_server status[ENTER]

[その他の情報]

なお、このページを書くに当たって、以下の記事を参考にしました。

今回のセットアップでのバージョン情報
samba 4.8.5_1

(2018年 8月 4日 記
2018年10月13日 更新)