【RockyLinux】Sambaを使ってファイルサーバーを作りたーい！！

# RockyLinuxでファイルサーバーを作りたい。
RockyLinuxでファイルサーバーを構築する方法を纏めたい。
ファイルサーバーって便利だからね。

# 実行環境
- Linux (私はRockyLinux8.5をインスコした実機)
- Windows10 (私はOSビルド19043(21H1)の実機)

CentOSとかAlmaLinuxとかRHEL系なら今回の手順でいけると思います。

# ファイルサーバーを作る！！
早速だがファイルサーバーを作っていこう。

1. 共有ディレクトリを作成する。
   **作成済みのディレクトリを共有したい場合はスキップ**

    ```bash
    $ mkdir ${任意の共有ディレクトリ名}
    ```

2. 共有ディレクトリの権限を設定する。

    ```bash
    $ chmod 777 /home/${ユーザーディレクトリ名}/${任意の共有ディレクトリ名}/
    ```

3. `samba`をインストールする。

    ```bash
    # samba インストール
    $ sudo dnf install samba -y
    ```

4. `samba`を自動起動設定&起動する。

    ```bash
    # smb 自動起動設定&起動
    $ sudo systemctl enable smb --now
    # nmb 自動起動設定&起動
    $ sudo systemctl enable nmb --now 
    ```

5. `samba`用にユーザーを設定する。
   **こちらのユーザー名はユーザーホームディレクトリ名と一致させる必要がある。**

    ```bash
    $ sudo pdbedit -a ${ユーザー名}
    new password: ${任意のパスワード}
    retype new password: ${任意のパスワード}
    ```

6. `smb.conf`の設定。

    ```bash
    $ sudo vim /etc/samba/smb.conf
    ```

7. `[global]`に下記を追加する。

    ```conf
    [global]
            # 文字コード設定
            unix charset = UTF-8
            dos charset = CP932
            # workgroup 設定
            workgroup = WORKGROUP # WindowsのWORKGROUP名と一致させる。(デフォルトでは WORKGROUP)
            # 認証設定
            security = user
    ```

8. `[{任意の共有名}]`の作成。

    ```conf
    [{任意の共有名}]
            comment = {任意のコメント}　　　　　　　　　# 用途が分かりやすいものが良い
            path = /home/{任意の共有ディレクトリパス} 
            writable = yes                           # 書き込みの許可設定
            guest ok = yes                           # ゲストユーザーの許可設定
            force create mode = 0777                 # ファイル作成時のパーミッション設定
            force directory mode = 0777              # フォルダ作成時のパーミッション設定
            inherit permissions = yes                # パーミッションの継承設定
    ```

9. `/etc/samba/smb.conf`内が下記の設定になっているか確認する。

    ```conf
    [global]
            security = user
            passdb backend = tdbsam
            printing = cups
            printcap name = cups
            load printers = yes
            cups options = raw
            unix charset = UTF-8
            dos charset = CP932
            workgroup = WORKGROUP

    [homes] # デフォルト設定のまま
            comment = Home Directories
            valid users = %S, %D%w%S
            browseable = No
            read only = No
            inherit acls = Yes

    [printers] # デフォルト設定のまま
            comment = All Printers
            path = /var/tmp
            printable = Yes
            create mask = 0600
            browseable = No

    [print$] # デフォルト設定のまま
            comment = Printer Drivers
            path = /var/lib/samba/drivers
            write list = @printadmin root
            force group = @printadmin
            create mask = 0664
            directory mask = 0775

    [{任意の共有名}]
            comment = {任意のコメント}
            path = /home/{任意の共有ディレクトリパス}
            writable = yes
            guest ok = yes
            force create mode = 0777
            force directory mode = 0777
            inherit permissions = yes

    ```


10. `smb.conf`の設定を完了したら`smb`を再起動する。(nmbの再起動は不要)

    ```bash
    $ sudo systemctl restart smb
    ```

    ### オプション

    `SELinux`を有効にしていて、今回の様に`/home`配下に共有フォルダ作成する場合の設定。

    ```bash
    # 確認コマンド
    $ getenforce
    Enforcing # 有効

    $ sudo setsebool -P samba_enable_home_dirs on
    $ sudo restorecon -R /home/{任意の共有ディレクトリパス}
    ```

    `Firewalld`を有効にしている場合のサービスの許可設定

    ```bash
    # 確認コマンド
    $ sudo systemctl status firewalld.service

    # Firewall samba許可設定
    $ sudo firewall-cmd --add-service=samba
    success

    # Firewall samba許可設定恒久化
    $ sudo firewall-cmd --runtime-to-permanent
    success
    ```

11. 再起動後、正常にWindows側のネットワークディレクトリに表示され、アクセス出来る事を確認する。


以上で設定完了です。
作業頻度が高くないので、忘れがちなファイルサーバーの構築設定をまとめてみました。
それでは良いLinuxライフを！！