10.ファイル共有

Linuxのファイル共有(smb,cifs)、Sambaなどに関して

10.1. Windowsネットワーク

Microsoft系技術の基本であるWindowsネットワークの概念について一部記載する。

10.1.1. Windowsネットワークの基本概念

ワークグループとドメイン

ワークグループはWindowsネットワークの基本単位のこと。 コンピュータをまとめたグループの1つの単位となる。

ワークグループ

マスターブラウザ

マスターブラウザは同一ネットワーク内のコンピュータのリストを取り扱いまとめて管理するホストのこと。 これは「ネットワーク」-「マイネットワーク」で一覧表示されるネットワークデータを指す。

ネットワークセグメント内に必ず1つ存在し、他のホストはマスターブラウザより参照して利用する。 マスターブラウザとなるホストは自動的に選出される

NTドメイン/ADドメイン

  • NTドメイン
    • NTドメインはWindows NTで使用されるユーザ管理の仕組み
    • ネットワーク上のWindowsホストをドメイン単位でグループ化し、ドメインコントローラ(認証サーバ)でアカウント情報を集中管理する。
    • ドメインにログインしたユーザはドメイン内の共有リソースやプリンタに認証なしでアクセスできる。
  • ADドメイン
    • AD(Active Directory)ドメインはWindows 2000 Server以降に採用されているドメインサービスのこと。
    • NTドメインと異なり、複数ドメインを階層構造で管理できる。そのため大規模ネットワークにも対応している。

ドメインコントローラ

ドメインコントローラはドメインを管理するためのサーバのこと。 ドメイン内のユーザのログオン認証を行う。

ドメイン内にドメインコントローラが1つ以上存在することで機能を実現する。 ユーザアカウント/グループはドメインコントローラに登録されユーザはドメインコントローラにユーザ名とパスワードを送り認証する。 なお冗長化のためにドメインコントローラは複数用意できる。

NetBIOS

NetBIOSはWindowsネットワークで使われているネットワーク用APIのこと。 ネットワーク内のホストにそれぞれ異なる15Byteの名称を付けて識別し、この名称に1Byteの通信アプリケーション情報を追加したものがNetBIOS名となる。 WindowsはこのNetBIOS名により通信対象のソフトウェアを区別する。

またNetBIOSをTCP/IPで使う仕組みにNetBIOS over TCP/IPというものがある。 これはTCP/IPでNetBIOSをカプセル化してTCP/IP上でセッション確立する仕組み。

WINSはIPアドレスとNetBIOS名の名前解決を行う仕組みのこととなる。

SMB/CIFS

SMB(Server Message Block)はWindows OSにおけるファイル共有プロトコルの1つ。 Windows以外のOS、LinuxやMacでも使用することができる

SMBプロトコルは、クライアントとサーバー間でのファイルや印刷データの共有、およびそれらのシリアルポートを通じた通信をサポートしている。 2022年現在はSMBを拡張したCIFS(Common Internet File System)も使用されている。

SMBとCIFSの特徴は以下の通り。

比較項目SMBCIFS
下位プロトコルNetBIOSインターフェースTCP/IP
暗号化のサポートなしあり
サポート範囲LinuxやMacでも使用可能Windowsシステム特化

SMB/CIFSの用途は以下用途で使用できる。

  • ファイル共有
  • プリンタ共有
  • リモートアクセスとその管理

WINSサーバ

WINSサーバはNetBIOSとIPアドレスの名前解決を行うサーバのこと。 WINSに情報が存在しない場合はLMHOSTSファイルが名前解決に使用される。

LMHOSTSの構造は以下の通り。

192.168.1.1   LPICSV   #PRE   
192.168.1.2.  HOST1    #PRE   #DOM:LPIC

10.2. Sambaサーバの構築

10.2.1. Sambaサーバ

SambaはWindowsネットワークで使用されるSMB/CIFSプロトコルを利用してWindowsでのファイル共有の仕組みを提供するOSSソフトウェアのこと。 機能としてはファイル共有のほかに、プリンタ共有、認証機能も提供する。

提供できる機能は以下の通り。

  • ファイルサーバ機能
  • プリントサーバ機能
  • WINSサーバ機能
  • ドメインコントローラ
  • ActiveDirectoryメンバーサーバ
  • Microsoftネットワーククライアント

Sambaにてサーバ機能を提供するデーモンはsmbdnmbとなる。 smbdはファイルやプリンタの共有、ユーザの認証、nmbdはブラウズ機能、NetBIOSによる名前解決を提供する。

Sambaのバージョン

Samba3とSamba4の主な違いを以下に記載する。

機能Samba3Samba4
ドメインコントローラNTドメインのドメインコントローラ構築ができる(NTMLv2の使用、WINSサーバによる名前解決、LDAP連携の可能)ADドメインのドメインコントローラ構築ができる(Keroberos認証、DNSによる名前解決、LDAP内蔵)
ファイルサーバSMB2に対応SMB2,SMB3に対応

10.2.2. Sambaの基本動作

Sambaは以下の3つのプロセスから構成される。

  • smbd
    • ファイル共有、認証
  • nmbd
    • ブラウジング機能、NETBIOS名前解決、WINSサーバ
  • winbindd
    • Winbind機能

またSambaサーバが利用するポートは以下の通り。

ポート番号説明
137/UDPNetBIOS名前解決やブラウジングに使用
138/UDPNetBIOS名前解決やドメインログオンに使用
139/TCPファイル共有(Microsoft Direct Hosting SMBを利用していない場合)
445/TCPファイル共有(Microsoft Direct Hosting SMBを利用している場合)

Sambaの起動方法はSystemdのシステムでは以下の通り。

systemctl start smb.client
systemctl start nmb.service

SysVinitを採用したシステムでは以下の通り。

/etc/init.d/smb start

10.2.3. smb.conf

Sambaサーバの設定はsmb.confファイルで行う。 smb.confは全体設定、共有定義から構成される。

smb.confの構造は以下の通り。 コメントアウトは#;で可能。

# 全体設定
[global]
パラメータ名 = 値

# 共有定義
[homes]
パラメータ名 = 値

[printers]
パラメータ名 = 値

[セクション名1]
パラメータ名 = 値

[セクション名2]
パラメータ名 = 値

globalセクションの設定

globalセクションではsmaba全体の設定を行う。 なお変更後はsambaの再起動が必要となる。

主要な項目は以下の通り。

# Sambaサーバが所属するワークグループ名もしくはドメイン名を指定する
workgroup = ワークグループ名|ドメイン名

# Sambaサーバの動作モードを指定する
server role = 動作モード
# サーバ動作モード
# AUTO : securityパラメータの設定に従う(デフォルト)
# STANDALONE : スタンドアロンのサーバ
# MEMBER SERVER : ドメインのメンバーサーバ
# CLASSIC PRIMARY DOMAIN CONTROLLER : NTドメインのプライマリーコントローラ(PDC)
# CLASSIC BACKUP DOMAIN CONTROLLER : NTドメインのバックアップドメインコントローラ(BDC)
# ACTIVE DIRECTORY DOMAIN CONTROLLER : Active Domainのドメインコントローラ

# NetBios名の指定
netbios name = NETBios名

# サーバの名前や説明の指定
server string = コメント

# 接続を許可するホストの指定(記載されていないホストは接続拒否)
hosts allow = ホスト

# Guestアカウントの定義(アカウントが存在しないユーザにGuestとしてアクセスさせれる)
guest account = ゲストユーザ名

# Sambaユーザとして認証できない際の動作の指定
map to guest = Never | Bad User | Bad password
# Never: ゲスト認証の否認
# Bad User: 存在しないユーザの指定でゲスト認証とみなす
# Bad Password: Bad Userに加えてパスワード入力ミスの場合もゲスト認証とみなす

# ログファイルの指定(「%m」で接続元ホストごとにログを分けれる)
log file = ログファイル名

# ログファイルの最大サイズをKB単位で指定
max log size = サイズ

# ハッシュ値を用いた暗号化パスワードの使用を設定
encrypt passwords = Yes | No

# パスワード認証をsmbpassword方式で行う場合のパスワードファイルの指定
smb password file = パスワードファイルのパス

# SambaのパスワードとLinuxのパスワードを同期させるかの設定
unix password sync = Yes | No
passwd program = パスワードコマンドのパス
passwd chat = 期待させる文字列

# UNIXユーザを別ユーザ名とマッピングさせる
# 「UNIXユーザ名=Windowsマシンのユーザ名」のように記述
username map = マッピングファイル名

# ログオフ時に実行するスクリプトファイルの指定
logon script = スクリプトファイル名

# SambaサーバをWINSサーバとして動作させる場合にYesを設定
wins support = Yes | No

# WINSサーバのIPアドレスをIPアドレスを指定する
wins server = IPアドレス

共有の設定

globalセクション以降では個々の共有設定を行う。

主要な項目は以下の通り。

# コメントの指定
comment = コメント

# ブラウジングしたときの表示設定
browseable = Yes | No

# 書き込みの許可設定
writeable = Yes | No
read only = No | Yes

# 共有ディレクトリのパスを指定
path = ディレクトリのパス

# 共有内に作成するファイル/ディレクトリの所有者/グループを強制的に変換
force user = ユーザ名
force group = グループ名

# 書き込みが例外許可されるユーザ/グループの指定
write list = ユーザ名 | @グループ名

# 「.」で始まる名前のファイル/ディレクトリを表示しないように隠し属性の適用の指定
hide dot files = Yes | No

# 任意の名前のファイルやディレクトリを表示させたくない場合に指定。「/」で複数指定可能。
veto files = /ファイル名/

# 共有内にファイルやディレクトリを作成する場合のパーミッション設定
# ファイルに適用可能なパーミッション(Default:0744)
create mask = mode
# ディレクトリに適用可能なパーミッション(Default:0755)
directory mask = mode
# 必ずファイルに適用されるパーミッション(Default:0000)
force create mode = mode
# 必ずディレクトリに適用されるパーミッション(Default:0000)
force directory mode = mode

# アクセス可能ユーザの指定
valid users = ユーザ名

# Guestユーザのログイン許可の指定
guest ok = Yes | No
public = yes | No

SambaサーバをADドメインに参加させる設定

SambaサーバをActive Directoryドメインに参加させる際には以下設定が必要となる。

設定項目説明
workgroup=ADドメインのNetBios名ADドメインのNetBIOS名の指定
realm=レルム名ADのドメイン名の指定(FDQNで指定)
security=動作モードsambaの動作モードの指定(adsと指定)
[global]
workgroup = SAMPLE
realm = SAMPLE.LOCAL
security = ads

なおレルム名はKerberos認証(ユーザが1つの認証で複数台のサーバへアクセスできるシングルサインオン)が管理する範囲のことを指す。 これはActive Directoryが認証にKerberosを使用することに起因する。

またActive Directoryドメインに参加するにはnet ads joinコマンドを実行する。

net ads join -U ユーザ名

homesセクションの設定

homeセクションはUNIXユーザの各ホームディレクトリを一括で共有するためのセクション。 そのため個々のユーザごとにホームディレクトリの共有を定義する必要はない。

printersセクションの設定

printersセクションは共有プリンタに関する設定を行うセクション。 複数プリンタがある場合も1つの設定のみで完結する。

# Yesならばファイル共有ではなくプリンタ共有として扱う
print ok = Yes | No
printable = Yes | No

個々の共有設定

共有フォルダ/共有プリンタなどネットワークで共有されるものは共有リソースと呼ばれる。 「globals」「homes」「printers」は予約語となっているが、それ以外は任意に作成可能。

共有名の最後に$をつけるとブラウズしても見えない隠し共有となる。

testparmコマンド

testparmコマンドはsmb.confの構文にミスがないかを調べるもの

testparm [オプション] [設定ファイル]
オプション説明
-s構文チェック後にsmb.confを表示
-vデフォルトパラメータの表示

なおSambaはSyslogを介さずにログを処理する。 smbdのログはlog.smbd、nmbdのログはlog.nmbdの保存される。

10.2.4. 設定に関する注意事項

マスターブラウザ

マスターブラウザはワークグループ単位/ドメイン単位で存在し、自動的に選出される。 なおOSレベルという値により算出され、OSレベルが高いほど算出優先度が高くなる。 Sambaサーバに33以上を設定すれば、優先的に選ばれる。

# ローカルマスターブラウザに選出されないようにする
local master = Yes | No

# ローカルマスターブラウザの選出に参加する
domain master = YeS | No

# ブラウザ選定を促す
preferred master = Yes | No | Auto

# OSレベルの設定
os level = 数値

認証の設定

認証方法はsecurityで設定を行う。 なおデフォルト値はUSERとなる。

security = USER | DOMAIN | ADS
# USERではsmbpasswdファイルなどを使い認証
# DOMAINではドメインコントローラに認証情報を送り認証(NTLM認証)
# ADSではActive DirectoryドメインにKerberos認証を使いログオフする

10.2.5. Sambaユーザの管理

security = USERの場合はUNIXシステムアカウントとは別に、Samba利用者用のユーザアカウントも必要となる。 なお作成には対応するUNIXユーザも必要になる。

Samba4ではユーザ情報が格納されるデータベースとして以下の4種類が使用可能。 またMySQLやPostgreSQLなどもユーザ情報格納に使用可能。

  • smbpasswd
    • Samba2.2系での利用形式
    • テキスト形式のパスワード(/etc/samba/smbpasswdなど)に1行つ図保存
    • 使用にはpassdb backend = smbpasswdとsmb.confに指定
  • tdbsam
    • バイナリ形式でデータベースファイル(/etc/samba/passdb.tdbなど)に保存
    • Sambaで使えるユーザ情報の全項目を格納可能
    • 使用にはpassdb backend = tdbsam:/etc/samba/passdb.tdbとsmb.confに指定
  • ldapsam
    • LDAPサーバにユーザ情報を格納する(LDAPサーバが必要)
    • 多数ユーザを扱う場合に向いている手法
    • 使用にはpassdb backend = ldapsam:ldap://LDAPサーバ名[:ポート番号]とsmb.confに指定

pdbeditコマンド

Samba3.0以降で利用できるユーザ管理コマンド。

pdbedit [オプション] Sambaユーザ名
オプション説明
-LSambaユーザ一覧表示
-aSambaユーザ追加
-xSambaユーザ削除

smbpasswdコマンド

Sambaユーザのパスワード変更を行うコマンド。

smbpasswd [オプション] [Sambaユーザ名]
オプション説明
-dSambaユーザの無効化
-eSambaユーザの有効化
-xSambaユーザの削除

10.2.6. Sambaの管理コマンド

smbstatusコマンド

Sambaサーバに接続されているクライアント、使用中の共有、ロックされているファイルを確認できるコマンド。

smbstatus

nmblookupコマンド

NetBIOS名を問い合わせたり、NetBIOS名からIPアドレスを検索したりできるコマンド。

nmblookup [オプション] NetBIOS名orIPアドレス、ワークグループ名
オプション説明
-A引数をIPアドレスとみなす
-Mマスターブラウザの検索

10.2.7. Sambaクライアント

Sambaサーバはサーバ機能のみではなく、LinuxがWindowsネットワーク上の共有リソースにアクセスするためのクライアント機能も提供する

smbclientコマンド

SambaサーバやWindowsホストにより提供される共有リソースを利用できるコマンド。

smbclient [オプション] 接続先
オプション説明
-Lリスト表示の要求
-N認証を行わない
-U ユーザ名接続ユーザの指定
サブコマンド説明
cd ディレクトリディレクトリを移動する
del ファイルファイルの削除
dirファイルリストの表示
exitsmbclientの終了
get ファイルファイルの取得
mget ファイル複数ファイルをまとめて取得
mkdir ディレクトリディレクトリの作成
mput ファイル複数ファイルをまとめてサーバに転送する
lcd ディレクトリローカル側のディレクトリに移動
put ファイルファイルをサーバに転送
rmdir ディレクトリディレクトリを削除する

使用例は以下の通り。

# 共有リソースの一覧表示
smbclient -L 192.168.1.2

# winhostの共有リソースpublicへのアクセス
smbclient //winhost/public

# 共有ディレクトリ/publicを/mnt/publicにマウント
mount -t cifs //winhost/public /mont/public

smbcontrolコマンド

Sambaの主要なデーモンであるsmbd、nmbd、winbinddにメッセージを送ることができるプログラム。

smbcontrol [対象] [メッセージタイプ]
メッセージタイプ説明
close-share指定した共有をClose
reload-config指定したデーモンに設定の再読み込みさせる
kill-client-ip指定したIPアドレスのクライアントを切断
ping = 指定した対象にpingし応答が来た対象のPIDを表示

なお/etc/init.d/winbindd restartでもwinbinddに設定ファイルを再読み込みは可能。

samba-toolコマンド

Samba4での管理のメインツールとなるコマンド。 ドメイン(AD等)の管理、DNSの管理の他、セキュリティ関連の操作やユーザー管理等も行える。

samba-tool <サブコマンド>
サブコマンド説明
dnsDNS管理
domainドメイン管理
testparm設定ファイルの構文チェック
userユーザ管理

10.3. NFSサーバの構築

10.3.1. NFS

NFS(Network File System)はネットワークを介してファイルを共有する仕組み。 Unix系OS同士のファイル共有にはNFSが使用される。

NFSサーバが公開したディレクトリはNFSクライアントがマウントすることでリモートファイルシステムをローカルファイルシステム同様に扱うことができる。 NFSサーバを実現するには以下の3つのサービスが必要となる。

サービスサーバクライアント説明
portmap必要必要RPCプログラム番号をTCP/IPポート番号に変換
nfsd必要不要ファイルシステムのエクスポート及びクライアント要求処理
mountd必要不要リモートファイルシステムのマウント/アンマウント

RPC(Remote Proceduce Call)はネットワーク上にあるリモートホストに機能を別のホストから使えるようにする仕組みのこと。 RPCサービスにはRPCプログラム番号が付けられている。対応表は/etc/rpcで確認可能。

RPCサービスが利用するTCP/UDPポートは動的に割り当てられるため、RPCクライアントの利用にはポート番号を確認する必要がある。 portmapはRPCプログラム番号とポート番号のマッピングを行うサービスとなる。

なおportmapはTCP Wrapprでアクセス制御することが可能。 NFSを利用する際の推奨設定(サービス提供範囲の限定)は以下のように行う。

portmap: 192.168.3.

NFSv3/NFSv4

NFSv4の特徴は以下の通り。

  • ポート番号が2049番固定
  • idimapdサービスによりUIDの考慮が不要
  • ルートディレクトリがエクスポートされているように見える

rpcinfoコマンド

RPCサービスの状況を確認するコマンド。

rpcinfo オプション [ホスト名]
オプション説明
-p指定したホストで動作するRPCサービス一覧の表示

10.3.2. NFSサーバの設定

NFSサーバで特定のディレクトリを公開することはエクスポートと呼ばれる。 エクスポートするディレクトリは/etc/exportsに記述する。

記述例は以下の通り。

/share      172.16.0.0/255.255.0.0(rw)
/public     *.local.jp(ro) local(rw,nor_root_squash)

また/etc/exportsのオプションは以下の通り。

オプション説明
ro読み取り専用でエクスポートする
rw読み取り/書き込み属性でエクスポート
no_root_squashrootアクセス時にroot権限で実行
root_squashrootアクセス時に匿名アカウント権限で実行(デフォルト設定)
all_squashすべてのアクセスを匿名アカウント権限で実行

NFSサーバの注意点としてUIDを統一するべき。(UNIXのUIDがそのままNFSサーバでも使用されるため) そうしないと別ユーザとして認識される場合がある。

exportsコマンド

現在のエクスポート状況の表示、/etc/exportsの変更を反映させるコマンド。

exports [オプション] [ホスト:パス]
オプション説明
-aすべてのディレクトリのエクスポート/アンエクスポート
-rすべてのディレクトリの再エクスポート
-Uアンエクスポート
-v詳細に表示

showmountコマンド

NFSサーバのディレクトリをマウントしているNFSクライアントを調べることができるコマンド。

showmount [オプション] [ホスト]
オプション説明
-aクライアントのホスト名とマウントしているディレクトリの表示
-e指定したホストでエクスポートしているディレクトリの表示

nfsstatコマンド

NFSの統計情報を表示するコマンド。

ntfsstat [オプション]
オプション説明
-sNFSサーバ側の統計のみを表示
-cNFSクライアント側の統計のみを表示
-nNFSの統計のみを表示
-rRPCの統計のみを表示
-o netネットワーク層の統計表示

10.3.3. NFSクライアントの設定

NFSを使いリモートファイルシステムをマウントするにはmountコマンドを使用する。 ファイルシステムタイプにはnfsを指定する。

mount -t nfs filerever:/public /mnt/nfs/public

またNFSをマウントする際のオプションは以下の通り。

オプション説明
bgマウント失敗時もバックグラウンドで試行し続ける
fgマウントをフォアグラウンドで行う
softソフトマウントを行う
hardハードマウントを行う
intrハードマウント時の割り込みを許可
retransソフトマウントの場合の再試行回数
rsize=バイト数読み取りのブロックサイズ
wsize=バイト数書き込みのブロックサイズ

ソフトマウントとハードマウントはNFSサーバがクラッシュしたり障害が起きた際のNFSサーバが応答がない場合の動作が異なる

  • ソフトマウント
    • NFSサーバが応答しない場合タイムアウトになる
  • ハードマウント
    • ハングアップしているように見える
    • 応答があるまで要求を再試行し続ける
    • これを設定する場合はinitrオプションも指定する必要ある

起動時に自動マウントするには/etc/fstabに追加しておく。

filesvr:/pub /mnt/nfs/pub nfs rw 0 0
最終更新 2025.01.19: Added ss command (683d062)