Ubuntu 20.04 でファイルサーバー(NAS)を作ろう!

engineer

Linuxを多少触ったことがあるけど、特に使い道が見つからない、そんなときにオススメなのがサーバーの構築です。本記事ではLinuxのUbuntuを用いて、他のPCからもアクセスが可能なファイルサーバー(NAS)をつくる方法を紹介します。サーバーは基本的に24時間365日稼働させ続けますが、一般的なPCはそのような連続稼働を前提に作られていません。そのため、常用する場合はサーバー用のPCを使うことをオススメします。

あるいは「Raspberry Pi(ラズベリーパイ)」も良い選択ですね。消費電力も小さいですし、何より本体が安い。(2020/05/27追記)こちらの記事でラズパイで外付けHDDを使う方法を紹介しています。こちらと組み合わせることで比較的安価で大容量なファイルサーバーを作ることもできます。ラズパイは通常のUbuntuはサポートされていないので「Ubuntu Server」というサーバー用のOSを用いてください。

今回はUbuntuの執筆時点で最新バージョンである20.04を用いましたが、他の場合でも基本的な操作は同じだと思います。それでは頑張っていきましょー!

アップデート

※ここからはコマンドライン(黒い画面で文字だらけのやつ)を使っていきます。アクティビティから「端末」と検索すると出てくると思います。(余談ですが、Windowsでは「コマンドプロンプト」、Macでは「ターミナル」などと呼ばれていますね。できれば統一してほしいものです…)

もちろんインターネットに接続した状態で作業してくださいね!

まず最新の状態にするためにアップデートを行います。今は最新状態だ!と自信がある方は飛ばして構いません。

はじめにこのコマンドを入力して Enterキーを押してください。

sudo apt update

パスワードを求められることもあります。エラーが出たら再度実行してください。(エラーが連発する場合は再起動するといいと思います。)

ここで「アップグレードできるパッケージが〇個あります。」的な表示が出たら以下のコマンドを実行しましょう。

sudo apt upgrade

これで前準備は終了です!(筆者の環境ではアップデート後そのまま使うと微妙に不具合が出たりしたこともあるので、ここで一度再起動するのが無難です。)

sambaのインストール

sambaとは、Linux上でファイルサーバーを実現するソフトウェアの1つです。次のコマンドでsambaをインストールします。

sudo apt install samba

sambaがインストール出来たら、pdbeditというコマンドでsambaにユーザーを登録します。

sudo pdbedit -a [ユーザー名]

[ユーザー名]には自分が使っているユーザー名を入れてください。(Ubuntu上に存在するユーザーならどれでも大丈夫です。)

コマンドを実行するとパスワードの登録を求められますが、決して忘れないかつ簡単ではないものに設定しましょう。後述の「パスワード付き共有ディレクトリを作る」で必要となります。

共有用のディレクトリを作る

ファイルサーバーで共有するディレクトリを作成します(ディレクトリとは、Windowsでいうフォルダのことです)。

デスクトップやファイルマネージャから作っても良いですが、ここではこれもコマンドラインで作成します。以下のコマンドを入力してください。

mkdir /home/ubuntu/share

/home/ubuntu/shareが共有ディレクトリの場所です。この場所のことを「パス」といいます。

(このパスはあくまで一例です。好きな場所に作って良いですが、あとでわかりやすい場所にしましょう。)

ディレクトリが作れたら以下のコマンドで誰でもアクセスできるよう権限を変更しましょう。(詳しくは調べてね!)

sudo chmod 777 /home/ubuntu/share

これをやっておかないとせっかく共有しても Windowsからファイルを保存できないといった問題が発生したりします。

sambaの設定

sambaをつかうために、「smb.conf」というファイルを編集します。

コマンドラインに次のコマンドを入力してください。

sudo nano /etc/samba/smb.conf

すると、smb.confが開かれ編集できるようになると思います。

まず、24行目あたりに[global]という記述があるので次のようになるよう追記します。

#======================= Global Settings =======================

[global]
   dos charset = CP932       # 追記部分
   unix charset = UTF-8      # 追記部分

次に、30行目あたりのworkgroupというところを確認します。初めはWORKGROUPとなっていますが、基本的にはそのままで大丈夫です。しかし、ファイルサーバーにアクセスしたい Windowsによっては設定が必要です。

Windows側で「コントロールパネル->システムとセキュリティ->システム->コンピュータ名、ドメインおよびワークグループの設定」で調べることができます。

workgroupの確認

図の赤丸で囲んだところが「WORKGROUP」ならそのままで大丈夫です!

そうでなければ下のコード(30行目あたり)のWORKGROUPを書き換えてください。

# Change this to the workgroup/NT-domain name your Samba server will part of
   workgroup = WORKGROUP    # 必要があれば書き換える

次は35行目あたりからあるNetworkingの項目です。

詳しくは説明しませんが、以下のように設定するとうまく作動してくれます。(セミコロンを消さないといけないところがあるのでよく見てください。)

#### Networking ####

# The specific set of interfaces / networks to bind to
# This can be either the interface name or an IP address/netmask;
# interface names are normally preferred
   interfaces = 192.168.XX.0/24 eth0     # 行の初めについていたセミコロンを消す、127.0.0.0/8となっていた部分をネットワークアドレスに書き換える

# Only bind to the named interfaces and/or networks; you must use the
# 'interfaces' option above to use this.
# It is recommended that you enable this feature if your Samba machine is
# not protected by a firewall or is a firewall itself.  However, this
# option cannot handle dynamic or non-broadcast interfaces correctly.
   bind interfaces only = yes     # 行の初めについていたセミコロンを消す
   map to guest = bad User        # 追記部分

ここで、「interfaces = 192.168.XX.0/24 eth0」という部分をちゃんと書くために「ネットワークアドレス」というものを調べます。ついでに後で使うのでUbuntuを入れているPCのIPアドレスも調べておきます。(ネットワークアドレスとはネットワークそのものを表す特別なIPアドレスです。)

IPアドレスは、Ubuntuのコマンドラインで

ip address show

を実行するとわかります。下図のような感じです(いろいろ隠していますが、本当はもっと文字が多いです)。

IPアドレスの確認

例えば「192.168.11.15/24」のような形で書かれていると思います。.(ドット)で区切られた4組の数字の部分がIPアドレスに相当します。詳しくは説明しませんが、/(スラッシュ)の後の数字は「サブネットマスク数」を表します。

サブネットマスク数が16だったら、IPアドレスの後ろ2組を0にしたものがネットワークアドレス、サブネットマスク数が24だったら、IPアドレスの後ろ1組を0にしたものがネットワークアドレスとなります。

例えば、上のコマンドで調べたIPアドレスが「192.168.11.15/16」だったらネットワークアドレスは「192.168.0.0/16」、「192.168.11.15/24」だったらネットワークアドレスは「192.168.11.0/24」となります。このネットワークアドレスを「interfaces =」のところへ追記するようにしてください(デフォルトでは「127.0.0.0/8」となっていると思います)。

最後に、smb.confの末尾に共有ディレクトリの設定を追記します。

[share]
  path = /home/ubuntu/share
  writeable = yes
  guest ok = yes
  guest only = yes
  create mode = 0777
  directory mode = 0777

一番上の[share]は表示名です。Windowsなどからアクセスするときに表示される名前で、何に設定しても大丈夫ですがわかりやすいものにしましょう。

次のpathは共有用ディレクトリのパスです。先ほど作ったディレクトリのパスを記入しましょう。

他の部分は説明しませんが、この設定で「同じローカルネットワーク上にあるコンピュータ(同じWi-Fiに繋いでいるコンピュータ)なら誰でもアクセスできる」共有ディレクトリが完成しました。

smb.confの編集が終了したら、「control+ oからの Enter」で保存し「control+ x」でnanoを終了してください。

終了後、コマンドラインへ

testparm

というコマンドを入力してください。smb.confに誤りがないかチェックしてくれます。Loaded services file OK.と出れば問題なし。

sambaの実行

上記設定が完了したら

sudo systemctl restart smbd nmbd

というコマンドを実行してください。これで smb.confの編集が反映されます。

さらに、Ubuntuの起動時に自動で実行してほしいなら

sudo systemctl enable smbd nmbd

を実行してください。ここまで出来たら一度再起動しましょう。

これで完成です!

Windowsから確認

Windowsなど他のコンピュータからファイルサーバーにアクセスする場合、ファイルサーバーにしたUbuntuの「IPアドレス」が必要になります。先ほど「sambaの設定」で調べましたね。

※個別のIPアドレスは変わってしまうこともあるので、できれば固定しておいた方が良いです。ルーターの機能でできたりするので調べてみてください。

Windowsのエクスプローラへ、下図のように「¥¥[IPアドレス]」と入力し Enterキーを押してください。(「/24」などの部分は必要ありません。)

IPアドレスの入力

エクスプローラ上に先ほど作成した「share」が出ていれば成功です!

shareを確認できた!

このshareの中にファイルを保存すれば、同じローカルネットワーク上の別のコンピュータからも見ることができるようになります。

お疲れさまでした!

追加の設定:パスワード付き共有ディレクトリを作る

ここまででファイルサーバーは完成しましたが、今のままでは同じローカルネットワーク上ならどのコンピュータでもアクセスできるようになっています。これでは内緒のファイルが保存できません!なので、こちらでパスワードを設定する方法を説明します。

〇グループの作成

※またUbuntuのコマンドラインを使います。

まず以下のコマンドで「グループ」というものを作成します。

sudo groupadd [グループ名]

そして、上記の「sambaのインストール」でpdbeditコマンドを使ってsambaに登録したユーザーを作ったグループに追加します。

sudo usermod -aG [グループ名] [ユーザー名]

〇共有用ディレクトリの設定

mkdir /home/ubuntu/share2

ここでは先ほどまでの例と区別するために新しく share2というディレクトリを作ります(さっきのを流用しても大丈夫です)。

この share2の「所有者」と「所有グループ」を先ほど設定したユーザーとグループに変更します。次のコードを実行してください。

sudo chown -hR [ユーザー名]:[グループ名] /home/ubuntu/share2

さらに次のコードも実行します。

sudo chmod 770 /home/ubuntu/share2

このあたりのコマンドはディレクトリの「アクセス権限」に関わる処理をしています。詳しく解説はしませんが、Linuxを使う上でとても重要な処理ですので機会があれば調べてみると良いと思います!

〇 smb.confの修正

「sambaの設定」でやった smb.confの編集のうち、最後にやった共有ディレクトリの設定を少し修正します。

[share2]
  path = /home/ubuntu/share2
  writeable = yes
  create mode = 0770
  directory mode = 0770
  guest ok = no
  valid users = @[グループ名]

ちょっとだけ変わっていますが、重要なのは最後の行。この設定によって、「アクセスできるのは[グループ名]に所属しているユーザーのみ」という制限をかけることができます!

ここから先はパスワードなしの時と同じでOKなので省略します。

Windowsから開こうとしたときに「ユーザー名」と「パスワード」を求められたら成功!

「sambaのインストール」でpdbeditコマンドを使った時に決めたユーザー名とパスワードで入ることができます(グループへの追加を忘れるなど、どこか手順を間違えるとここで弾かれます)。

今回の例のshareshare2を両方作って共存させることもできます!smb.confの編集で両方の設定を書いてください。

※ここで注意

shareshare2のような「みんなに公開」と「パスワード付き」は共存させることができますが、「別のパスワードを持った複数のディレクトリ」は共存させることができません!(正確には、作れますがWindowsからアクセスできません。)

例えば、

・「security1」というグループに所属しているユーザーのみアクセスを許可するshare1という共有ディレクトリ

・「security2」というグループに所属しているユーザーのみアクセスを許可するshare2という共有ディレクトリ

の2つの共有ディレクトリを作ったとします。これらへWindowsからアクセスする場合、share1にアクセスする場合は「security1」に所属しているユーザーのパスワードで、share2にアクセスする場合は「security2」に所属しているユーザーのパスワードでアクセスすることになりますが、Windows上では(同一IPアドレスに対して)同時に別ユーザーアクセスすることができません。

つまり、share1にアクセスするために「security1」に所属しているユーザーのパスワードでアクセスしたら、(アクセスを切らない限り)share2にアクセスすることはできなくなります。

share2も「security1」に所属しているユーザーを許可する設定にして同じユーザーでアクセスすれば、share1にアクセスした後でも大丈夫ですが、セキュリティ的にはあまり意味がないですよね…)

最後に

以上で、Ubuntuでファイルサーバーを作る方法の説明は終わりです。

Linuxは覚えるといろいろ遊べて楽しいのでぜひいじってみてください!

コメント

  1. Wow, thank you for sharing this detailed guide on setting up a file server on Ubuntu 20.04. I was struggling to find a reliable guide that covers all the necessary steps, but your blog post has been incredibly helpful. I’m excited to implement these steps and enjoy having a centralized file storage solution for my home network.

タイトルとURLをコピーしました