2017年5月22日月曜日

CentOS7(Raspberry Pi 3)でNASサーバを構築する

Raspberry Pi 3にUSBメモリをマウントしたので、
今度はNAS化して他のPCからアクセスできるようにしたい。


■本日の目標

 Raspberry Pi 3に差したUSBメモリをNAS化する。


■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.3.1611 (Core)
・USBメモリ:64GB
・主にアクセスするPC(OS):Windows10 Pro 64bit


■今回のNAS構築要件

1.NASアクセス用ユーザを用意(ユーザ名:rpi-nas)
2.ローカルネットワーク内からのみアクセス
3.アクセス元端末はWindowsとAndroid
4.NASで公開するディレクトリは先日マウントしたUSBメモリ
5.プリンター共有は無し

 ちなみにNASに使うのはこちら。
$ df -hT | grep usb
/dev/sda1                ext4        58G   53M   55G    1% /mnt/usb-m1


■Sambaをインストール

・まずはSambaをインストールする。
$ yum info samba
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
利用可能なパッケージ
名前                : samba
アーキテクチャー    : armv7hl
バージョン          : 4.4.4
リリース            : 12.el7
容量                : 583 k
リポジトリー        : updates/7/armhfp
要約                : Server and Client software to interoperate with Windows machines
URL                 : http://www.samba.org/
ライセンス          : GPLv3+ and LGPLv3+
説明                : Samba is the standard Windows interoperability suite of programs for Linux and
                    : Unix.
$ yum install samba
・・・(中略)・・・
完了しました!

・インストール後のサービス状態を確認する。
[root@WSTD-RPI3 /]# systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
   Active: inactive (dead)


■ユーザを追加

・Linuxアカウントの追加
 グループの作成
$ groupadd -g 500 nas-user

 ユーザアカウントの作成
$ useradd -g 500 rpi-nas

 パスワード設定
$ passwd rpi-nas

 ユーザとグループの紐付け
$ gpasswd -a rpi-nas nas-user
ユーザ rpi-nas をグループ nas-user に追加

・Sambaアカウントの追加
 ユーザアカウントの作成
$ pdbedit -a rpi-nas
new password:
retype new password:

 作成したユーザの確認
 (ユーザリスト)
$ pdbedit -L
 (個別ユーザの詳細)
$ pdbedit -v rpi-nas


■Sambaの設定

・Sambaの設定ファイルを書き換える。
 【変更前(初期状態)】
$ cat /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[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 = root
        create mask = 0664
        directory mask = 0775

 【編集】
$ cp -p /etc/samba/smb.conf /etc/samba/smb.conf.`date "+%Y%m%d"`
$ vi /etc/samba/smb.conf

 【変更後】
$ cat /etc/samba/smb.conf
### Sambaの基本設定 ###
[global]
  ## ユーザアクセス管理
  # ユーザ認証方式
  security = user
  # アクセスOKネットワーク
  hosts allow = 192.168. 127.
  # アクセスNGネットワーク
  hosts deny = ALL

  ## サーバ情報
  # ワークグループ
  workgroup = WORKGROUP
  # NetBIOS名
  netbios name = RSPI-NAS
  # Windows側の文字コード
  dos charset = CP932
  # Linux側の文字コード
  unix charset = UTF-8
  # 以下、Windows側のファイル設定
  dos filemode = Yes
  dos filetimes = Yes
  dos filetime resolution = Yes
  # LinuxとSambaのパスワードを同期(次も同じ)
  unix password sync = Yes
  pam password change = Yes

  ## ログ設定
  log file = /var/log/samba/%m.log
  max log size = 50

### 共有ディレクトリ:USBメモリ ###
[usb-m1]
  comment = USB Memory Directory
  # 公開パス
  path = /mnt/usb-m1
  # ゲスト不可
  guest ok = No
  # 共有表示
  browseable = Yes
  # 読み取り専用
  read only = no

 設定ファイルの内容に誤りが無いかチェックする。
$ testparm /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[usb-m1]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        dos charset = CP932
        netbios name = RSPI-NAS
        log file = /var/log/samba/%m.log
        max log size = 50
        pam password change = Yes
        security = USER
        unix password sync = Yes
        idmap config * : backend = tdb
        dos filemode = Yes
        dos filetime resolution = Yes
        hosts allow = 192.168. 127.
        hosts deny = ALL


[usb-m1]
        comment = USB Memory Directory
        path = /mnt/usb-m1
        read only = No


■NAS公開ディレクトリの所有権を変更

・USBメモリをマウントしたディレクトリはrootで作っていたので、所有権を変えておく。
 【変更前】
$ ll /mnt/
合計 4
drwxrwxrwx. 12 root root    0  5月  9 22:31 nas
drwxr-xr-x.  3 root root 4096  5月  7 19:50 usb-m1

 【変更】
$ chown -R rpi-nas:nas-user /mnt/usb-m1/

 【変更後】
$ ll /mnt/
合計 4
drwxrwxrwx. 12 root    root        0  5月  9 22:31 nas
drwxr-xr-x.  3 rpi-nas nas-user 4096  5月  7 19:50 usb-m1


■ファイアウォール(firewalld)の設定 ※一時設定

・次はファイアウォールでSambaを許可する。
 【設定前】
$ firewall-cmd --list-services
dhcpv6-client ssh

 【設定】
$ firewall-cmd --add-service samba
success

 【設定後】
$ firewall-cmd --list-services
dhcpv6-client samba ssh


■Sambaの起動

・Sambaを起動する。
$ systemctl start smb
$ systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
   Active: active (running) since 土 2017-05-13 13:17:37 JST; 6min ago
 Main PID: 3505 (smbd)
   Status: "smbd: ready to serve connections..."
   CGroup: /system.slice/smb.service
           tq3505 /usr/sbin/smbd
           tq3506 /usr/sbin/smbd
           tq3507 /usr/sbin/smbd
           tq3508 /usr/sbin/smbd
           mq3525 /usr/sbin/smbd

 5月 13 13:17:35 WSTD-RPI3 systemd[1]: Starting Samba SMB Daemon...
 5月 13 13:17:36 WSTD-RPI3 systemd[1]: smb.service: Supervising process 3505 which is not our child. We'll most likely not notice when it exits.
 5月 13 13:17:37 WSTD-RPI3 smbd[3505]: [2017/05/13 13:17:37.973496,  0] ../lib/util/become_daemon.c:124(daemon_ready)
 5月 13 13:17:37 WSTD-RPI3 smbd[3505]:   STATUS=daemon 'smbd' finished starting up and ready to serve connections
 5月 13 13:17:37 WSTD-RPI3 systemd[1]: Started Samba SMB Daemon.

・有効化して、自動起動にする。
$ systemctl enable smb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.


■NASアクセス確認(Windows)

・Windows(エクスプローラ)から確認してみる。
 IP指定で・・・

 資格情報が出てきたので、疎通は問題なし。
 それでは、NAS用のユーザとパスワードを入力する。

 NASディレクトリとして指定した「usb-m1」だけ出てきた。

 アクセスも問題なし。

・次はNAS専用ユーザのアクセスや読み書き確認のため、コマンドプロンプトから確認する。
 rootでアクセスできないことを確認する。
C:\>net use Y: \\192.168.1.100\usb-m1 XXXX /USER:root
システム エラー 1326 が発生しました。

ユーザー名またはパスワードが正しくありません。

 もちろんrpi-nasではアクセスできることを確認する。
C:\>net use Y: \\192.168.1.100\usb-m1 YYYY /USER:rpi-nas
コマンドは正常に終了しました。

 一応セッションも確認しておく。
C:\>net use
新しい接続は記憶されます。

ステータス  ローカル名 リモート名                ネットワーク名
-------------------------------------------------------------------------------
OK           Y:        \\192.168.1.100\usb-m1    Microsoft Windows Network
コマンドは正常に終了しました。

 ドライブを移動する。
C:\>y:
Y:\>

 ファイルを書き込む。
Y:\>echo NASアクセステスト > Nasアクセスの確認.txt
Y:\>dir
 ドライブ Y のボリューム ラベルは usb-m1 です
 ボリューム シリアル番号は E3F2-4B80 です

 Y:\ のディレクトリ

2017/05/13  14:27              .
2017/05/07  19:39              ..
2017/05/13  14:27                22 Nasアクセスの確認.txt
2017/05/07  19:44              lost+found
               1 個のファイル                  22 バイト
               3 個のディレクトリ  58,826,170,368 バイトの空き領域

 ファイル内容を読み込む。
Y:\>type Nasアクセスの確認.txt
NASアクセステスト

 ファイルを削除する。
Y:\>del Nasアクセスの確認.txt
Y:\>d

 一通りの操作は確認できた。


■NASアクセス確認(Android)

・ネットワーク内をスキャンすると、Raspberry PiのNAS(192.168.1.100)が出てきた。
 ※ESファイルエクスプローラを使用

 ユーザ・パスワードを入力する。

 Androidからも問題なくアクセスできた。


■ファイアウォール(firewalld)の設定 ※永続化

・永続化しておき、再起動してもSambaが許可されるようにする。
$ firewall-cmd --add-service samba --permanent
success


■SELinux(参考)

・SELinuxはファイルアクセスに影響を与えるようだが、
 今回のRaspberry Pi 3に載せたCentOS7からでは、
 特別な設定(SELinuxでSambaを許可したり、そもそもSELinuxを無効化したり)は不要だった。
 参考までに現状を以下の通り。
 【動作状況】
$ getenforce
Permissive

 【設定ファイル(初期状態)】
$ cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted



Previous Post
Next Post

post written by: