インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

Samba & NFSによるネットワークファイル共有構築【202試験 主題2.11】

公開
,
LinuC Level 2 第14回 主題2.11 ファイル共有サービス



LinuCレベル2(202試験)の主題2.11「ファイル共有サービス」では、異種OS混在環境やUNIX/Linuxサーバー間でファイルシステムをネットワーク越しに共有するための2大プロトコル、Samba(SMB/CIFS)NFS(Network File System) の構築・運用・セキュリティ設定が出題範囲に指定されています。

Windowsクライアントとのシームレスなファイル共有やドメイン統合を実現するSambaと、第16回で扱う高可用性HAクラスタやバックアップ基盤で高速ストレージ共有を実現するNFSは、どちらも共有設定(smb.conf / exports)と第3回で解説したLinux物理ファイルシステムのパーミッション(POSIX/ACL)が二重に連動する複雑なアクセス制御モデルを持ちます。本記事では、AlmaLinux 9.8の実機環境に Samba 4.23 および NFS-utils 2.5 を導入し、プロトコル差異から共有定義、ユーザーマッピング(root_squash)、クライアントマウントまでを実機検証ログとともに体系的に解説します。

実機検証環境
ホストOS
AlmaLinux 9.8 (Kernel 5.14.0-503.40.1.el9_5.x86_64)
ホスト名 / IP
linuc-node01 / 192.168.2.138
Sambaバージョン
Samba 4.23.5 (smbd / nmbd)
NFSバージョン
NFSv4.2 / NFSv3 (nfs-utils 2.5.4)
構文検査コマンド
testparm / exportfs
本記事の学習スコープと位置づけ
公式試験の必須出題範囲 主題2.11.1(Sambaの設定と管理・公式重要度4)、主題2.11.2(NFSサーバーの設定と管理・/etc/exports・root_squash・exportfs)
現場で役立つ実務拡張 POSIXパーミッションと共有ACLの二重チェック評価ロジック、SELinuxブール値によるファイル共有保護
目次
  1. 1. ネットワークファイル共有の2大プロトコル(SMB vs NFS)
    1. 1.1 Samba(SMB/CIFS)とNFSの適用領域比較
    2. 1.2 NFSv3 と NFSv4 の決定的なアーキテクチャ差
  2. 2. Sambaサーバーの構築と共有リソース管理
    1. 2.1 smb.conf のセクション構造とグローバル設定
    2. 2.2 個別共有セクションの主要ディレクティブ
    3. 2.3 testparm コマンドによる設定構文検査実機ログ
    4. 2.4 Sambaユーザー管理(pdbedit と smbpasswd)
  3. 3. NFSサーバーの構築とエクスポート制御
    1. 3.1 /etc/exports の記述書式とアクセス制御
    2. 3.2 ユーザーマッピングオプションの重要ロジック
    3. 3.3 exportfs コマンドによる動的反映実機ログ
  4. 4. クライアント側からの接続とマウント検証
    1. 4.1 smbclient によるSamba共有の参照・対話操作
    2. 4.2 showmount と mount コマンドによるNFSマウント
    3. 4.3 /etc/fstab によるNFSの自動マウントとオプション(_netdev等)
  5. 5. ファイル共有サーバーのセキュリティと権限設計
    1. 5.1 Linuxファイルシステムパーミッションとの二重チェック機構
    2. 5.2 SELinuxブール値によるファイル共有保護
  6. 6. LinuC 202試験(主題2.11)重要ポイント総整理
    1. 6.1 記述式(コマ問)頻出コマンド・設定ファイル一覧
    2. 6.2 NFS root_squash と Samba マスク設定の盲点
  7. 7. まとめと次回予告(第15回:Linuxセキュリティ & VPN)

1. ネットワークファイル共有の2大プロトコル(SMB vs NFS)

ファイル共有サービスを設計する際、クライアント端末のOS種別やネットワークトポロジーに応じて最適なプロトコルを選択する必要があります。

SambaとNFSのアーキテクチャとプロトコル比較

図1: SambaとNFSのアーキテクチャとプロトコル比較

1.1 Samba(SMB/CIFS)とNFSの適用領域比較

SambaとNFSは、通信モデルおよび認証アーキテクチャが根本的に異なります。

比較項目 Samba(SMB / CIFS) NFS(Network File System)
主たる対象クライアント Windows, macOS, Linux(全OS混在環境) Linux, UNIXサーバー間
通信プロトコル・ポート SMB: TCP 445(ダイレクトホスティングSMB)
NetBIOS: TCP 139, UDP 137/138
NFSv4: TCP 2049 単一ポート
NFSv3: TCP/UDP 2049 + RPC動的ポート
ユーザー認証方式 サーバー独自のSambaユーザーDB(passdb backend クライアントのUID/GIDをそのまま照合(LDAP統合推奨)
アクセス制御の仕組み smb.conf の共有権限 + Linuxパーミッション /etc/exports のオプション + Linuxパーミッション

1.2 NFSv3 と NFSv4 の決定的なアーキテクチャ差

LinuC 202試験では、古いNFSv3と現代の標準であるNFSv4の仕様差が出題されます。

  1. ポートマッパー(rpcbind)の依存関係
    NFSv3では、補助デーモン(mountd, statd, lockd)がランダムなRPC高位ポートを動的に使用するため、rpcbind(TCP/UDP 111)によるポート番号通知が必須であり、ファイアウォール通過が極めて困難でした。これに対しNFSv4では、すべてのRPC機能が TCP 2049番ポートに単一統合 され、rpcbindへの依存が撤廃されました。
  2. ステートフルプロトコルへの刷新
    NFSv3はステートレス(サーバーがクライアントの接続状態を保持しない)であったため、ファイルロック管理が脆弱でした。NFSv4は完全なステートフル設計となり、オープン・クローズ・ロックの状態管理がプロトコル本体に組み込まれました。
  3. 疑似ファイルシステム(Pseudo File System)
    NFSv4では単一の仮想ルート(fsid=0 または fsid=root)を頂点とする単一ツリーとして公開領域を集約できるようになりました。

2. Sambaサーバーの構築と共有リソース管理

Sambaは、LinuxをWindows互換のファイル/プリントサーバー、さらにはActive Directoryドメインコントローラーとして機能させるソフトウェア群です。設定ファイルは /etc/samba/smb.conf です。

2.1 smb.conf のセクション構造とグローバル設定

smb.conf は、サーバー全体に適用される [global] セクションと、個別の共有リソースを定義する共有セクション([share名])で構成されます。

[global] パラメータ 機能説明 代表的な設定例
workgroup 所属するWindowsワークグループ名またはNTドメイン名 workgroup = WORKGROUP
server string マイネットワーク等に表示されるサーバーのコメント説明文 server string = Samba File Server
security 認証セキュリティモード(user: ユーザー認証、ads: Active Directory参加) security = user
passdb backend パスワードデータベースの保存形式(tdbsamが標準) passdb backend = tdbsam
hosts allow 接続を許可するクライアントのIPアドレスまたはサブネット hosts allow = 127. 192.168.2.

特殊セクションとして、ユーザー各自のホームディレクトリを個別マウントさせる [homes] や、プリンター共有を行う [printers] が存在します。

2.2 個別共有セクションの主要ディレクティブ

個別ディレクトリを共有公開する場合、セクション名を角括弧で定義します。

個別共有セクションの定義例(/etc/samba/smb.conf)
[project_share]
    comment = Development Project Storage
    path = /srv/samba/project
    browseable = yes
    read only = no
    valid users = @developers, user01
    write list = @developers
    create mask = 0664
    directory mask = 0775
ディレクティブ名 機能説明
path 共有公開する物理ディレクトリの絶対パス(必須)。
read only / writable 書き込みを禁止するか許可するか(read only = nowritable = yes と同義)。
browseable マイネットワークの共有フォルダ一覧に表示(可視化)させるか否か。
valid users 共有へのアクセスを許可するユーザー・グループ一覧(@ はグループ指定)。
write list read only = yes の環境下で、例外的に書き込みを許可する特定ユーザー/グループ。
create mask クライアントがファイルを新規作成した際に適用される最大パーミッション(ビットAND演算)。
directory mask クライアントがディレクトリを新規作成した際に適用される最大パーミッション。

2.3 testparm コマンドによる設定構文検査実機ログ

smb.conf を編集した後は、構文エラーや不要なデフォルト設定を検証する testparm コマンドを実行します。

testparm 実行検証ログ
[user01@linuc-node01 ~]$ sudo testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

Server role: ROLE_STANDALONE

# Global parameters
[global]
	printcap name = cups
	security = USER
	workgroup = SAMBA
	idmap config * : backend = tdb

2.4 Sambaユーザー管理(pdbedit と smbpasswd)

Sambaで共有アクセス認証を行うユーザーは、事前にLinuxのOSユーザー(/etc/passwd)として実在している必要 があります。OSユーザーをSambaパスワードデータベース(/var/lib/samba/private/passdb.tdb)に登録・管理します。

  • pdbedit -a -u <ユーザー名>: Linux実ユーザーをSambaデータベースに新規追加します(パスワードを対話入力)。
  • pdbedit -L [-v]: 登録されているSambaユーザーの一覧を表示します(-v で詳細表示)。
  • pdbedit -x -u <ユーザー名>: Sambaデータベースからユーザーを削除します。
  • smbpasswd -a <ユーザー名>: 旧来から使用されているSambaユーザーの追加・パスワード変更コマンドです。

3. NFSサーバーの構築とエクスポート制御

UNIX/Linux環境同士でネットワークファイル共有を行うデファクトスタンダードが NFS(Network File System) です。NFSサーバーの設定は /etc/exports および /etc/exports.d/*.exports で行います。

NFSユーザーマッピング(root_squash)と権限降格メカニズム

図2: NFSユーザーマッピング(root_squash)と権限降格メカニズム

3.1 /etc/exports の記述書式とアクセス制御

/etc/exports ファイルの基本書式は、<公開ディレクトリパス> <許可クライアント>(<オプション...>) です。

/etc/exports の定義例
/srv/nfs/public     192.168.2.0/24(ro,sync)
/srv/nfs/project    192.168.2.130(rw,sync,no_root_squash) 192.168.2.131(rw,sync)
/srv/nfs/backup     *.example.com(rw,sync,all_squash,anonuid=1000,anongid=1000)
構文の厳重注意: クライアント指定と括弧の間の空白
192.168.2.0/24(rw) と記述すべきところを、192.168.2.0/24 (rw) のように クライアント指定と丸括弧の間に半角スペースを挿入してしまうと、クライアント指定にはデフォルトオプション(ro)が適用され、(rw) は「全世界のクライアント(*)」に対するオプションと解釈 されてしまう深刻なセキュリティホールが生じます。LinuC試験でも引っかけ問題として極めて頻出です。

3.2 ユーザーマッピングオプションの重要ロジック

NFSはプロトコルの特性上、クライアント側のプロセスUIDをそのままパケットに含めてサーバーへ要求します。クライアント端末でroot権限を持つユーザーが、サーバー側のroot権限を乗っ取らないようにするための防御機構が「ユーザーマッピング(Squash)」です。

オプション名 動作内容とセキュリティ影響
root_squash(既定値) クライアント側のroot(UID 0)からのアクセスを、サーバー側で非特権匿名ユーザー nobody(または nfsnobody: UID 65534)へ自動降格します。サーバー側のシステム領域を保護する標準設定です。
no_root_squash クライアント側のrootを降格せず、サーバー側でもそのままroot(UID 0)として書き込み・実行を許可します。ディスクレスブートや信頼されたバックアップサーバー等の特殊用途を除き、セキュリティリスクが極めて高い設定です。
all_squash rootだけでなく、一般ユーザーを含む すべての接続元UID/GID を強制的に匿名ユーザー(nobody)へマッピングします。不特定多数が読み書きするパブリック共有に適します。
anonuid / anongid squashされた匿名ユーザーのUIDおよびGIDを特定のアカウント値に固定します(例: anonuid=1000,anongid=1000)。
sync(既定値) データが物理ディスクに完全に書き込まれてからクライアントへ応答を返します(高整合性・安全)。
async ディスク書き込み完了を待たずにメモリキャッシュ時点で応答を返します(高スループットだが停電時データ破損リスクあり)。

3.3 exportfs コマンドによる動的反映実機ログ

/etc/exports を編集した際、NFSデーモン(nfs-server.service)を再起動することなく設定を即時再読み込み・反映させるコマンドが exportfs です。

  • exportfs -r: /etc/exports の変更内容を再読み込みし、現在のエクスポート一覧と同期します(re-export)。
  • exportfs -v: 現在エクスポート公開されている全ディレクトリと適用オプションを詳細表示します。
  • exportfs -a: /etc/exports に定義された全ディレクトリをエクスポートします。
  • exportfs -u <ホスト>:<ディレクトリ>: 指定した共有の一時的なエクスポート解除を行います(unexport)。
exportfs -v 実行検証ログ
[user01@linuc-node01 ~]$ sudo exportfs -v
/srv/nfs/share  192.168.2.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

4. クライアント側からの接続とマウント検証

構築されたファイル共有サービスに対して、クライアントPCからアクセス・検証するコマンドを整理します。

4.1 smbclient によるSamba共有の参照・対話操作

Sambaクライアントツールである smbclient を用いると、LinuxからFTPに似た対話的インターフェースでSamba共有を操作できます。

smbclient による共有一覧表示と接続構文
# サーバー(192.168.2.138)が公開している共有一覧の照会(-L オプション)
smbclient -L //192.168.2.138 -U user01

# 特定の共有フォルダーに対話的接続
smbclient //192.168.2.138/project_share -U user01

また、LinuxのローカルディレクトリにCIFSファイルシステムとして直接マウントする場合は、mount -t cifs コマンド(cifs-utils パッケージ)を使用します。

CIFSマウント構文例
mount -t cifs //192.168.2.138/project_share /mnt/samba -o username=user01,password=Pass123

4.2 showmount と mount コマンドによるNFSマウント

NFSサーバーが公開しているエクスポート情報をクライアント側から確認するには showmount -e <サーバーIP> を実行します。

showmount -e による公開確認ログ
[user01@linuc-node01 ~]$ showmount -e 192.168.2.138
Export list for 192.168.2.138:
/srv/nfs/share 192.168.2.0/24

クライアント側でローカルディレクトリへマウントする基本構文は以下の通りです。

NFSマウント構文
# NFSv4でマウント
sudo mount -t nfs -o vers=4 192.168.2.138:/srv/nfs/share /mnt/nfs

4.3 /etc/fstab によるNFSの自動マウントとオプション(_netdev等)

OS起動時にNFS共有を自動マウントさせる場合、/etc/fstab にエントリーを追記します。ネットワークが起動する前にマウントを試みてハングアップするのを防ぐため、_netdev オプションを付与するのが必須の鉄則です。

/etc/fstab におけるNFSマウント設定例
192.168.2.138:/srv/nfs/share  /mnt/nfs  nfs  defaults,_netdev,soft,timeo=30  0  0

5. ファイル共有サーバーのセキュリティと権限設計

ファイル共有サービスを本番運用する際、多くの管理者が直面するトラブルが「共有設定では書き込み可能にしているのに、クライアントから書き込みが拒否される」という権限不整合です。

5.1 Linuxファイルシステムパーミッションとの二重チェック機構

SambaやNFSにおける最終的なアクセス可否は、以下の2段階のフィルターが **論理積(AND条件)** で評価されます。

  1. 第1層: サービス層のアクセス権(smb.conf / /etc/exports)
    プロトコルレベルで書き込みが許可されているか(read only = norw)を検証します。ここで拒否された場合、直ちに通信エラーとなります。
  2. 第2層: OSファイルシステムのアクセス権(POSIXパーミッション / ACL)
    サービス層で許可された後、実際にサーバー上の物理ディレクトリ(例: /srv/samba/project)に対して、アクセス元のLinux実UID/GIDが書き込み権限(w)を保持しているかをLinuxカーネルが検証します。

したがって、smb.confwritable = yes と設定していても、サーバー上のディレクトリが drwxr-xr-x (755) で一般ユーザーの書き込みビットが落ちている場合、書き込み処理は Permission denied となります。両方の権限を正しく整合させることが不可欠です。

5.2 SELinuxブール値によるファイル共有保護

AlmaLinuxなどのRHEL系環境においてSELinuxがEnforcingモードで動作している場合、専用のSELinuxブール値を有効化(setsebool -P)するか、共有ディレクトリのコンテキストを正しく割り当てる必要があります。

  • Samba用ブール値: setsebool -P samba_enable_home_dirs on(ホームディレクトリ共有を許可)
  • NFS用ブール値: setsebool -P nfs_export_all_rw on(全領域のエクスポート書き込みを許可)
  • 共有ディレクトリコンテキスト: chcon -t samba_share_t /srv/samba/share

6. LinuC 202試験(主題2.11)重要ポイント総整理

主題2.11「ファイル共有サービス」における記述式問題(コマ問)頻出コマンドおよび設定ディレクティブを整理します。

6.1 記述式(コマ問)頻出コマンド・設定ファイル一覧

設問対象・操作内容 入力すべきコマンド/設定値 注意点・失点防止ポイント
Samba設定ファイルの構文を検証するコマンド testparm 引数なし、または -s オプション
Sambaユーザーを追加・管理するコマンド pdbedit -a -u <user> pdbedit または smbpasswd -a
クライアントからSamba共有一覧を参照するコマンド smbclient -L //<host> 大文字の -L オプション
NFSエクスポート設定を再読み込みするコマンド exportfs -r -r(re-export)オプション
NFSエクスポート状態を詳細表示するコマンド exportfs -v -v(verbose)オプション
クライアントからNFS公開ディレクトリを照会するコマンド showmount -e <host> 小文字の -e オプション
NFSv4の標準通信ポート番号 2049 単一のTCP 2049番ポート

6.2 NFS root_squash と Samba マスク設定の盲点

受験者が最も混同しやすい2大盲点を整理します。

  1. 盲点1: root_squash のデフォルト有効性
    /etc/exports でオプションに何も指定しなかった場合、または (rw) とだけ記述した場合でも、root_squash は既定で自動適用 されます。root権限を維持させたい場合にのみ、明示的に no_root_squash を指定する必要がある点を正しく記憶しておきます。
  2. 盲点2: create mask によるビットマスク演算
    create mask = 0644 と指定した場合、新規作成されるファイルに 0644 がそのまま付与されるのではなく、クライアントが要求したモードとの「論理積(AND)」が適用されます。特定のビットを強制的に立てたい場合は force create mode を併用します。

7. まとめと次回予告(第15回:Linuxセキュリティ & VPN)

本記事では、LinuCレベル2(202試験)におけるストレージ共有の柱であるSambaとNFSについて、プロトコル構造の差異(SMB vs NFSv4)、smb.conf の共有セクション設計、testparmpdbedit によるユーザー管理、/etc/exports のユーザーマッピング規則(root_squash)、exportfs による動的制御、およびクライアント接続コマンド(smbclient/showmount)を実機ログとともに体系的に解説しました。

ファイル共有は、アクセス権限の二重チェック機構やセキュリティマッピングを理解することが、実務でのトラブルシューティングおよび試験での正確な設定判断の鍵となります。

次回(第15回)は、サーバーおよびネットワークを堅牢に防御するための「Linuxセキュリティ基盤とVPN構築」を取り上げます。パケットフィルタリングの要である nftables / iptables、ホスト型侵入検知システム(IDS/Tripwire)、OpenVASによる脆弱性スキャン、そして暗号化トンネルを構築する OpenVPN / WireGuard の実機検証を進めます。

前の記事
次の記事