Raspberry pi[Ubuntu]でファイル鯖[Samba]を構築
目次
- はじめに
 1.1. 対象者
 1.2. 目標
 1.3. Sambaとは
- 構築環境
 2.1. ハードウェア
 2.2. ソフトウェア
- 構築手順
 3.1. パッケージのインストール
 3.2. zlib のインストール
 3.3. Samba のインストール
 3.4. 設定ファイルの配置
 3.5. ユーザ作成
 3.6. グループ作成
 3.7. グループにユーザ追加・削除
 3.8. Samba用ユーザ追加
 3.9. 共有用のフォルダ作成
 3.10. 設定ファイルの編集
 3.11. Samba の起動
 3.12. ポート開放
- ファイル鯖に接続(Mac & Windows10)
- 参考資料
1. はじめに
今回は、ディストリビューションの固定されているパッケージから構築するのではなく、公式より公開されているソースファイルから構築していきます。ディストリビューションからでは、簡単で早く構築できますが、バージョンが古く、セキュリティ面での不安要素があります。対して、ソースファイルからでは少し複雑で時間がかかりますが、最新のバージョンで構築でき、バグの存在が確認された場合はパッチの公開もされます。長期運用や本番環境を検討する場合は、迷うことなく後者を選択するべきです。
1.1. 対象者
今回は以下の項目に心当たりがある方を対象にしています。
また、CUIの操作、vim等のテキストエディタの操作に慣れていることも含みます。テキストエディタについてはvim以外でも構いません。
- Raspberry pi を使って何かしてみたい
- 初めてファイル鯖を構築する
- 自宅でファイル鯖の運用をしてみたい
- ソースファイルからの構築をしてみたい
1.2. 目標
少人数でファイル共有するための環境を構築すること
1.3. Sambaとは
本当に簡単に言うとNASのようなものと認識しても問題ないです。WindowsやMac、Linuxとのファイル共有ができます。今回は記載していませんが、Active Directory と連携し、アクセス管理することもできます。
2. 構築環境
事前に Raspberry pi のセットアップが終了していることが前提です。
2.1. ハードウェア
| 項目 | 詳細 | 
|---|---|
| Raspberry pi | 3 Model b+ | 
| micro SD | 32GB | 
2.2. ソフトウェア
| 項目 | バージョン | 
|---|---|
| Ubuntu | 20.04 | 
| Samba | 4.13.4 | 
3. 構築手順
3.1. パッケージのインストール
動作要件に必須であるパッケージのインストールをしていきます。
> apt install -y gcc make acl python3 libpython3-dev pkg-config libgnutls28-dev libjansson-dev libarchive-dev libacl1-dev \
libldap2-dev libldap2-dev libpam0g-dev libgpgme-dev libparse-yapp-perl libdbus-1-dev
3.2. zlib のインストール
Zip や gzip に使われている圧縮アルゴリズムをライブラリ化された zlib のインストールをしていきます。これも動作要件に必須です。
> cd /home/ubuntu
> wget http://zlib.net/zlib-1.2.11.tar.gz
> tar -zxf zlib-1.2.11.tar.gz -C /usr/local/src
> cd /usr/local/src/zlib-1.2.11
> ./configure
> make && make install
3.3. Samba のインストール
> cd /home/ubuntu
> wget https://download.samba.org/pub/samba/stable/samba-4.13.4.tar.gz
> tar -zxf samba-4.13.4.tar.gz
> cd samba-4.13.4
> ./configure --without-ad-dc
'configure' finished successfully (5m32.860s)
> make && make install
Waf: Leaving directory `/home/ubuntu/samba-4.13.4/bin/default'
Build commands will be stored in bin/default/compile_commands.json
'install' finished successfully (25m53.303s)
> /usr/local/samba/sbin/smbd -V
Version 4.13.4
3.4. 設定ファイルの配置
デフォルト設定ファイルを特定のディレクトリに配置する。この設定ファイルを配置しないと起動に失敗します。
> cd /home/ubuntu/samba-4.13.4
> cp examples/smb.conf.default /usr/local/samba/etc/smb.conf
3.5. ユーザ作成
ファイル鯖にアクセスするためのユーザを作成するためには、Linuxユーザの作成が必要です。今回は3ユーザ作成します。
ユーザの作成には、パスワード、名前などの入力項目がありますが、下記の操作例ではすべての項目に情報を入力していますが、必要なのはパスワードと名前だけです。残りの項目は未入力のままでも問題ありません。
> adduser user01
Adding user `user01' ...
Adding new group `user01' (1001) ...
Adding new user `user01' (1001) with group `user01' ...
Creating home directory `/home/user01' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for user01
Enter the new value, or press ENTER for the default
  Full Name []: hoge
  Room Number []: 001
  Work Phone []: 00012345678
  Home Phone []: 01012345678
  Other []: none
Is the information correct? [Y/n] Y
> cat /etc/passwd | grep user01
user01:x:1001:1002:hoge,001,00012345678,01012345678,none:/home/user01:/bin/bash
### 上記と同手順でユーザ"user02"、"user03"を追加
3.6. グループ作成
ファイル鯖へのアクセス権限をグループ単位で管理するためにグループを作成します。
> groupadd group-A
> cat /etc/group | grep group-A
group-A:x:1004:
3.7. グループにユーザ追加・削除
グループ単位で管理するために、アクセスを許可するユーザをグループに追加していきます。
> gpasswd -a user01 group-A
Adding user user01 to group group-A
> gpasswd -a user02 group-A
Adding user user02 to group group-A
> gpasswd -a user03 group-A
Adding user user03 to group group-A
> getent group group-A
group-A:x:1004:user01,user02,user03
グループ単位でのアクセス制御をしているため、アクセス制限をかける場合はグループからユーザを削除します。
> gpasswd -d user02 group-A
Removing user user02 from group group-A
3.8. Samba用ユーザ追加
Smaba用のユーザを追加します。入力項目はパスワードのみです。パスワードは必ずしもLinuxユーザを作成した時のパスワードと同じである必要はありません。
> /usr/local/samba/bin/smbpasswd -a user01
New SMB password:  ←任意のパスワード入力
Retype new SMB password:  ←もう一度パスワード入力
Added user user01.
### 上記と同手順でSambaユーザ"user02"、"user03"を追加
3.9. 共有用のフォルダ作成
フォルダを複数作成し、各フォルダにアクセス権限を付与することも可能ですが、今回は「share01」フォルダでファイルの共有をします。
mkdirコマンドでフォルダを作成後、chmodコマンドでフォルダのアクセス権を変更します。
> mkdir /home/share01
> chmod 770 /home/share01
> chgrp group-A /home/share01
3.10. 設定ファイルの編集
Sambaへのアクセス制限や編集&読み込み権限付与などの設定をしていきます。
不要な設定は削除してもいいですが、今回はコメントアウトしていきます。
記事の冒頭でも書きましたが、ファイルの編集にはvim以外でも構いません。
> vim /usr/local/samba/etc/smb.conf
#======================= Global Settings ======================= 
[global] 
## Browsing/Identification ### 
# Change this to the workgroup/NT-domain name your Samba server will part of
#   workgroup = MYGROUP  ###コメントアウトする
   workgroup = WORKGROUP  ###追記 
   dos charset = CP932  ###追記
   unix charset = UTF-8  ###追記
#======================= Share Definitions ======================= 
# Un-comment the following (and tweak the other settings below to suit) 
# to enable the default home directory shares. This will share each 
# user's home directory as \\server\username
####### コメントアウト #######
#[homes]
#   comment = Home Directories
#   browseable = no
#   writable = yes
###########################
########### 追記 ###########
[share01] 
    Comment = share folder
    path = /home/share01
    writable = yes
    guest ok = no
    valid users = @group-A
###########################
####### コメントアウト #######
#[printers] 
#   comment = All Printers 
#   path = /usr/spool/samba 
#   browseable = no 
## Set public = yes to allow user 'guest account' to print 
#   guest ok = no 
#   writable = no 
#   printable = yes
###########################
設定ファイルに入力ミスや書き方が正しいかの確認をします。「Press enter to see a dump of your service definitions」と表示されれば問題ありません。そして、Enterキーを押すと、設定ファイルに記載されている内容が表示されます。
> /usr/local/samba/bin/testparm /usr/local/samba/etc/smb.conf
Press enter to see a dump of your service definitions
3.11. Samba 起動
設定が完了したところで、Sambaを起動していきます。
起動後は実際にプロセスが動いているか、psコマンドで確認していきます。以下のように「smbd」のプロセスが表示されることを確認します。
> /usr/local/samba/sbin/smbd -D
> ps -e | grep smbd
77178 ?        00:00:00 smbd
smb.conf の内容を変更した際は以下のコマンドを実行し、設定ファイルを再読み込みします。
> /usr/local/samba/bin/smbcontrol smbd reload-config
Sambaを停止するには以下のコマンドを実行します。
> /usr/local/samba/bin/smbcontrol smbd shutdown
3.12. ポート開放
ファイル鯖に接続するために特定のポート開放をします。
すでにSSH接続するためのTCPの22番ポートの開放をしている場合は「ufw allow proto tcp to 0.0.0.0/0 port 22」の実行は必要ありません。TCPの445番ポートを開放後に、「ufw reload」を実行し、ufwを再読み込みしてください。
> ufw allow proto tcp to 0.0.0.0/0 port 22
Rule added
> ufw allow proto tcp to 0.0.0.0/0 port 445
Rule added
> ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y  <-- Enter"y"
Firewall is active and enabled on system startup
> ufw status
Status: active 
To                         Action      From 
--                         ------      ---- 
22/tcp                     ALLOW       Anywhere
445/tcp                    ALLOW       Anywhere                  
4. ファイル鯖に接続(Mac & Windows10)
- Mac の場合
- Finderを開く
- ⌘+K を押下
- 接続先を「smb://ファイル鯖のIPアドレス/share01」を入力し、「接続」をクリック
- 以下の項目を入力し、「接続」をクリック
- ユーザの種類:登録ユーザ
- 名前:「user01」or「user02」or「user03」
- パスワード:各Samba用ユーザを追加した際に登録したパスワード
 
- ネットワークドライブに接続できることを確認
 
- Windows10 の場合
- 左のサイドメニューから「PC」をクリック
- 上部のメニューから「コンピュータ」をクリック
- 「ネットワークドライブの割り当て」をクリック
- ドライブは未割当のドライブを選択、フォルダ名には「\\ipアドレス\share01」を入力し、完了をクリック
- ネットワークドライブに接続できることを確認
 
 
ディスカッション
コメント一覧
まだ、コメントがありません