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