Rocky Linux 9 / AlmaLinux 9にSambaサーバーをインストールする方法

Sambaは、ユーザーがタスクを完了するために必要なネットワークリソースを共有できる人気のファイル共有オープンソースアプリケーションです。 SMB(サーバーメッセージブロック)プロトコルの一般的な実装で、LinuxまたはWindowsクライアントからアクセスできるLinuxサーバー上のファイルと印刷の共有を可能にします。

前提条件
- プリインストール済みのRocky Linux 9またはAlmaLinux 9 
- sudo権限を持つレギュラーユーザー
- インターネット接続

### 1) サーバーパッケージの更新
最初に、サーバーが最新バージョンに更新されているか確認します。以下のコマンドを実行します。

```
$ sudo dnf -y update
```

すべてのアップデートがインストールされたら、システムを再起動します。

```
$ sudo reboot
```

### 2) Rocky Linux 9/ AlmaLinux 9へのSambaサーバのインストール
Sambaパッケージは、デフォルトのリポジトリに含まれています。以下のコマンドを実行してインストールします。

```
$ sudo dnf install samba samba-common samba-client -y
```

インストールが完了すると、インストールされたパッケージのリストが表示されます。

### 3) Samba共有の作成と設定
Samba共有とは、ネットワーククライアントシステムからアクセス可能なディレクトリのことです。以下のコマンドでディレクトリを作成します。

```
$ sudo mkdir -p /home/user/sambashare
```

ディレクトリのアクセス許可と所有者を設定します。

```
$ sudo chmod -R 755 /home/user/sambashare
$ sudo chown -R nobody:nobody /home/user/sambashare 
$ sudo chcon -t samba_share_t /home/user/sambashare
$ sudo chcon -R -t samba_share_t /home/user/
```

Sambaの主要設定ファイルであるsmb.confを編集します。

```
$ sudo vi /etc/samba/smb.conf
```

共有設定を追加します。

```
[global]
        workgroup = WORKGROUP
        server string = Samba Server %v
        netbios name = rocky-9
        security = user
        map to guest = bad user
        dns proxy = no
[Share]
        path = /home/user/sambashare
        browsable = yes
        writable = yes
        guest ok = yes
        read only = no
```
:wq!で保存して終了します。


```
[Share]
        path = /home/user/sambashare
        browsable = yes
        writable = yes
        guest ok = yes
        # read only = no #これを除外することでうまくいきました。
```



設定ファイルを確認します。

```
$ sudo testparm
```

### 4) Sambaサービスの起動と有効化

```
$ sudo systemctl start smb nmb
```

```
$ sudo systemctl enable smb nmb
```

状態を確認します。

```
$ sudo systemctl status smb
$ sudo systemctl status nmb
```

### 5) LinuxクライアントからのSamba共有へのアクセス

クライアントにSamba clientをインストールします。

```
$ sudo dnf install samba-client
```

共有フォルダにアクセスします。

```
$ sudo smbclient -L //サーバーIP/Share
```

### 6) WindowsクライアントからのSamba共有へのアクセス

Windowsの実行ダイアログからIPアドレスかホスト名を指定します。




### 7) Samba共有のセキュリティの強化

以下は、マークダウン形式で清書された指示です：

---

#### セキュアなサンバ共有

サンバはプライベートとパブリックの共有を許可し、共有へのアクセスに認証は必要ありません。このセクションでは、認証されたユーザーのみがアクセスできるセキュアなディレクトリをサンバで共有する設定を行います。

#### 新しいサンバユーザーの作成

まず、サーバーに新しいサンバユーザーを作成しましょう。

```bash
$ sudo useradd smbuser
```

#### パスワードの設定

次に、認証に使用されるパスワードを設定します。

```bash
$ sudo smbpasswd -a smbuser
```

#### ユーザーをグループに追加

作成したばかりの新しいグループに新しいサンバユーザーを追加します。

```bash
$ sudo groupadd smb_group
$ sudo usermod -g smb_group smbuser
```

#### セキュアなディレクトリの作成と権限の設定

次に、上で述べたパスと同じパスにセキュアなディレクトリを作成し、フォルダの権限と所有権を次のように設定します。

```bash
$ sudo mkdir -p /home/user/sambashare
$ sudo chmod -R 775 /home/user/sambashare
$ sudo chown -R user:smb_group /home/user/sambashare
$ sudo chcon -t samba_share_t /home/user/sambashare
```



smb.confに設定を追加します。
```
[Share]
path = /home/user/sambashare
valid users = @smb_group
guest ok = no
writable = no
browsable = yes
```

Windowsクライアントから認証が必要になります。



## 【事後追記】
Sambaの通信に使用される一般的なポートはTCPポート445です。Firewalldを使用してポート445を開くには、以下のコマンドを使用します。

```bash
sudo firewall-cmd --add-port=445/tcp --permanent
```

このコマンドは、TCPポート445を永続的にファイアウォール設定に追加します。ポートを永続的に追加することで、システムが再起動されてもポート445が開かれたままとなります。

ポートを追加した後、設定を反映するために以下のコマンドを実行してください：

```bash
sudo firewall-cmd --reload
```

これでポート445が正常に開かれ、Sambaサービスが外部からの接続を受け付けるようになります。



### ネットワーク共有のキャッシュをクリアするためのコマンド

```bash
net use * /delete /y
```

1. `net use`：ネットワーク ドライブの割り当てと関連する情報を表示または管理するためのコマンドです。

2. `*`：ワイルドカード文字です。ワイルドカード文字 `*` を指定することで、すべてのネットワーク ドライブの割り当てを対象に操作を行うことを示します。つまり、どのネットワーク ドライブに対してもこのコマンドを適用します。

3. `/delete`：ネットワーク ドライブの割り当てを解除するためのオプションです。このオプションを指定すると、ネットワーク ドライブの割り当てが解除されます。

4. `/y`：確認プロンプトを無効にするオプションです。このオプションを指定すると、コマンドが確認を求めずにすべてのネットワーク ドライブの割り当てを即座に解除します。

したがって、`net use * /delete /y` コマンドは、すべてのネットワーク ドライブの割り当てを解除し、関連するキャッシュをクリアするためのコマンドです。これにより、以前のネットワーク ドライブの情報が削除され、新しいネットワーク ドライブの割り当てを行う際にクリーンな状態に戻ります。ただし、このコマンドを使用する際には注意が必要で、誤って正当なネットワーク ドライブを解除しないように注意してください。


### ネットワークドライブを再割り当てする際に問題解決方法
以下の手順で問題を解決できるかもしれません。

1. **既存のネットワークドライブの削除**
    - Windowsの場合、エクスプローラーを開き、「このPC」にアクセスします。
    - 割り当てられているドライブU:を右クリックし、「ネットワークドライブの切断」を選択します。

2. **コマンドプロンプトを使用してドライブの割り当てを解除**
    - 「スタート」メニューから「コマンドプロンプト」を開きます（管理者として実行することをお勧めします）。
    - 次のコマンドを入力して実行します: `net use U: /delete`

3. **新しいネットワークドライブの割り当て**
    - 再びエクスプローラーを開き、「このPC」にアクセスし、「コンピューター」タブの「ネットワークドライブの割り当て」を選択します。
    - ドライブ文字（U:）を選択し、新しいネットワークパス（172.16.0.2の共有）を入力します。

4. **コマンドプロンプトを使用して新しいドライブを割り当て**
    - コマンドプロンプトを再度開きます。
    - 新しいネットワークパスにドライブを割り当てるために、次のようなコマンドを使用します: `net use U: \\172.16.0.2\共有名`

これらの手順を試してみてください。それでもうまくいかない場合は、エラーメッセージや具体的な状況を教えていただければ、さらに詳しいアドバイスを提供できるかもしれません。また、ネットワークの設定やセキュリティポリシーによっては、これらの手順が制限される場合がありますので、必要に応じてシステム管理者に相談してください。


### 事後追記

1. **Sambaユーザーの確認**:
   - Sambaユーザーデータベースに `user` が存在しているかを確認します。これは以下のコマンドで確認できます。
     ```bash
     sudo pdbedit -L -v
     ```
     このコマンドはSambaユーザーリストを表示し、`user` が存在するかどうかを確認するのに役立ちます。

2. **ファイルシステムの権限**:
   - Samba共有のファイルシステム上で `user` が適切な権限を持っているかを確認します。共有ディレクトリ（例えば `/home/user/Dropbox`）に対する権限を確認するには、以下のコマンドを使用します。
     ```bash
     ls -ld /home/user/Dropbox
     ```
   - このコマンドはディレクトリの権限、所有者、およびグループを表示します。`user` が読み書き可能な権限を持っていることを確認してください。

3. **Sambaの設定ファイル**:
   - `smb.conf` ファイルで `user` の権限が適切に設定されていることを再確認します。特に `[Share]` セクションで `valid users = user` やその他の関連する設定が正しいことを確認してください。

これらのステップを実行することで、Sambaユーザー `user` の権限が適切に設定されているかどうかを確認できます。もし何か問題があれば、それに応じてユーザーをSambaデータベースに追加したり、ファイルシステムの権限を調整したりする必要があります。

### 確認用

1. **Sambaクライアントのインストール**:
   - Linuxには、Samba共有にアクセスするための「Sambaクライアント」パッケージが必要です。
   - まず、ターミナルを開きます。
   - 次に、以下のコマンドを入力して、Sambaクライアントをインストールします。ここでは例として、`dnf`パッケージマネージャーを使用しています（FedoraやRed Hat系のLinuxで使われるものです）。もしUbuntuやDebian系のLinuxを使用している場合は、`dnf`の代わりに`apt`を使用します。
   - コマンド: `$ sudo dnf install samba-client`

2. **Samba共有へのアクセス**:
   - Sambaクライアントがインストールされたら、次はSamba共有にアクセスします。
   - ターミナルで、以下のコマンドを使用します。
   - コマンド: `smbclient '\\SMB-Server\Share' -U user`
   - ここで、「SMB-Server」はSambaサーバーの名前またはIPアドレス、「Share」はアクセスしたい共有の名前、「user」は使用するユーザー名に置き換えてください。
   - このコマンドを実行すると、パスワードを求められるので、対応するユーザーのパスワードを入力します。