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. ネットワークファイル共有の2大プロトコル(SMB vs NFS)
ファイル共有サービスを設計する際、クライアント端末のOS種別やネットワークトポロジーに応じて最適なプロトコルを選択する必要があります。
図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の仕様差が出題されます。
-
ポートマッパー(rpcbind)の依存関係NFSv3では、補助デーモン(mountd, statd, lockd)がランダムなRPC高位ポートを動的に使用するため、
rpcbind(TCP/UDP 111)によるポート番号通知が必須であり、ファイアウォール通過が極めて困難でした。これに対しNFSv4では、すべてのRPC機能が TCP 2049番ポートに単一統合 され、rpcbindへの依存が撤廃されました。 -
ステートフルプロトコルへの刷新NFSv3はステートレス(サーバーがクライアントの接続状態を保持しない)であったため、ファイルロック管理が脆弱でした。NFSv4は完全なステートフル設計となり、オープン・クローズ・ロックの状態管理がプロトコル本体に組み込まれました。
-
疑似ファイルシステム(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 個別共有セクションの主要ディレクティブ
個別ディレクトリを共有公開する場合、セクション名を角括弧で定義します。
[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 = no は writable = yes と同義)。 |
browseable |
マイネットワークの共有フォルダ一覧に表示(可視化)させるか否か。 |
valid users |
共有へのアクセスを許可するユーザー・グループ一覧(@ はグループ指定)。 |
write list |
read only = yes の環境下で、例外的に書き込みを許可する特定ユーザー/グループ。 |
create mask |
クライアントがファイルを新規作成した際に適用される最大パーミッション(ビットAND演算)。 |
directory mask |
クライアントがディレクトリを新規作成した際に適用される最大パーミッション。 |
2.3 testparm コマンドによる設定構文検査実機ログ
smb.conf を編集した後は、構文エラーや不要なデフォルト設定を検証する 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 で行います。
図2: NFSユーザーマッピング(root_squash)と権限降格メカニズム
3.1 /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)。
[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共有を操作できます。
# サーバー(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 パッケージ)を使用します。
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> を実行します。
[user01@linuc-node01 ~]$ showmount -e 192.168.2.138
Export list for 192.168.2.138:
/srv/nfs/share 192.168.2.0/24
クライアント側でローカルディレクトリへマウントする基本構文は以下の通りです。
# 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 オプションを付与するのが必須の鉄則です。
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層: サービス層のアクセス権(smb.conf / /etc/exports)プロトコルレベルで書き込みが許可されているか(
read only = noやrw)を検証します。ここで拒否された場合、直ちに通信エラーとなります。 -
第2層: OSファイルシステムのアクセス権(POSIXパーミッション / ACL)サービス層で許可された後、実際にサーバー上の物理ディレクトリ(例:
/srv/samba/project)に対して、アクセス元のLinux実UID/GIDが書き込み権限(w)を保持しているかをLinuxカーネルが検証します。
したがって、smb.conf で writable = 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: root_squash のデフォルト有効性
/etc/exportsでオプションに何も指定しなかった場合、または(rw)とだけ記述した場合でも、root_squashは既定で自動適用 されます。root権限を維持させたい場合にのみ、明示的にno_root_squashを指定する必要がある点を正しく記憶しておきます。 -
盲点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 の共有セクション設計、testparm や pdbedit によるユーザー管理、/etc/exports のユーザーマッピング規則(root_squash)、exportfs による動的制御、およびクライアント接続コマンド(smbclient/showmount)を実機ログとともに体系的に解説しました。
ファイル共有は、アクセス権限の二重チェック機構やセキュリティマッピングを理解することが、実務でのトラブルシューティングおよび試験での正確な設定判断の鍵となります。
次回(第15回)は、サーバーおよびネットワークを堅牢に防御するための「Linuxセキュリティ基盤とVPN構築」を取り上げます。パケットフィルタリングの要である nftables / iptables、ホスト型侵入検知システム(IDS/Tripwire)、OpenVASによる脆弱性スキャン、そして暗号化トンネルを構築する OpenVPN / WireGuard の実機検証を進めます。
