CentOS 8のSamba 4でライセンス不要のファイルサーバーを構築

今回の記事では、以前のCentOS 8に関する2つの記事で構築したCentOS 8のサーバーに、オープンソースのファイル共有用ソフトウェアである「Samba」をインストールしてWindows向けのファイルサーバーとして設定してみます。

CentOS 7のSambaパッケージは4.8系ですが、CentOS 8のSambaパッケージは4.9系に変更されています。

高機能なサーバー性能が必要になる「Windows Server」系のOSとは違い、LinuxでSambaを動作させるには、それほど性能が高くないPCやサーバーで問題ありません。
老朽化やリプレースで利用しなくなったPCやサーバーなどがあれば、その利用先として「Samba」を使ったWindows向けファイルサーバーを作ってみては如何でしょうか。

参考 CentOS 8のインストールと基本的な設定を紹介した記事

CentOS
centos-linux8-install-top
サーバー構築の基本 CentOS Linux 8をインストールしてベース環境を構築する

こんにちは、ITインフラエンジニアのKomura(@system_kom)です。 Linuxのインストールはサーバー構築の基本です。インフラエンジニアを目指している場合やLinux初心者にはOSのインストールから始めることをオススメします。 ...

CentOS
centos8-first-settings-top
サーバー構築の基本 CentOS Linux 8のインストール後に設定する12の項目

こんにちは、ITインフラエンジニアのKomura(@system_kom)です。 前回の記事でCentOS Linux 8をインストールする手順を紹介しました。うまくインストールできましたでしょうか。インストールはサーバー構築の基本ですが、 ...

Sambaを利用したファイルサーバーを構築することでLinuxだけでなく、Windowsのファイル共有についても挙動や仕組みの勉強になります。Windows Serverでは必要なクライアントアクセスライセンスも不要で、安価に運用できるメリットがあります。

ユーザー数の多い環境でも、バックアップを行うことで業務向けとして利用することもできます。また逆に既存サーバーのバックアップ用としてSambaのファイルサーバーを利用することも良いと思います。

注意

CentOSのベースレポジトリにあるSamba4のパッケージはドメインコントローラーになることができないなど、一部の機能が制限されています。

Windowsドメイン環境を利用したい場合は、Sambaをソースコードからインストールする、若しくはCentOSではないディストリビューション(例えばUbuntu Server)を利用することをお勧めします。通常のファイル共有を利用する、ファイルサーバーやWindowsドメインのメンバーになるメンバーサーバー機能はCentOSでも利用に制限はありません。

1. 全体の構成図とホスト名の設定

本記事の構成図は以下のような形を想定しています。

centos-8-samba-network
CentOS 8 Samba環境の想定構成図

この構成図を元に作業手順を進めていきます。

本記事では一般ユーザーでの実行が可能なコマンドについてはプロンプトとして"$"、rootユーザーでの実行が必要なコマンドについては"#"を記載しています。

まずはシステム(OS)に対して、任意のホスト名を設定します。ここで設定するホスト名はファイルサーバー名になりますので、運用を考えたホスト名を設定することをお勧めします。ホスト名の設定には nmcliコマンドを以下のように実行します。ここではホスト名としてfsを設定します。(実際には、環境に合わせたホスト名を指定してください。)

 command
# nmcli general hostname fs

エラーが出力されなければ、コマンドは正常に完了しています。設定パラメータの確認はhostnameコマンドを利用します。オプション無しで、コマンドを実行すると、設定値が表示されます。

 command
$ hostname
fs

設定値として"nmcli"コマンドで設定したホスト名が表示されれば、設定の確認は完了です。

2. sambaパッケージの確認

ファイルサーバーを構築するのに利用するアプリケーションは「samba」というパッケージ名になります。sambaパッケージをインストールする前にパッケージの詳細を確認します。

2-1. samba関連パッケージリストの確認

先ずはCentOSに含まれる「samba」と名前の付くパッケージのリストを確認します。パッケージリストの確認は"dnf search"コマンドを実行します。

 command
$ dnf search samba
====================== 名前 完全一致: samba =================================
samba.i686 : Server and Client software to interoperate with Windows machines
samba.x86_64 : Server and Client software to interoperate with Windows machines
====================== 概要 & 名前 一致: samba ==============================
samba-libs.i686 : Samba libraries
samba-libs.x86_64 : Samba libraries
samba-winbind.i686 : Samba winbind
samba-winbind.x86_64 : Samba winbind
samba-client.i686 : Samba client programs
samba-client.x86_64 : Samba client programs
python3-samba.i686 : Samba Python3 libraries
python3-samba.x86_64 : Samba Python3 libraries
samba-client-libs.x86_64 : Samba client libraries
samba-client-libs.i686 : Samba client libraries
samba-client-libs.x86_64 : Samba client libraries
python3-samba-test.x86_64 : Samba Python libraries
samba-winbind-clients.x86_64 : Samba winbind clients
samba-winbind-modules.i686 : Samba winbind modules
samba-winbind-modules.x86_64 : Samba winbind modules
samba-dc-libs.x86_64 : Samba AD Domain Controller Libraries
samba-winbind-krb5-locator.x86_64 : Samba winbind krb5 locator
samba-common-tools.i686 : Tools for Samba servers and clients
samba-common-tools.x86_64 : Tools for Samba servers and clients
samba-test.x86_64 : Testing tools for Samba servers and clients
samba-common.noarch : Files used by both Samba servers and clients
samba-common.noarch : Files used by both Samba servers and clients
pcp-pmda-samba.x86_64 : Performance Co-Pilot (PCP) metrics for Samba
samba-krb5-printing.x86_64 : Samba CUPS backend for printing with Kerberos
samba-common-libs.x86_64 : Libraries used by both Samba servers and clients
samba-common-libs.i686 : Libraries used by both Samba servers and clients
samba-common-libs.x86_64 : Libraries used by both Samba servers and clients
samba-test-libs.i686 : Libraries need by the testing tools for Samba servers and clients
samba-test-libs.x86_64 : Libraries need by the testing tools for Samba servers and clients
===================================== 名前 一致: samba =====================================
samba-pidl.noarch : Perl IDL compiler
===================================== 概要 一致: samba =====================================
ctdb.i686 : A Clustered Database based on Samba's Trivial Database (TDB)
ctdb.x86_64 : A Clustered Database based on Samba's Trivial Database (TDB)

上記の出力結果からわかるように「samba」と名前の付くパッケージは複数あります。この中でファイルサーバー構築にインストールが必要になるパッケージは以下の2つになります。

ファイルサーバーに必要なパッケージ

  • samba.x86_64 : Server and Client software to interoperate with Windows machines
  • samba-common.noarch : Files used by both Samba servers and clients

この2つのパッケージについて詳細を確認します。

2-2. sambaパッケージの詳細を確認

インストール前にパッケージの内容に間違いないか、念のために"dnf info"コマンドでsambaのパッケージ詳細を確認します。

 command
$ dnf info samba samba-common
インストール済みパッケージ
名前 : samba-common
バージョン : 4.9.1
リリース : 8.el8
アーキテクチ : noarch
サイズ : 128 k
ソース : samba-4.9.1-8.el8.src.rpm
Repo : @System
repo から : anaconda
概要 : Files used by both Samba servers and clients
URL : http://www.samba.org/
ライセンス : GPLv3+ and LGPLv3+
説明 : samba-common provides files necessary for both the server and client
: packages of Samba.
利用可能なパッケージ
名前 : samba
バージョン : 4.9.1
リリース : 8.el8
アーキテクチ : i686
サイズ : 738 k
ソース : samba-4.9.1-8.el8.src.rpm
Repo : BaseOS
概要 : 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.
名前 : samba
バージョン : 4.9.1
リリース : 8.el8
アーキテクチ : x86_64
サイズ : 708 k
ソース : samba-4.9.1-8.el8.src.rpm
Repo : BaseOS
概要 : 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.

表示された説明からこの2パッケージがsambaでのファイルサーバー構築に必要であることが確認できました。

3. sambaパッケージのインストール

本章では項目2. で確認したSambaに関するパッケージを"dnf"コマンドでインストールする手順を記載していきます。

3-1. dnf installコマンドによるsambaのインストール

sambaパッケージは"dnf install"コマンドでインストールすることができます。項目2-1. で必要な2つのパッケージが確認できましたので、以下のようにコマンドを実行してパッケージをインストールします。

 command
# dnf -y install samba

上記ではdnfコマンドに"-y"オプションを付けることでインストール時の確認応答を省いています。パッケージを複数インストールする場合はスペースを入れてパッケージ名を列記します。コマンドを実行すると、以下のようにインストールが開始されます。

 log
メタデータの期限切れの最終確認: 0:09:56 時間前の 2019年10月12日 12時40分10秒 に実施しました 。
依存関係が解決しました。
===============================================================================
パッケージ アーキテクチャー バージョン リポジトリ サイズ
===============================================================================
Installing:
samba x86_64 4.9.1-8.el8 BaseOS 708 k
依存関係をインストール中:
samba-common-tools x86_64 4.9.1-8.el8 BaseOS 461 k
samba-libs x86_64 4.9.1-8.el8 BaseOS 177 k
トランザクションの概要
===============================================================================
インストール 3 パッケージ
ダウンロードサイズの合計: 1.3 M
インストール済みのサイズ: 3.5 M
パッケージのダウンロード中です:
(1/3): samba-common-tools-4.9.1-8.el8.x86_64.rpm 418 kB/s | 461 kB 00:01
(2/3): samba-libs-4.9.1-8.el8.x86_64.rpm 160 kB/s | 177 kB 00:01
(3/3): samba-4.9.1-8.el8.x86_64.rpm 494 kB/s | 708 kB 00:01
---------------------------------------------------------------------------------
合計 512 kB/s | 1.3 MB 00:02
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
Installing : samba-libs-4.9.1-8.el8.x86_64 1/3
scriptletの実行中: samba-libs-4.9.1-8.el8.x86_64 1/3
Installing : samba-common-tools-4.9.1-8.el8.x86_64 2/3
Installing : samba-4.9.1-8.el8.x86_64 3/3
scriptletの実行中: samba-4.9.1-8.el8.x86_64 3/3
検証 : samba-4.9.1-8.el8.x86_64 1/3
検証 : samba-common-tools-4.9.1-8.el8.x86_64 2/3
検証 : samba-libs-4.9.1-8.el8.x86_64 3/3
インストール済み:
samba-4.9.1-8.el8.x86_64 samba-common-tools-4.9.1-8.el8.x86_64
samba-libs-4.9.1-8.el8.x86_64
完了しました!

エラーの出力がなく「完了しました!」と表示されればSambaは正常にインストールされています。

3-2. インストール後の確認

Sambaがインストールされたことを確認します。インストールされているパッケージは"dnf list"コマンドで確認できます。以下のように実行することで、sambaパッケージがインストールされていることを確認します。

 command
$ dnf list installed samba*
インストール済みパッケージ
samba.x86_64 4.9.1-8.el8 @BaseOS
samba-client-libs.x86_64 4.9.1-8.el8 @anaconda
samba-common.noarch 4.9.1-8.el8 @anaconda
samba-common-libs.x86_64 4.9.1-8.el8 @anaconda
samba-common-tools.x86_64 4.9.1-8.el8 @BaseOS
samba-libs.x86_64 4.9.1-8.el8 @BaseOS

続いてSambaがインストールされた場所を確認します。インストールされた場所(パス)を確認するためには"which"コマンドを利用します。
Sambaのプログラム本体は「smbd」「nmbd」という2つから構成されています。以下のように実行することでインストールパスを確認できます。

 command
$ which smbd nmbd
/usr/sbin/smbd
/usr/sbin/nmbd

この結果から「smbd」と「nmbd」が「/usr/sbin」以下にインストールされたことが確認できます。これでSambaのインストールと確認が終了しました。

3-3. Samba起動の確認

ここまででSambaのインストールと確認が完了しましたので、続いてインストールしたSambaが起動することを確認します。CentOSでは7系からsystemctlコマンドでサービスの起動・停止を行います。Sambaは以下のように実行することで起動できます。

 command
# systemctl start smb nmb

エラーが出力されなければ、smbdとnmbdは起動しています。
続いてサービスの状態を確認します。"systemctl status"コマンドを実行することで、起動したサービスの状態について、詳細な情報を取得することができます。
以下が実行例です。

 command
$ systemctl status smb nmb
smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2019-10-12 12:58:55 JST; 26s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 3016 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 4 (limit: 11374)
Memory: 26.2M
CGroup: /system.slice/smb.service
tq3016 /usr/sbin/smbd --foreground --no-process-group
tq3019 /usr/sbin/smbd --foreground --no-process-group
tq3020 /usr/sbin/smbd --foreground --no-process-group
mq3021 /usr/sbin/smbd --foreground --no-process-group
 nmb.service - Samba NMB Daemon
Loaded: loaded (/usr/lib/systemd/system/nmb.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2019-10-12 12:58:55 JST; 26s ago
Docs: man:nmbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 3017 (nmbd)
Status: "nmbd: ready to serve connections..."
Tasks: 1 (limit: 11374)
Memory: 7.6M
CGroup: /system.slice/nmb.service
mq3017 /usr/sbin/nmbd --foreground --no-process-group

上記では分かり難いかもしれませんが、丸()の部分が正常な起動状態の場合には緑色で表示されます。またsmbdとnmbd共に「Active」項目に「running」と表示されていますので、起動されていることが確認できます。
システムで稼働しているプロセスを表示する"ps"コマンドでもsmbdとnmbdが起動していることを確認できます。以下のように実行します。
smbdプロセス

 command
$ ps -aux | grep smbd
root 3016 0.0 1.1 188992 21964 ? Ss 12:58 0:00 /usr/sbin/smbd --foreground --no-process-group
root 3019 0.0 0.2 160468 5276 ? S 12:58 0:00 /usr/sbin/smbd --foreground --no-process-group
root 3020 0.0 0.2 160460 4408 ? S 12:58 0:00 /usr/sbin/smbd --foreground --no-process-group
root 3021 0.0 0.3 188992 5952 ? S 12:58 0:00 /usr/sbin/smbd --foreground --no-process-group

nmbdプロセス

 command
$ ps -aux | grep nmbd
root 3017 0.0 0.6 127168 12908 ? Ss 12:58 0:00 /usr/sbin/nmbd --foreground --no-process-group

以上の結果からSambaが正常に起動することが確認できました。

3-4. Samba自動起動の設定

サーバーの再起動や停止の復旧時にSambaが自動的に起動するように設定します。サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動には"systemctl enable"コマンドを実行します。

 command
# systemctl enable smb nmb
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/nmb.service → /usr/lib/systemd/system/nmb.service.

エラーが出力されなければ、自動起動は設定が完了しています。
続いて自動起動が設定されたことを確認します。こちらもsystemctlコマンドから確認できます。以下のように実行します。

 command
$ systemctl is-enabled smb nmb
enabled
enabled

「enabled」と表示されれば自動起動の設定は完了です。

4. firewallの許可設定

本記事はSambaの導入環境として以下の記事、項目6.で記載したファイアウォール設定(firewalldを利用した場合)を行っていることを前提としています。

CentOS
centos8-first-settings-top
サーバー構築の基本 CentOS Linux 8のインストール後に設定する12の項目

こんにちは、ITインフラエンジニアのKomura(@system_kom)です。 前回の記事でCentOS Linux 8をインストールする手順を紹介しました。うまくインストールできましたでしょうか。インストールはサーバー構築の基本ですが、 ...

このファイアウォール設定の場合、Sambaサービスへの接続許可がされていないため、WindowsPCでアクセスができません。その為、"firewall-cmd"コマンドを利用してのSambaサービスへの接続許可を追加します。

4-1. 現状のファイアウォール設定を確認

先ず、現状の設定(デフォルト)を確認していきます。Samba接続は、全てのユーザーに開放するため、インターフェイスに適用されているゾーン「public」ゾーンの設定を確認します。

 command
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

「services」項目に接続が許可されているサービス名が表示されます。上記のようにsshやcockpitは許可されていますが、Sambaは許可されていません。

4-2. sambaサービスの接続許可を追加

項目4-1. で確認した「public」ゾーンの接続許可サービスにsambaを追加します。追加は以下のように行います。

 command
# firewall-cmd --add-service=samba --permanent
success

「success」と表示されれば許可の追加は完了です。設定を反映するためにファイアウォールの設定を読み込みます。

 command
# firewall-cmd --reload
success

「success」と表示されれば設定の読み込みは完了です。

設定した内容が正常に反映されているかを確認します。確認は以下のように行います。

 command
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: cockpit dhcpv6-client samba ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

「services」の項目に「samba」が追加されていることが確認できれば確認は完了です。
ここまででファイアウォールの接続許可は完了しました。

5. Sambaの基本的な設定

項目4. の手順まででSambaパッケージの導入とfirewallの設定までが完了しました。Samba自体はデフォルト設定のままで、このままだと利用ができません。本記事では運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。

Sambaを設定する前提条件

  • Active Directoryは利用せず、WORKGROUPで動作させる(ワークグループ名:WORKGROUP)
  • 各ユーザー毎の共有[homes]と、全てのユーザーがアクセスできる[share]共有を設定
  • プリンタサーバー機能は利用しない
  • ファイルサーバー名は”fs”
  • パスワード形式はtdbsamとしサーバーに情報を保存
  • Sambaサーバー上に作成したユーザーのみ共有へアクセスできる(ゲスト接続NG)

この条件に合わせて設定を行っていきます。

5-1. smb.confの変更

Sambaの設定は/etc/samba/以下にあるsmb.confで行います。smb.confは設定項目が複数のセクションに分割されています。各セクションの設定内容は以下の通りです。

[global] Sambaの挙動に関する基本的なパラメーター設定
[homes] ユーザ個別のホームディレクトリ共有設定
[printers] Sambaをプリンタサーバーとして利用するための設定
[共有フォルダ名] 共有フォルダ毎の設定

globalセクションに設定した内容はファイル共有を含むSamba全体に適用されます。

smb.conf_global _3
globalセクションの設定 適用範囲

ファイル共有セクションに設定した内容は、設定したファイル共有のみに適用されます。

smb.conf_share _2
ファイル共有セクションの設定 適用範囲

上記セクションについて、設定を行います。
smb.confの設定変更前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

 command
# cd /etc/samba
# ls
lmhosts smb.conf smb.conf.example
# cp -p smb.conf smb.conf.org

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

 command
# vi smb.conf

5-1-1. globalセクションの設定変更

設定ファイルに含まれるglobalセクションを変更します。globalセクションはSambaの挙動に関する基本的なパラメーターを指定するセクションになります。
デフォルトの設定は以下のようになっています。

 code
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw

このセクションを

 code
[global]
workgroup = WORKGROUP
server string = SAMBA SERVER Version %v
netbios name = fs
security = user
passdb backend = tdbsam
dos charset = CP932
wins support = yes
# printing = cups
# printcap name = cups
load printers = no
disable spoolss = yes
# cups options = raw

に変更します。変更したパラメーターは以下のような内容になります。

workgroup = WORKGROUP Windowsで利用するワークグループ名
server string = SAMBA SERVER Version %v ネットワークコンピュータ一に表示される情報
netbios name = fs ファイルサーバー名の設定
dos charset = CP932 WINDOWS側の文字コード設定
wins support = yes WINSサポート用パラメータ、WINS利用時に有効
load printers = no プリンタ共有機能の設定パラメータ、noで無効
disable spoolss = yes プリンタ共有機能の設定パラメータ、yesで無効

ファイルサーバーを運用する環境に合わせて適宜、パラメータを変更してください。

5-1-2. shareセクションの設定変更

続いて、全てのユーザーがアクセスできるデフォルトの設定ファイルに含まれない「share」セクションを追加します。このセクションは共有フォルダの設定になります。「share」共有フォルダ以外にも共有フォルダを作成するときには、このセクションを別名で作成することになります。ここでは「homes」セクションの下に以下の設定を追加します。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no

変更したパラメーターは以下のような内容になります。

comment = Share Folder for All Users 共有フォルダに設定する任意のコメント
path = /home/share/ 共有フォルダとして設定するディレクトリのパス
browsable = yes 共有フォルダを見えるようにする
read only = no 共有フォルダを読み取り専用にしない

運用する環境に合わせて変更してください。

5-1-3. printerセクションの設定変更

プリンタサーバ機能を利用する場合に設定するセクションですが、今回は該当機能を利用しないため、設定をコメントアウトします。以下のように変更しました。

 code
#[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 = @printadmin root
# force group = @printadmin
# create mask = 0664
# directory mask = 0775

これでsmb.confの設定変更は完了です。全てのセクションを変更した後のsmb.confは以下のようになっています。

 code
# 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 = WORKGROUP
server string = SAMBA SERVER Version %v
netbios name = fs
security = user
passdb backend = tdbsam
dos charset = CP932
wins support = yes
# printing = cups
# printcap name = cups
load printers = no
disable spoolss = yes
# cups options = raw
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
[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 = @printadmin root
# force group = @printadmin
# create mask = 0664
# directory mask = 0775

変更したファイルと比較して間違いがなければ、ファイルを保存します。

5-2. 設定ファイルの確認

smb.confに設定できる内容は多岐にわたるため、設定ファイル自体に間違いがないかを確認するコマンド"testparm"が用意されています。変更した設定を反映する前に"testparm"コマンドで設定ファイルをチェックします。

 command
# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Unknown parameter encountered: "disable spooless"
Ignoring unknown parameter "disable spooless"
Processing section "[Share]"
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
disable spoolss = Yes
dos charset = CP932
load printers = No
security = USER
server string = SAMBA SERVER Version %v
wins support = Yes
idmap config * : backend = tdb
[Share]
comment = Share Folder for All Users
path = /home/share/
read only = No
[homes]
browseable = No
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S

エラーが出力されなければ、設定ファイルのテストは完了です。

6. 共有用ディレクトリの作成

共有フォルダを指定したパスに実際のディレクトリがないとアクセスできないため、事前に作成します。ここでは「Share」セクションで指定した「path = /home/share/」に共有用のディレクトリを作成します。以下のように作成しました。

 command
# cd /home/
# mkdir share

「share」ディレクトリの作成後に所有者の変更とパーミッションを設定します。以下のように実行します。

 command
# chmod -R 0777 share
# chown -R nobody:nobody share

設定変更後に、所有者とパーミッションを"ll"コマンドで確認します。

 command
$ ll
drwxrwxrwx 2 nobody nobody 6 10月 12 13:13 share

上記のようにパーミッションが「drwxrwxrwx」とオーナーとグループとして「nobody」が設定されていれば、共有用ディレクトリの作成は完了です。

7. Sambaアクセス用ユーザー追加

今回のファイルサーバーでは「ゲストアカウント」はアクセスできないため、アクセス用にユーザーの作成が必要になります。ユーザーはLinux側で作成した後に、Sambaに用意されている"pdbedit"コマンドでSamba用に設定を行います。ここでは「rem-test01」というユーザーを作成してみます。

7-1. Linux側ユーザーの作成

通常のLinuxユーザー(POSIX)追加と同じく"useradd"コマンドで作成後に、"passwd"コマンドでパスワードを設定します。

 command
# useradd rem-test01
# passwd rem-test01
ユーザー rem-test01 のパスワードを変更。
新しいパスワード: 任意のパスワード
新しいパスワードを再入力してください: 同じパスワードを入力
passwd: すべての認証トークンが正しく更新できました。

7-2. Windows側のユーザー属性追加

項目7-1. で作成したLinuxユーザー「rem-test01」に"pdbedit"コマンドでWindows属性を追加します。pdbeditは以下のように実行します。

 command
# pdbedit -a -u rem-test01 -f "test user01"
new password: passwdコマンドで設定したものと同じパスワードを入力
retype new password: 確認用にパスワードを再入力

pdbeditの"-a"オプションは新規に追加する際に利用します。標準で指定が必要です。"-u"オプションはユーザー名を指定します。"-f"はフルネームを指定します。"-f"は任意のオプションです。
パスワードについてはLinux側ユーザーに設定したものと同じものを指定します。実行すると、以下のようにWindowsへアクセスする際の属性が追加されます。

 log
Unix username: rem-test01
NT username:
Account Flags: [U ]
User SID: S-1-5-21-2091599896-2033097011-3286976557-1000
Primary Group SID: S-1-5-21-2091599896-2033097011-3286976557-513
Full Name: test user01
Home Directory: \\fs\rem-test01
HomeDir Drive:
Logon Script:
Profile Path: \\fs\rem-test01\profile
Domain: FS
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 木, 07 2月 2036 00:06:39 JST
Kickoff time: 木, 07 2月 2036 00:06:39 JST
Password last set: 土, 12 10月 2019 13:19:13 JST
Password can change: 土, 12 10月 2019 13:19:13 JST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

エラーの出力がなければ、ユーザーの作成は完了です。
作成したユーザーはpdbeditコマンドに-Lオプションを付けることで確認できます。以下が実行例です。

 command
# pdbedit -L
rem-test01:1003:test user01

pdbeditコマンドに"-L"オプションと"-v"オプションを付けるとユーザーの詳細な情報が表示されます。

 command
# pdbedit -L -v rem-test01
Unix username: rem-test01
NT username:
Account Flags: [U ]
User SID: S-1-5-21-2091599896-2033097011-3286976557-1000
Primary Group SID: S-1-5-21-2091599896-2033097011-3286976557-513
Full Name: test user01
Home Directory: \\fs\rem-test01
HomeDir Drive:
Logon Script:
Profile Path: \\fs\rem-test01\profile
Domain: FS
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 木, 07 2月 2036 00:06:39 JST
Kickoff time: 木, 07 2月 2036 00:06:39 JST
Password last set: 土, 12 10月 2019 13:19:13 JST
Password can change: 土, 12 10月 2019 13:19:13 JST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

ハッシュされたパスワードとユーザー情報を表示するには、"-L"と"-w"オプションを付けてpdbeditコマンドを実行します。

 command
# pdbedit -L -w
rem-test01:1003:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:699******************5929:[U ]:LCT-5AF26118:

上記のように作成したユーザーの情報が表示されれば、ユーザーの確認は完了です。

8. Sambaの再起動

ここまででSambaの基本的な設定は完了しました。変更した設定を反映するためにsmbdとnmbdを再起動します。"systemctl restart"コマンドを実行します。

 command
# systemctl restart smb nmb

エラーが出力されなければ、smbdとnmbdは正常に再起動しています。
サービスの再起動後にsmbdとnmbdのstatusを確認します。

 command
# systemctl status smb nmb
 smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2019-10-12 13:21:50 JST; 7s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 3506 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 3 (limit: 11374)
Memory: 5.9M
CGroup: /system.slice/smb.service
tq3506 /usr/sbin/smbd --foreground --no-process-group
tq3513 /usr/sbin/smbd --foreground --no-process-group
mq3514 /usr/sbin/smbd --foreground --no-process-group
 nmb.service - Samba NMB Daemon
Loaded: loaded (/usr/lib/systemd/system/nmb.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2019-10-12 13:21:50 JST; 7s ago
Docs: man:nmbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 3508 (nmbd)
Status: "nmbd: ready to serve connections..."
Tasks: 2 (limit: 11374)
Memory: 4.0M
CGroup: /system.slice/nmb.service
tq3508 /usr/sbin/nmbd --foreground --no-process-group
mq3511 /usr/sbin/nmbd --foreground --no-process-group

上記の出力結果から、smbdとnmbdは正常に再起動していることが確認できます。これで設定の反映は完了です。引き続きファイルサーバーとしての動作確認を行います。

9. 接続確認

ここまででSambaの基本的なセットアップが完了しましたので、本章では実際にWindowsのPCから接続テストを行います。テストを実行するWindowsPCのOSバージョンWindows10 Professional(Build 1709)です。

cent-samba-9

9-1. コンピューター名へのpingテスト

コマンドプロンプトからSambaに設定したファイルサーバーのコンピューター名である「fs」に対してpingを実行し、応答があることを確認します。以下が実行例です。

cent-samba-9-1

上記のようにpingの応答があれば確認は完了です。

ポイント

応答が無い場合には、sambaサーバー側のファイアウォール設定やsmbd、nmbdのサービスの起動状況、設定ファイルのサーバー名パラメーターなどを見直して下さい。

9-2. コンピューター名での接続テスト

pingの応答が確認できたら、次にコンピューター名を指定してSambaサーバーへ接続できることを確認します。[Windowsメニュー]を右クリックして、表示されたメニューから「ファイル名を指定して実行」を選択します。
表示されたダイアログの[名前]に「\\fs」と入力して[OK]をクリックします。

cent-samba-9-2

「ネットワーク資格情報の入力」ダイアログが開きます。ダイアログ中の入力項目には以下を入力します。

cent-samba-9-2-2
  • ユーザー名:Sambaサーバー上で作成したユーザー名(rem-test01)
  • パスワード:作成したユーザーのパスワード

を入力して「OK」をクリックします。
入力した情報が正しい場合、エクスプローラーに設定した共有フォルダが表示されます。

cent-samba-9-2-3

Share共有フォルダにテスト用のフォルダを作成しました。正常に作成できます。

cent-samba-9-2-4

ユーザーのホームフォルダ(rem-test01共有)にも同じく書き込みができることを確認します。

cent-samba-9-2-5-2

正常に書き込みができました。
このフォルダはログインしたユーザーのホームディレクトリ名になりますので、例えばrem-test02ユーザーでSambaサーバーへログインした場合は、rem-test02共有フォルダが表示されます。
これで接続テストまで完了しました。

10. まとめ

Sambaサーバーは設定方法を紹介した単純なファイルサーバーとしての設定以外にActive Directory同等の機能をもつ認証機能や、ACLを利用したアクセス制御など高度な機能があります。
そのトレードオフとして、複数に渡る設定があり、しっかり利用することを考えるとWindowsとLinuxにかなり精通している必要があります。まずは本記事で紹介した基本的なファイルサーバーを設定して、もっと踏み込んだ利用をしたいと思ったときに、更に詳細な機能を調べて、少しづつ実装していくことをお勧めします。運用を進めるとファイル共有でアクセス制御を行いたいという要望が出てくるかと思います。
そのような場合にはアクセス制御を設定する手順をまとめた以下の記事をおすすめします。

Open Source
samba-access-setting-01-top
CentOS のSambaでファイル共有にアクセス権を設定する3つの方法

CentOSでWindows向けのファイル共有を実装するためのアプリケーション"Samba"について、以前の記事でインストール方法と基本的な設定を紹介しました。この記事ではSambaのインストールに関する部分を中心に記載しており、Samba ...

またWindowsドメインを運用されている環境があれば、SambaサーバーをActive Directoryに参加させる手順を紹介した記事も併せて参考にしていただければ幸いです。

Open Source
samba410-ad-setup-top
CentOSとSamba4.10系でWindowsと同等のActive Directoryを作成

前回の記事でSamba4.9系でのActive Directory構築手順を紹介しました。そのSambaですが、2019年4月現在、Sambaの最新バージョンが4.9系から4.10系にバージョンアップされています。Samba4.10では以前 ...

弊社では3000アカウントのSambaサーバーを構築した実績もあります。それだけのポテンシャルがSambaというソフトウェアにはあると思います。是非、設定してみて下さい。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-CentOS, Samba