自宅サーバーにnasを構築した話。

今回、Ubuntu Serverでnasを構築したのでその内容をまとめる。
初版：2025/05/18
- [1. 環境](#1-環境)
- [2. opensshを使ってUbuntu desktopからリモート操作](#2-opensshを使ってubuntu-desktopからリモート操作)
  - [2.1. パッケージをインストールする。](#21-パッケージをインストールする)
  - [2.2. opensshを起動する](#22-opensshを起動する)
  - [2.3. サーバーのIPアドレスを確認する](#23-サーバーのipアドレスを確認する)
  - [2.4. sshによりサーバーに接続](#24-sshによりサーバーに接続)
- [3. sambaのインストール](#3-sambaのインストール)
- [4. フォルダのパーミッションの変更](#4-フォルダのパーミッションの変更)
  - [4.1. フォルダの所有者設定の変更](#41-フォルダの所有者設定の変更)
  - [4.2. フォルダのアクセス権限の変更](#42-フォルダのアクセス権限の変更)
- [5. ユーザーの作成](#5-ユーザーの作成)
  - [5.1. Ubuntuのユーザー作成方法](#51-ubuntuのユーザー作成方法)
  - [5.2. sambaユーザーの作成](#52-sambaユーザーの作成)
- [6. 設定ファイルの作成](#6-設定ファイルの作成)


## 1. 環境
PCの構成は以下のものを使用した
* PC：HP Prodesk 400 G5 mini
  * CPU：intel core i3 9100T
  * メモリ：16GB (DDR4)
  * ストレージ
    * SSD：256GB
    * HDD：1TB ← nas用途にはHDDを使用する
* OS：Ubuntu Server LTS 24.04.02

この構成をnas用途のみで使用するにはオーバースペックである。
そのため今後webアプリの試運転用途で使用する予定である。

## 2. opensshを使ってUbuntu desktopからリモート操作
今回Ubuntu Serverでnasを構築するにあたってopensshを使用したリモート操作を行った。  
これによる利点は以下の通りである。
* 追加のキーボードが不要
* ターミナル操作をchatGPTに質問しながらできる
* コマンドのコピペが可能である

opensshの導入はUbuntu Serverではインストール時にチェックを入れるだけでできる。
そうでない場合の導入方法を以下に示す
※2.1. ~ 2.3.まではServer側で2.4.をデスクトップ側で
### 2.1. パッケージをインストールする。
```shell
sudo apt update
sudo apt install openssh-server
```
### 2.2. opensshを起動する
```shell
sudo systemctl enable ssh
sudo systemctl start ssh
```
### 2.3. サーバーのIPアドレスを確認する
固定IPにしていない場合は固定IPの設定をする。
IPアドレスの確認コマンドは以下の通りである。
```shell
ip a
```
### 2.4. sshによりサーバーに接続
以下のコマンドを実行し、サーバーに接続する。
```shell
ssh ユーザー名@サーバーのIPアドレス
```

ここまででssh接続完了
## 3. sambaのインストール
nasを構築するためにsambaを使用する。
sambaについては[samba公式ドキュメント](https://www.samba.org/samba/docs/)を参照してください。
sambaのインストールは以下のコマンドで可能。
```shell
sudo apt update
sudo apt install samba
```
## 4. フォルダのパーミッションの変更
sambaで共有するフォルダを作成し、そのフォルダのパーミッション（ユーザーごとのアクセス権限のようなもの）を設定する。
これをしないと共有先でフォルダを作成・編集・リネーム等ができない。 
### 4.1. フォルダの所有者設定の変更
まずは共有するフォルダの所有者の設定を行う。
``` shell
sudo chown [ユーザー]:[グループ] 共有するフォルダのパス
```
ユーザーを`nobody`グループを`nogroup`とすることで匿名アクセスが可能になる。

またグループを作成するコマンドは以下の通りである。
```shell
sudo groupadd グループ名
```
そしてグループにユーザーを追加するコマンドは以下の通りである。
```shell
sudo usermod -aG グループ名 ユーザー名
```

### 4.2. フォルダのアクセス権限の変更
以下のコマンドを実行することでフォルダのアクセス権限を変更できる
```shell
sudo chmod 0775 共有するフォルダのパス
```

このコマンドの重要な点は0775の部分である。
abcd = 0775としたとき以下のことが言える

a: 特殊権限のアクセス可能範囲
b: 所有者のアクセス可能範囲
c: グループのアクセス可能範囲
d: その他のユーザーのアクセス可能範囲

またそれぞれの設定値は次の内容を意味する。
1(0b001): 実行可能
2(0b010): 書き込み可能
4(0b100): 読み取り可能

つまり7(0b111)は読み書き実行可能を示し、
5(0b101)は読み実行可能を示す。

匿名ユーザーでも自由に使えるようにしたい場合は
```shell
sudo chmod 0777 共有するフォルダのパス
```
とする。

## 5. ユーザーの作成
Ubuntu OSとsambaのユーザーを作成する。
### 5.1. Ubuntuのユーザー作成方法
UbuntuのOSとしてのユーザー作成方法は以下の通りである
```shell
sudo adduser ユーザー名
```
この作成したユーザーにフォルダのアクセス権限を付与することになる。
### 5.2. sambaユーザーの作成
sambaユーザーの作成方法は以下の通りである。
```shell
sudo smbpasswd -a ユーザー名
```
このユーザー名はUbuntuのユーザー名を一致させることでフォルダの所有者として認識される。
## 6. 設定ファイルの作成
`/etc/samba/smb.conf`にsambaの設定を書き込む。
例を以下に示す。
```shell
[Share]
   path = 共有するファイルのパス
   browseable = yes
   read only = no
   guest ok = no
   valid users = ユーザー名
```

`smb.conf`の編集完了後にsambaを起動させる。
そのコマンドを以下に示す。
```shell
sudo systemctl start smbd
```

sambaの起動に完了した場合、Ubuntu Desktopであればファイルアプリで`smb://サーバーのIPアドレス`で検索することで共有されているフォルダを操作できるようになる。