Samba で作る ホームサーバー NAS
我が家の NASを動かしている CentOS6 のサポートが終了するので CentOS8.2 へバージョンアップしました。プラットフォームが一新されているので現行のシステムパーテイションにクリーンインストールしました。
下の写真が 2015年9月に製作した NAS で、自宅サーバー2号機になります。
CentOS6 のまま使い続けることも考えたのですが、Sambaサーバーの通信プロトコルが SMB2 であるのに対して Ubuntu 20.04LTS と Windows10 では SMB3 がデフォルトであり、これから先のことを考慮してバージョンアップすることにしました。
そういうわけで CentOS8.2の Samba4サーバーを使って Ubuntuと Windowsを共有する単純な閉鎖系ホームサーバーNASを構築しました。Ubuntu から Windowsワークグループ Shareフォルダーにアクセスできるようにもなっています。
このページでは ブロードバンドルーターの設定から OSインストールの手順、サーバー(SSH、FTP、Samba) と クライアント(Ubuntu、Windows)の設定までを掲載しています。(2020年10月)
NAS構築の条件
- WAN側(インターネット空間)から LAN側(自宅サブネット)へのアクセスは ルーターにより全て遮断する。
- クライアント側は Windows10と Ubuntu 20.04 LTS でユーザー認証はしない。パーミッションの制限なし。
- 使用者は NASを構築した本人のみ。
ブロードバンドルーターの設定
市販のルーター機が DHCPサーバー、DNSサーバー、ファイアウォール、デフォルトゲートウェイになります。新品の業務用(YAMAHA, Micro Researchなど)ですと DHCPを除きデフォルトのままでよいと思います。
中古品の場合は工場出荷の状態にし、メーカーから配布されている最新のファームウェアを適用(クリックジャッキング脆弱性対応)した方がよいと思います。
プライベートIPアドレス固定
各ホスト機のプライベートIPアドレスは DHCPで割り当てているので使用状況により変動します。サーバー機の IPアドレスが変動しないように固定する必要があります。
具体的にはサーバー機の NIC(Network Interface Cardまたは Controller)の MACアドレスと割り当てる IPアドレスを紐付けます。
例えば
MACアドレス - IPアドレス
47:6b:39:c3:18:52 192.168.0.10
設定の方法はメーカーの取説を参照してください。
MACアドレスの調べ方
Ubuntu 16.04~20.04 LTSの場合
GNOME Terminal :
$ ifconfig
または
$ ip addr show
Windows10の場合
ファイアウォール設定
下記の項目が設定されていることを確認します。
- IPアドレス スプーフィング(なりすまし)対策
- プライベートIPアドレスによる WAN側 → LAN側、LAN側 → WAN側のアクセスを遮断しているか。
- WAN側からの Microsoft-DS, NetBios 遮断の確認
- 445番ポート、137~139番ポートは閉じているか。
- DNSオープンリゾルバ対策
- WAN側からの DNS要求を遮断しているか。
新品のルーターでですと IPv4に対しては TCP、UDPプロトコル共にデフォルトで設定されているはずです。IPv6 はメーカーや機種によって対応していないこともあるので、その場合ホスト機側で対応する必要があります。
なのでサブネット内の全てのサーバー機とホスト機は IPv6を無効にしています。
CentOS 8.2 Server with GUI のインストール
2台中1台のHDDにインストールします。2台目のHDDは取り外しておきSambaサーバー構築の前に接続します。
パーテイション編集やインストールの方法は Red Hat Customer Portal の 8.14. インストール先 を参考にしました。リンク先は RHEL7 ですが画像付きの解説なので RHEL8 より分かりやすいです。
最小システム要件
- 2GB RAM
- 2GHz またはそれ以上のプロセッサー
- 20GB パーティションサイズ
- 64-bit_x86 アーキテクチャ
インストーラーにはじかれない程度の要件です。重たい GNOMEデスクトップがまともに動作するとは思えませんが...
インストール先
既存のパーティションサイズをそのまま使用しますが ESP(EFI System Partition)、システム、SWAPは再フォーマットしました。理由は もしフォーマットしなかった場合、先述の参考リンク先によれば
“
BIOS システム、および BIOS 互換性モードの UEFI システム
ディスクが既にフォーマットされている場合、パーティションスキームは維持されます。
ディスクがフォーマットされていない場合、もしくはユーザーがディスクからすべてのパーティションを削除した場合は、Anaconda は以下を使用します。
- ディスクに 232 未満のセクターしかない場合、MBR を使用。一般的にディスクセクターは 512 バイトで、これは 2 TiB に当たります。
- ディスクに 232 以上のセクターがある場合、GPT を使用。
注記
デフォルトの動作を無効にしてサイズが 232 セクター未満のディスクで GPT を使用する場合は、inst.gpt オプションを起動コマンドラインに追加します。
232 セクター以上のディスク上で MBR を使用するよう Anaconda を手動で無効にすることはできないことに注意してください。
”
と記載されているためです。今回のHDDは 1TB(0.909TiB)なので念のため inst.gpt オプションで起動しました。DATAパーティションにはデータファイルが入っているのでフォーマットしません。もちろんバックアップ済みです。
下記がインストール前の HDDの状態です。
第1パーテイション ESP (FAT16) | 100 MiB |
---|---|
第2パーテイション システム (ext4) | 30 GiB |
第3パーテイション SWAP (Linux - swap) | 1 GiB |
第4パーテイション DATA (ext4) | 870 GiB |
なお Managing EFI Boot Loaders for Linux によれば ESP(EFI System Partition)が 512MiB未満の場合 FAT32 はバグがあるので推奨されていません。FAT32でフォーマットしても CentOSは FAT16 で上書きします。
Windows で USBインストールメディアの作成
当初 Windows上の Rufus で USBインストールメディアを作成したのですが起動できませんでした。そこで Fedora Media Writer を使ってみたら起動できました。ただしインストールする必要があります。
使い方は USBメモリーを挿し Fedora Media Writer を起動します。メニュー画面の上から3番目の Custum image をクリックするとエクスプローラーウィンドウが開くので ISOイメージファイルを選択します。
すると下の画像のように Write Custom imageダイアログボックスが開くので赤い 書込み ボタンをクリックすれば書込みがスタートします。
留意事項など詳しいことは Red Hat Customer Portal の Windowsでの USBインストールメディアの作成 を参照してください。PDF版は こちら
GUIでのインストール
インストールするベース環境は「サーバー(GUI使用)」です。UPS(無停電電源装置)の設定ユーティリティが GUI環境必須のためです。「サーバー」や「最小インストール」を選択すると後で相当面倒くさいことになり、結局再インストールすることになるでしょう。
インストールするデバイスの選択
下の画像は VirtualBox 上の CentOS8.2 インストーラーをキャプチャーしたものです。
fig1. は 実HDDのパーティションの状態を仮想HDDで疑似的に再現したものです。容量に意味はありません。
fig2. は インストール先ストレージの設定で 「カスタム」 を選択しているところです。手動パーティションの設定に移ります。
fig3. は 手動パーティションの設定 ダイアログボックスです。システムのインストール先を指定します。下記はその手順です。
- パーティション設定スキームで 標準パーティション を選択する
- 不明 をクリックすると fig1.のパーティションが表示されるのでvfat sda1(EFIシステムパーティション) を選択する
- マウントポイント欄に /boot/efi と入力する
- 再フォーマットにチェックを入れるとファイルシステムがアクティブになるので EFI System Partition を選択する
- 設定を更新 ボタンをクリックする
fig4.は ⑤ 設定を更新 ボタンを押した後の状態です。vfat sda1 が「新規でCentOS Linux 8のインストール」セクションに移動し /boot/efi のマウントポイントが決定します。
fig5.は 同じ手順で / のマウントポイントが ext4 sda2 決定したところです。
fig6.は /boot/efi、/、swap のマウントポイントが決定したところです。ext4 sda4 はデータが入っているのでそのままにしておきます。
完了(D) ボタンを押すと上記設定の内容が表示されるので 変更を許可する(A) を選択します。
この設定はインストールを開始した後に実行されるので、この段階でやり直しがききます。
ネットワーク
インストールの途中でネットワークの設定をやってしまいます。次の設定はインストールした後でもできますが、無駄に手間がかかります。
- NAS(サーバー)固有のIPアドレス
- DNSサーバー
- デフォルトゲートウェイ
- ホスト名
- 時刻同期サーバーの指定
- 追加アドオン(アプリケーションパッケージのこと)
- KDUMP(カーネルダンプ)の無効化
- ユーザー名とパスワード
- rootのパスワード
なのでインストールする前に上記の項目を決めておきます。下記はその一例です。
- ルーターで固定した IPアドレス
- 192.168.0.10
- DNSサーバー
- 192.168.0.1(ルーターで名前解決する)
- デフォルトゲートウェイ(ルーター)
- 192.168.0.1
- ホスト名(サーバーの名前)
- net2.localdomain
- 時刻同期するサーバー
- ntp.nict.jp
下の画像は VirtualBox 上の CentOS8.2 インストーラーをキャプチャーしたものです。
- ① IPアドレス、ネットマスク、ゲートウェイ、DNSサーバーを入力
- ② ホスト名 net2.localdomain を入力して 適用 ボタンを押す
- ③システム時刻を同期するNTPサーバー ntp.nict.jp を上段の入力欄に入力して + ボタンで追加したら プール にチェックを入れる。これが Chrony の設定ファイル /etc/chrony.conf に記述される。
その他のソフトウェア
下の画像は、GUIサーバー環境に追加インストールしたその他のソフトウェアのスクリーンショットです
- Windows ファイルサーバー
- ファイルとストレージ サーバー
- FTP サーバー
- ネットワーク ファイルシステム クライアント
- グラフィカル管理ツール
- システムツール
各ソフトウェアの説明文から必要そうなものを選択しました。不要なものもあるかも知れません。
インストールの開始
後は、KDUMPを無効化したらインストールの概要(インストーラーのトップページ)から インストールの開始(B) ボタンを押してください。
以上でインストール手続き完了です。次のパートからはインストール後の設定です。
日本語入力の設定
インストール後のシステム言語は日本語になっていますが日本語入力はできません。ユーザー自身で日本語IMEをインストールし設定します。IMEの選択肢は幾つかあるようですが、当方では Mozc を選びました。
その前に CentOSに必須のリポジトリをインストールします。
# dnf install epel-release # dnf install elrepo-release # dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Mozcパッケージをインストールします。
# dnf install ibus-mozc mozc
ここで一度ログアウトして再ログインします。これで入力ソースに Mozc が追加されます。
以下 6枚の画像は、設定手順のスクリーンショットです。CentOS8 に限らず GNOME デスクトップ環境であれば Ubuntu も同じ手順です。
アクティビティ > 設定 > Region & Language > 入力ソースで 「日本語(Mozc)」を最上段に置きます。
最後に、デスクトップ上部パネルの IME プルダウンメニューの Mozc をクリックすれば日本語 入力できます。
SE Linux と ファイアウォールの停止
ルーターで設定しているので NAS機側では停止します。SE Linuxの無効化は サーバー構築の前に2 を参照してください。以下、CentOS8のファイアウォールを停止する方法です。
PC起動時に自動起動しないようにする
次のコマンドを実行します。
GNOME Terminal :
# systemctl disable firewalld
PC再起動後、firewalldのサービスステータスを確認します。
# firewall-cmd --state または # systemctl status firewalld
下記がコマンドを実行した結果です。
not running
または
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
inactive (dead) が表示されていれば停止しています。
ネットワーク全体の設定
プライベートIPアドレスとホスト名の紐付けと、IPv6プロトコルを使わないように無効化します。
ホスト名の名前解決
インストール時に設定したホスト名を確認します。
GNOME Terminal :
# hostnamectl status
net2.localdomein
hosts ファイルに NASの IPアドレスとホスト名を追記します。
# nano /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
196.168.0.10 net2.localdomein net2
これでサブネット内から IPアドレス または net2 と入力すれば NASにアクセスできます。
名前解決の順序(1)
hosts.conf が次のようになっているのを確認します。
# nano /etc/hosts.conf
#multi on multi off oder hosts, bind
最初に hostsファイルを参照して名前解決する設定です。
名前解決の順序(2)
nsswich.conf が次のようになっているのを確認します。
# nano /etc/nsswich.conf
︙ hosts : files dns ︙
filesは /etc/hostsを指しています。このファイルはアプリケーションが参照します。
IPv6の無効化
我が家のルーター機は IPv6プロトコルのファイアウォールに対応していないのでホスト機(NAS)側で対応する必要があります。しかしホスト機の OSである CentOS 8.2のファイアウォールは既に停止しているので IPv6を無効化します。
NICだけでなく kernelモジュールも読み込まないように設定します。
NICの IPv6無効化
まず NIC情報を確認します。
$ nmcli c show
DEVICE = enp3s0 ・・・デバイス名は環境によって違います
デバイス ステータスを確認します。
$ nmcli device status
DEVICE TYPE STATE CONNECTION enp3s0 ethernet 接続済み enp3s0 virbr0 bridge 接続済み virbr0
virbr0(Virtual Bridge)は KVM環境用のデバイスです。NASは普通のパーティションなので停止します。
# virsh net-list --all ・・・現在動作しているかの確認 # virsh net-autostart default --disable ・・・停止
PCを再起動します。横道にそれました、IPv6を無効化します。
# nmcli mod enp3s0 ipv6.method ignore # nmcli c up enp3s0 ・・・ネットワーク接続再起動
kernelモジュールの読み込み停止
以下の内容は Redhat EL / CentOS8 セットアップ からの引用です。
“
IPv6を無効化する場合はNICの他にkernelモジュールも読み込まないようにする
# nano /etc/sysctl.d/99-sysctl.confnet.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
”
99-sysctl.confファイルに上記の2行を記述して保存後、設定を反映します。
# sysctl -p /etc/sysctl.d/99-sysctl.conf
を実行する、または PC再起動。
Windows側の設定
Windows10では NetBIOSは使用されておらず遠からず廃止されると思うので、SambaのダイレクトホスティングSMBを使用します。また Windows10の通信プロトコルのデフォルトは SMBv3 であり、現在オプション扱いの SMBv1 も遠からず廃止されます。
注.ここから以降 NAS と Windows の共有フォルダーの表記を下記のように区別します。
- NAS・・・共有フォルダー
- Windows ・・・Shareフォルダー
ワークグループもほとんど使っていないので以下の項目をサブネット内全ての Windows10で無効にしました。ただし Shareフォルダーにアクセスはできます。
- Microsoft ネットワーク用クライアント
- TCP/IPv6(インターネット プロトコル バージョン 6)
- NetBIOS TCP/IP
- SMB 1.0/CIFS ファイル共有のサポート
この後構築する Sambaサーバーを 「ローカル マスター ブラウザー」 に設定します。
Microsoft ネットワーク用クライアント と TCP/IPv6 を無効化
コントロールパネル > ネットワークと共有センター > イーサネット > プロパティ でネットワーク ダイアログボックスが開くのでチェックボックスのチェックを外し OK をクリックする。
NetBIOS TCP/IPを無効化
上記と同じくネットワーク ダイアログボックスを開き、インターネット プロトコル バージョン 4(TCP/IPv4)をクリック。プロパティ > 詳細設定 > WINS タブを開いて「NetBIOS TCP/IPを無効にする」にチェックして OK をクリックする。
無効になったことを管理者コマンドプロンプトで確認します。
C:¥Windows¥system32> ipconfig /all ︙ NetBIOS over TCP/IP ...... :無効
無効 になっていればOKです。
SMB 1.0/CIFS を無効化
コントロールパネル > プログラムと機能 > Windowsの機能の有効化または無効化 >「SMB1.0/CIFS ファイル共有のサポート」のチェックボックスのチェックを外し、PC再起動する。
これで SMB1.0プロトコルの古い NASにはアクセスできなくなります。
Shareフォルダーにアクセスできないようにするには
イーサネットのプロパティで「Microsoft ネットワーク用ファイルとプリンター共有」のチェックを外します。
SSHサーバーの設定
サブネット内のホスト機からリモートで NASを管理するために使用します。アプリケーションパッケージはデフォルトでインストールされており、サービスも有効になっています。
設定ファイルは /etc /ssh /sshd /sshd_conf で、これを編集します。
GNOME Terminal :
# cp /etc/ssh/sshd/sshd_conf/etc/ssh/sshd/sshd_conf.org(バックアップ)
# nano /etc/ssh/sshd/sshd_conf
nano Editor :
Port 65432 リスニング ポート(ウェルノウン22以外)
Protocol 2 リスニング プロトコル
Ignore Rhosts yes rhosts認証の無効化
UseDNS no 接続元の逆引き無効化
AddressFamily inet リスニング アドレスの明記(IPv4のみ利用)
PermitRootLogin no rootログインの拒否
AllowUsers ユーザー名 SSH利用ユーザーの制限
その他は、デフォルト
保存して再読み込み。
# systemctl reload sshd
これは今回設定したものだけを抜粋したものです。デフォルトで設定されているものも含んでいます。
クライアント(Windows)側の設定
Windows側でやることは ターミナルエミュレータ Tera Term をインストールするだけです。SSHを利用して接続するのでセキュアな通信になります。
FTPサーバー(vsFTPd)の設定
サブネット内のホスト機からリモートで NASのホームディレクトリや上位のディレクトリにアクセスし、ファイルのアップロードとダウンロードするために使用します。アプリケーションパッケージはデフォルトでインストールされていますがサービスは無効になっています。
FTPクライアントは Windows10 WinSCP を使います。
設定ファイルは /etc /vsftpd /vsftpd.conf で、これを編集します。
GNOME Terminal :
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org(バックアップ)
# nano /etc/vsftpd/vsftpd.conf
基本設定
nano Editor :
anonymous_enable=NO 匿名FTPを許可しない
ascii_upload_enable=YES アスキー形式のアップロード有効
ascii_download_enable=YES アスキー形式のダウンロード有効
listen=YES vsFTPdをIPv4スタンドアロンモードで動作
use_localtime=YES ローカル時刻で表示する
ローカルユーザー接続の設定
local_enable=YES ローカルユーザーの接続を有効 userlist_enable=YES アクセス拒否ユーザーリストを有効 userlist_deny=NO 上記の拒否リストを許可リストに変える ・・・① pam_service_name=vsftpd PAM認証サービス名の指定(/etc/vsftpd/ftpusersの有効化) ・・・②
①, ②により、外部からのFTP接続要求に対して
- /etc /vsftpd /ftpusers に記述されているアカウントが拒否される
- /etc /vsftpd /user_list に記述されているアカウントが許可される
のようになります。この2つのファイルで次のようはアカウント管理ができます。
- 新しく追加されたアカウント(ユーザー)にFTP接続が許可されない
- FTP接続を許可するには /etc /vsftpd /user_list にアカウント名を追記する
- デフォルトでFTP接続を認めないアカウントでも /etc /vsftpd /ftpusers 中のアカウントをコメントアウトすれば、一時的に許可することができる。
接続を許可するユーザー名を記述します。
# nano /etc/vsftpd/user_list
# vsftpd user list
# If usrlist_deny=NO, only allow users in this file
︙
# for users that are denid.
root
bin
daemon
︙
ユーザー名
この /etc/vsftpd/user_list に載っているユーザーだけがアクセスできます。
上位ディレクトリの参照許可の設定
# nano /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES ユーザーリストを使用する chroot_list_file=/etc/vsftpd/chroot_list ユーザー拒否リストの指定 ・・・③ chroot_local_user=YES 上記の拒否リストを許可リストに変える・・・④
③, ④により、上位ディレクトリの参照要求に対して
- 新しく追加されたアカウント(ユーザー)は最初から拒否される
- それぞれのホームディレクトリがそのユーザの最上位のディレクトリになる
ということになります。chroot_listファイルは存在しないので作成します。
# echo > /etc/vsftpd/chroot_list
パーミッションを 600 に変更し、root と ユーザー名を記述します。
# chmod 600 /etc/vsftpd/chroot_list # nano /etc/vsftpd/chroot_list
root
ユーザー名
この /etc/vsftpd/chroot_list に載っているユーザーのみ FTPクライアント(WinSCP)で「 / ディレクトリ」まで参照できます。
vsftpdサービスを有効にする
サービスを有効にしてステータスを確認します。
# systemctl enable vsfpd # systemctl status vsfpd
●vsfpd.service - Vsfpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsfpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2020-09-07 13:09:57 JST; 6 days ago
Main PID: 780 (vsfpd)
︙
active (running) が表示されていれば動作しています。
所感
これらは複数のユーザーを管理するためのものですが後学のため設定してみました。
参考|http://ftp.lumica.co.jp/_ftpserver/vsftpdconf501.html vsFTPdの基本設定(CentOS5)お便利サーバー.com
クライアント(Windows)側の設定
Windows側でやることは FTPクライアントの WinSCP をインストールするだけです。SSHを利用して接続するのでセキュアな通信になります。
Sambaサーバーの設定
CentOS 8.2 の Sambaバージョンは 4.11.2 です。デフォルトでは SMB2.0 から SMB3.1.1のプロトコルに対応しています。smb.confの設定により Windows10の SMB1.0 TCP/CIFS でアクセスすることはできますが非推奨です。
また Microsoft 非推奨の WINS(Windows Intenet Name Service)の設定はサブネット内全ての Windows10 で NetBIOS over TCP/IP を無効にしているので不要です。
HDD(共有ディレクトリ)のマウント
2台の HDDにそれぞれ共有ディレクトリを作成し、システムに自動マウントしています。その方法は下記のリンク先を参照ください。
NAS|自作機 « システムセットアップ »|HDDのマウント このリンク先では次の内容を掲載しています。
- 共有ディレクトリの作成とパーミッション
- 共有ディレクトリの自動マウント(fstabの記述)
- Windows側で lost+found を非表示にする
smb.conf の設定
以下 smb.conf の設定内容です。ホームディレクトリと共有プリンターは使用しません。NASへのアクセスにユーザー認証を掛けません。匿名ゲストでログインし、読み書き自由な設定です。
個別の設定項目(パラメーター)の説明については 日本Sambaユーザ会 を参照ください。
http://www.samba.gr.jp/project/translation/current/htmldocs/manpages/smb.conf.5.html smb.confマニュアル|日本Sambaユーザ会
長文が苦手な方は下記のサイトはいかがでしょう。
http://riisaconsulting.co.jp/?s=samba+%E5%82%99%E5%BF%98%E9%8C%B2 samba 備忘録
smb.conf ファイルを編集します。
# nano /etc/samba/smb.conf
グローバル セクション
[global] dos charset = CP932 workgroup = WORKGROUP security = user ・・・① map to guest = Bad User ・・・② domain master = no ・・・③ local master = Yes ・・・④ preferred master = Yes ・・・⑤ os level = 65 ・・・⑥ load printers = no ・・・⑦ log file = /var/log/samba/%m.log log level = 1
①、②はゲストユーザーが認証なしでアクセスできる設定です。
③~⑥は Windowsワークグループ ブラウジング、つまり Windows機上の Shareフォルダーをエクスプローラーウィンドウのネットワークグループに表示するための設定です
④は NAS機が Windowsワークグループの「ローカル マスターブラウザー」に参加するための設定です。なので必ず選ばれるとは限りません。
⑤は smb.confマニュアルによると「domain master = Yes との連携が推奨」とあるので効果がないかもしれません。
⑥は Windowsより上の値です。Windows NT4.0 までは分かったのですが Windows10(NT10.0)の値は分からなかったので 日本Sambaユーザー会 の値にしました。最大値は 255 で、これを超えると 0 になります。
http://www.samba.gr.jp/doc/browsing/browsing02.html Windowsネットワークのブラウジング問題の解明|日本Sambaユーザー会
⑦は プリンターを共有しない設定です。サブネット内にプリンターはないので。
次のコマンドを実行して ローカル マスターブラウザーになっているか確認します。
# nmblookup -S WORKGROUP
TeraTerm : Looking up status of 192.168.0.10 NET2 <00> - B <ACTIVE> NET2 <03> - B <ACTIVE> NET2 <20> - B <ACTIVE> ..__MSBROWSE__. <01> - <GROUP> B <ACTIVE> WORKGROUP <00> - <GROUP> B <ACTIVE> WORKGROUP <1d> - B <ACTIVE> WORKGROUP <1e> - <GROUP> B <ACTIVE> MAC Address = 00-00-00-00-00-00
NASのIPアドレス(192.168.0.10)で ..__MSBROWSE__.<01> とあるのでマスターブラウザーになっています。
http://www.samba.gr.jp/doc/browsing/browsing01.html 1.5 マスター・ブラウザ選定の順序と確認|日本Sambaユーザ会
なお、Windows側で確認するコマンド 「nbtstat -a WORKGROUP」 は NetBIOSを無効にしているので実行してもエラーになります。
共有 セクション(1)
[data1] comment = free_area path = /media/DATA/data1 create mask = 0777 パーミッションを継承する directory mask = 0777 パーミッションを継承する read only = No guest ok = Yes hide files = /lost+found/ 所有者:root,パーミッション:755
共有 セクション(2)
[data2] comment = free_area path = /media/DATA/data2 create mask = 0777 パーミッションを継承する directory mask = 0777 パーミッションを継承する read only = No guest ok = Yes hide files = /lost+found/ 所有者:root,パーミッション:755
「パーミッションを継承する」の部分は、これを設定しないとユーザーが最上位の共有ディレクトリに作成したフォルダー内が読み取り専用になってしまうので新しいファイルの作成やコピーができなくなります。
「hide files = /lost+found/」は Windows 10 上で lost+foundフォルダーを隠しファイルにする(半透明で表示する)設定です。
ホーム セクションとプリンター セクションはデフォルトのままです。
構文チェック
最後に次のコマンドを実行して構文チェックします。これは書式の誤りをピックアップするだけなので、設定に誤りがあっても書式が合っていればエラーは出ません。スペルチェックのようなものです。
# testparm
smb.confで設定した内容と違う結果が表示されますが、デフォルトのパラメーターは省略されるためです。例えば local master = yes は表示されません。
smbサービスを有効にする
smb.conf の構文チェック後、エラーがなければ smbサービスを有効にしてステータスを確認します。
# systemclt enable smb nmb # systemclt status smb
●smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2020-09-07 13:10:06 JST; 6 days ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 1012 (smbd)
︙
active (running) が表示されていれば動作しています。
SMB プロトコルの確認
サブネット内のホスト機(Windows10 と Ubuntu 20.04 LTS、Windows7)から NASにアクセスしてSMBプロトコルを確認します。下の画像は smbstatusコマンドを実行した結果のスクリーンショットです。
Windows10 TeraTerm から次のコマンドを実行します。
TeraTerm :
# smbstatus
ご覧のように Windows10 と Ubuntu 20.04 LTS は SMB3.11、Windows7 は SMB2.10 で通信しています。ちなみに Windows7は「Microsoft ネットワーク用クライアント」が必須です。
Windows 10 PowerShell では次のコマンドで確認できます。先に NASにアクセスしておきます。
PowerShell :
PS C:\Windows\system32> Get-SmbConnection
ServerName ShareName UserName Credential Dialect NumOpens ---------- --------- -------- ---------- ------- -------- net2 data1 DESKTOP-T… MicrosoftAccount\… 3.1.1 3 net2 IPC$ DESKTOP-T… MicrosoftAccount\… 3.1.1 0
Dialect(ダイアレクト)が 3.1.1 となっているので SMB3.11 で通信しています。
ダイレクト ホスティング SMB の確認
sambaサーバーの ダイレクト ホスティング SMB が動作しているかどうかは、ホスト機の NetBIOS が無効の状態で NAS機にアクセスできれば動作しています。
Windows10側からは 445番ポートでリスン(待ち受け)、エスタブリッシュ(確立)しているかを見ることで確認できます。下の画像は、管理者コマンドプロンプトのスクリーンショットです。
cmd :admin auth
C:\Windows\system32>netstat -a -n | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 192.168.0.3:50616 192.168.0.10:445 ESTABLISHED TCP 192.168.0.3:51364 192.168.0.20:445 ESTABLISHED TCP [::]:445 [::]:0 LISTENING
これで Windows10(SMB3)からユーザー認証なしでアクセスできるようになりました。
補足|ワークグループ メンバーの表示について
NASをローカル マスターブラウザー設定した結果を先に言いますと上手くいきませんでした。サブネット内のメンバーは Windows10 Home、Pro、Windows7 Pro で次のような挙動になりました。
- 複数の Windows10 Home だけ起動の時、表示されたりされなかったりで 30分程放置しても同じ
- 上記の状態で NAS機にアクセスしても表示されない
- 同じサブネット内の Windows7 Pro または 10 Pro のホスト機を起動すると必ず数秒後に表示される
- 表示されると言っても起動している全てのホスト機が表示されるわけではない
- Windows Pro機起動中 NAS機はアクセスした時だけエクスプローラーウィンドウ 左ペインのネットワークにのみ表示される
- Windows Pro機をシャットダウンすると全ての表示はすぐに消える
- Windows Pro機が中途半端なローカルマスターブラウザーになっているように見える
- smb.confを「os level = 200」にしても状況は変わらない
- smb.confを「local master = no」にしても状況は変わらない
- ホスト機の 共有の詳細設定 > ゲストまたはパブリック > ネットワーク探索 を有効にしてもしなくても状況は変わらない
どうやら NAS(Samba4 SMB3)の ローカル マスターブラウザーは機能していない模様。当方の環境だけなのか、Windowsの仕様なのか、NetBIOS TCP/IP、SMB1 が有効でないと表示されないのか原因が分かりません。
と書いた10日後、その答えが ここ にありました。下記はその抜粋です。
“
Computer Browser サービスは SMBv1 に依存しているため、SMBv1 クライアントまたはサーバーがアンインストールされると、サービスはアンインストールされます。 これは、従来の NetBIOS データグラムブラウズ方法を使用して、エクスプローラーネットワークが Windows コンピューターを表示できなくなることを意味します。
”
そういう訳でドメイングループを構成すれば上手くいくかもしれませんが Widows10 Home があるのでそれはできません。ローカルネットワークの構築は Windows Pro エディション が必須のようです。
Sambaは Windowsの後追いが宿命なので可能性は低いと思いますが、いずれ機能するかもしれませんね。
サーバー(NAS)の管理
サーバーの管理といえば、これまではサブネット内のホスト機から SSHでリモート接続していました。CentOS8にはホスト機のウェブブラウザで接続し管理できる Webコンソール(cockpitパッケージ)が実装されています。
ベース環境に サーバー(GUI使用)を選択しているので cockpitパッケージは既にインストールされていますが、有効になっていません。
Webコンソール(cockpit.socket)にログイン
次のコマンドで cockpit.socket サービスを有効にします。
# systemctl enable --now cockpit.socket
対象となるウェブブラウザは、Firefox, Chrome, Edge です。リモートからログインするにはブラウザのアドレスバーに
https://プライベートIPアドレス:9090 または https://ホスト名:9090
を入力するとログインページが開くので CentOS8 のユーザー名とパスワードでログインできます。下の画像は ローカルの Windows10 Firefox からログインした際のスクリーンショットです。
Firefox の警告メッセージが出ているのは サーバーに SSL/TLS を設定していない、すなわちサーバー証明書がないからなので 詳細情報 → 危険を承知で続行 をクリックすればログインページが表示されます。
コンソールのヘルスに「サービスは失敗しました」のアラートが出ているのは KDUMP を無効にしているためです。
ランレベルの変更。CUI でログイン
NAS機のシステム セットアップと SSH、FTPサーバーを構築の後サブネット内のホスト機からリモート接続できるようになったら CentOS のデスクトップを表示する必要はないので CUI(Character User Interface)ログインのランレベルに変更します。
所謂、テキストモードにしておくわけですがそこからコマンドラインで日本語のデスクトップも起動できるようにしておきます。
ランレベルの変更
ランレベルの定義が CentOS6 のときは 0~6までの数字でしたが CentOS7 から異なっています。SysV init から Systemdターゲット に変更されています。SysVも使えるようですが非推奨です。
上記のリンク先によれば SysVランレベル 2、3、4 が Systemdターゲットでは ターゲットユニットの multi-user.target に相当します。
ランレベル | ターゲットユニット |
---|---|
2、3、4 | multi-user.target 非グラフィカルなマルチユーザーシステムを設定します |
5 | graphical.target グラフィカルなマルチユーザーシステムを設定します |
次のコマンドを実行します。
# systemctl set-default multi-user.target
PC再起動するとブートプロセスの間にスプラッシュ画像が表示されますが、しばらくすると黒い画面のログインプロンプトが表示された状態が保持されます。NASの稼働時は常にこの状態になります。
デスクトップ(GUI)を起動する
ログインプロンプトにユーザー名とパスワードを入力してログインします。ユーザー権限で次のコマンドを実行します。
$ startx
デスクトップは表示されますが、システム言語は英語になります。つまりファイラーや端末、Firefoxなどのアプリのメニューが英語表記になるわけです。デスクトップ環境時に日本語入力の設定をしておけば日本語の入力はできます。
システムを日本語化するには /usr /bin /startx ファイルに以下を追記します。
# nano /usr/bin/startx
#!/bin/sh
︙
# Site administeators are STRONGY urger to write nicer versions.
LANG=ja_JP.UTF-8
︙
保存して PC再起動します。
NAS と Windowsワークグループにアクセスする方法
Windows10 にせよ Ubuntuにせよ、もはやエクスプローラーやファイラーに Windows ネットワークは表示されるがその中にSMB共有フォルダーは表示されません。
表示するには次のようにサーバーの IPアドレスかホスト名でアクセスするしかありません。
¥¥192.168.0.10 または ¥¥net2 ・・・Windows smb://192.168.0.10/data1 または smb://net2/data1 ・・・Ubuntu
毎回これでアクセスするのは現実的ではないので、それぞれのOS上で使いやすい共有フォルダーのショートカットを作りました。
Windows10 の場合
ネットワーク全体の設定 セクションでも書きましたがもう一度、
- エクスプローラーウインドウのネットワークに NASの共有フォルダーは表示されない
そこで使いやすいようにタスクバーにランチャー(クイックランチャーではない)を設定しました。
NASのランチャー作成
- ショートカットを置く、PC > ドキュメント > File server フォルダーをつくる
- デスクトップに共有フォルダーのショートカットを作る
- タスクバー上にマウスカーソルを置き右クリックする
- コンテキストメニューの ツールバー > 新規ツールバー をクリックする
- エクスプローラーウィンドウが開くので File_server フォルダーを開く
- そこにショートカットを移動し、リネームする
ワークグループ Shareフォルダーのランチャー作成
- アクセスされる側のホスト機でエクスプローラーウィンドウの左ペイン PC を右クリックし、プロパティを開く
- 左側の システム詳細設定 をクリックし、コンピューター名 タブを開く
- フル コンピューター名 DESKTOP-T273CV4 をメモする
- アクセスする側のホスト機でエクスプローラーウィンドウ左ペインのネットワークを開く
- アドレスバーに次のようにフル コンピューター名とShareフォルダー名を入力する
¥¥DESKTOP-T273CV4¥share-name
- 後は NASの場合と同じ
Windowsでネットワーク情報を見る
その他のネットワーク情報は、タスクバー検索窓に cmd を入力しコマンドプロンプトを管理者権限で開き、 ipconfig /all コマンドを実行すると見れます。
cmd.exe :Command Prompt
C:\Windows\system32>ipconfig /all
Windows IP 構成 ホスト名 :DESKTOP-T273CV4 プライマリ DNS サフィックス: ノード タイプ : ハイブリッド IP ルーティング有効 : いいえ WINS プロキシ有効 : いいえ イーサネット アダプター イーサネット: 接続固有の DNS サフィックス: 説明 : Intel(R) 82566DM-2 Gigabit Network Connection 物理アドレス : 00-3E-4A-65-2F-5E DHCP 有効 : はい 自動構成有効 : はい IPv4 アドレス : 192.168.0.3(優先) サブネット マスク : 255.255.255.0 リース取得 : 2020年10月2日 20:52:53 リースの有効期限 : 2020年10月4日 21:03:17 デフォルト ゲートウェイ : 192.168.0.1 DHCP サーバー : 192.168.0.1 DNS サーバー : 192.168.0.1 NetBIOS over TCP/IP : 無効
上記 「リースの有効期限」はルーターの DHCPサーバーから付与されている IPアドレスの期限です。期限が切れると変わります。
Ubuntu 20.04 LTS の場合
2020年10月現在の バージョン は、
- Ubuntu 20.04.1 LTS (Focal Fossa) GNOME 3.36
- kernel 5.4.0.48 generic
- Samba 4.11|SMB1 disabled by default
です。下の画像は、デスクトップのスクリーンショットです。
クライアント側の smb.confも SMBプロトコルの設定が必要なので smbclientパッケージをインストールし、グローバル セクションに SMB3 を記述します。
$ sudo apt install smbclient $ sudo nano /etc/samba/smb.conf
[global] client max protocol = SMB3
保存後、ログアウトして再ログインすると設定が有効になります。下の画像は Files (旧Nautilus)で「+その他の場所」を開いた時のスクリーンショットです。
その他の場所を開くと自動的に サーバー(NAS)のアイコンとホスト名が表示され、クリックすると共有フォルダーが表示されます。共有フォルダーを開こうとすると認証ダイアログボックスが表示されます。
接続する をクリックするとパスワードなしのゲスト(匿名)ユーザーでフォルダーやファイルが自由に読み書きできます。認証ダイアログボックスが出ないようにするには Sambaサーバーにユーザー登録とパスワード設定が必要です。
Filesの左ペインに共有フォルダーのブックマークを設定しておくとよいと思います。
サーバー接続 のアドレスバーからアクセスしたいときは
smb://192.168.0.10/data1 または smb://net2/data1
と、共有フォルダーまでのパスを入力します。
Windowsネットワークにアクセスする
Windows ワークグループ shareフォルダーへのアクセスは次のように接続先ホスト機の IPアドレスを
smb://192.168.0.3/
と入力するとユーザー認証ダイアログボックスが開くのでパスワードの欄に適当な数字(1)やアルファベット(A)などを入力すればホスト機がマウントされ shareフォルダーが表示されます。
ただし空欄のままでは接続されません。
ユーザー認証ダイアログボックスにドメイン名の入力欄がありますが、ここにはワークグループ名がユーザー名と共に自動的に表示されます。
ワークグループ Shareフォルダーの設定条件
前パートの方法でアクセスするには Windows10 側で以下の設定が必要です。既に Shareフォルダーは作成済みとします。
- パスワード保護共有を無効にする
- 共有する相手に Everyone を追加し、アクセス許可のレベルを 読み取り/書込み にする
- セキュリティ タブの Everyone にフル コントロールのアクセスの許可を与える
- Shareフォルダーの「読み取り専用」属性のチェックを外す
これで Ubuntu上から読み書きできるようになります。
雑感
SMB1プロトコルを完全に排除した SMB3.11サブネット環境で NASを使ってみての感想は、レスポンスが以前より明らかに良くなりました。ローカルのフォルダーやファイルを開くのと変わりませんね。
実は今回最も時間が掛かったのが Windowsワークブループの Shareフォルダーが正しく表示されない原因究明の作業でした。色々検証しているうちに、おそらく近い将来ワークブループは廃止されるのだろうと感じました。
実際、なくても困らないし当方でも使っていませんしね。
どうしてもワークグループ使いたい諸賢は Windows10 Pro しかないでしょうが、だったら Active Directory 使えるしでやっぱりワークブループも NetBIOS、SMB1と同様廃止の方向(個人の見解)なのかなと思います。
以下に当方の環境でサーバー側(Samba4)とクライアント側(Windows、Ubuntu)で分かったことを挙げてみました。
Samba4 で分かったこと
- Windows の OS Level の資料が古く Windows10(NT10.0)の値がいくら調べても分からない
- もはや OS Level という概念自体が別の何かに置き換わっていいるのかもしれない
Windows 10 で分かったこと
- Windows 10 Home は ドメイン マスターブラウザー にならない
- Windows 10 Home は Active Directoryを サポートしていない
- NetBIOS TCP/IP、Microsoftネットワーク用クライアント、IPv6プロトコルは使われていない
- NASの共有フォルダーは NASにアクセスしないと Windows10 のネットワークグループに表示されない
- ワークグループ Shareフォルダーの表示は SMB1を排除した SMB3環境下で完璧な表示は望めないので諦める
Ubuntu 20.04 LTS で分かったこと
- クライアント側も smb.conf で SMB3プロトコルを指定しないと NASの共有フォルダーに何も表示されない
- Windows ネットワーク を開いても「フォルダーが空です」になる
- Windows ワークグループ Shareフォルダーには IPアドレスでアクセスできる
- Windows ワークグループ Shareフォルダーのパーミッション設定が必要
参考ページの探し方
今回の件では Red Hat Enterprise Linux のポータルサイトが役に立ちました。「CentOS8」で検索しても欲しい情報はあまり出てきませんでした。
設定の方法や分からない用語を検索する際、例えば Sambaのことを調べたいとき Google検索窓に redhat8 samba と入れると検索結果のトップに Red Hat Coustomer Potalサイト の Samba設定マニュアル 日本語ページが出てきます。
Rocky Linux™ へ マイグレーション(移行)
CentOS 8.4 を Rocky Linux 8.4 へ|2021年9月 追記
当サーバーの OSである CentOS 8 のサポート期間短縮(2021年12月31日終了)の発表から、約9か月が経ったところで Rocky Linux へマイグレーションしました。
その方法は、Rocky Linux Documentation で配布されている変換スクリプト migrate2rocky を使用しました。
スクリプトファイルは GitHub へ行き、README.md の下の方にある Lastest Version のリンク先でダウンロードできます。後は zip解凍し CentOS上でスクリプトファイルに実行権を与え、端末から root権限でスクリプトを実行するだけです。
GNOME Terminal :
$ cd /home/ユーザー/ダウンロード/rocky-tools-main/migrate2rocky
$ chmod +x migrate2rocky.sh
# ./migrate2rocky.sh -r
当方の環境 (自宅サーバー 2号機) で行ったマイグレーションは、2,850余りのパッケージの再インストールとクリーンアップ、ベリファイなど、全て完了するのに 60分くらいかかりました。
ちなみに 自宅サーバー 3号機 では およそ 20分でした。
マイグレーションの結果
システム設定ファイル、追加したリポジトリ、ユーザーファイルなどは何も手を加える必要はなく、変換スクリプトを実行するだけでしたが、ただ一つだけ システムの言語が英語になってしまいました。
しかし日本語入力は出来ますし、端末内の日本語表示もされているのですがデスクトップのトップパネルやファイラー、端末などのダイアログボックス メニューが英語です。
システム言語を ja_JP.UTF-8 に設定してもユーザーログインした場合に反映されないのでユーザーディレクトリの .bash_profileの最終行に下記を追加して対処しました。
ja_JP.UTF-8 export LANG
CentOS 8.4 の .bash_profile にこのコード入っていません。まぁ メニューだけが英語でも特に困ることもないのですけどね。
なお migrate2rocky.sh はリポジトリなどのバグがあるようなので特殊な設定をしている場合は マイグレーションする前に Rocky Linux Documentation の内容を確認したほうがよいと思います。
補足
自宅サーバー 3号機でも同様にマイグレーションを行いました。
先述の結果に加え cronジョブによる ダイナミックDNS への グローバルIPアドレス通知と、systemd /Timers による Let's Encrypt サーバー証明書の certbot 自動更新に影響ありませんでした。
Rocky Linux 8 のサポート期間は「2029年5月まで」と Rocky コミュニティ で「What is EOL of RL8」の問にプロジェクトマネージャーが答えています。