10. ファイル共有
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の特徴は以下の通り。
比較項目 | SMB | CIFS |
---|---|---|
下位プロトコル | NetBIOSインターフェース | TCP/IP |
暗号化のサポート | なし | あり |
サポート範囲 | LinuxやMacでも使用可能 | Windowsシステム特化 |
SMB/CIFSの用途は以下用途で使用できる。
- ファイル共有
- プリンタ共有
- リモートアクセスとその管理
WINSサーバ
WINSサーバはNetBIOSとIPアドレスの名前解決を行うサーバのこと。 WINSに情報が存在しない場合はLMHOSTSファイルが名前解決に使用される。
LMHOSTSの構造は以下の通り。
10.2. Sambaサーバの構築
10.2.1. Sambaサーバ
SambaはWindowsネットワークで使用されるSMB/CIFSプロトコルを利用してWindowsでのファイル共有の仕組みを提供するOSSソフトウェアのこと。 機能としてはファイル共有のほかに、プリンタ共有、認証機能も提供する。
提供できる機能は以下の通り。
- ファイルサーバ機能
- プリントサーバ機能
- WINSサーバ機能
- ドメインコントローラ
- ActiveDirectoryメンバーサーバ
- Microsoftネットワーククライアント
Sambaにてサーバ機能を提供するデーモンはsmbdとnmbとなる。 smbdはファイルやプリンタの共有、ユーザの認証、nmbdはブラウズ機能、NetBIOSによる名前解決を提供する。
Sambaのバージョン
Samba3とSamba4の主な違いを以下に記載する。
機能 | Samba3 | Samba4 |
---|---|---|
ドメインコントローラ | 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/UDP | NetBIOS名前解決やブラウジングに使用 |
138/UDP | NetBIOS名前解決やドメインログオンに使用 |
139/TCP | ファイル共有(Microsoft Direct Hosting SMBを利用していない場合) |
445/TCP | ファイル共有(Microsoft Direct Hosting SMBを利用している場合) |
Sambaの起動方法はSystemdのシステムでは以下の通り。
SysVinitを採用したシステムでは以下の通り。
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と指定) |
なおレルム名はKerberos認証(ユーザが1つの認証で複数台のサーバへアクセスできるシングルサインオン)が管理する範囲のことを指す。 これはActive Directoryが認証にKerberosを使用することに起因する。
またActive Directoryドメインに参加するにはnet ads join
コマンドを実行する。
homesセクションの設定
homeセクションはUNIXユーザの各ホームディレクトリを一括で共有するためのセクション。 そのため個々のユーザごとにホームディレクトリの共有を定義する必要はない。
printersセクションの設定
printersセクションは共有プリンタに関する設定を行うセクション。 複数プリンタがある場合も1つの設定のみで完結する。
個々の共有設定
共有フォルダ/共有プリンタなどネットワークで共有されるものは共有リソースと呼ばれる。 「globals」「homes」「printers」は予約語となっているが、それ以外は任意に作成可能。
共有名の最後に$
をつけるとブラウズしても見えない隠し共有となる。
testparmコマンド
testparmコマンドはsmb.confの構文にミスがないかを調べるもの。
オプション | 説明 |
---|---|
-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以降で利用できるユーザ管理コマンド。
オプション | 説明 |
---|---|
-L | Sambaユーザ一覧表示 |
-a | Sambaユーザ追加 |
-x | Sambaユーザ削除 |
smbpasswdコマンド
Sambaユーザのパスワード変更を行うコマンド。
オプション | 説明 |
---|---|
-d | Sambaユーザの無効化 |
-e | Sambaユーザの有効化 |
-x | Sambaユーザの削除 |
10.2.6. Sambaの管理コマンド
smbstatusコマンド
Sambaサーバに接続されているクライアント、使用中の共有、ロックされているファイルを確認できるコマンド。
nmblookupコマンド
NetBIOS名を問い合わせたり、NetBIOS名からIPアドレスを検索したりできるコマンド。
オプション | 説明 |
---|---|
-A | 引数をIPアドレスとみなす |
-M | マスターブラウザの検索 |
10.2.7. Sambaクライアント
Sambaサーバはサーバ機能のみではなく、LinuxがWindowsネットワーク上の共有リソースにアクセスするためのクライアント機能も提供する。
smbclientコマンド
SambaサーバやWindowsホストにより提供される共有リソースを利用できるコマンド。
オプション | 説明 |
---|---|
-L | リスト表示の要求 |
-N | 認証を行わない |
-U ユーザ名 | 接続ユーザの指定 |
サブコマンド | 説明 |
---|---|
cd ディレクトリ | ディレクトリを移動する |
del ファイル | ファイルの削除 |
dir | ファイルリストの表示 |
exit | smbclientの終了 |
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にメッセージを送ることができるプログラム。
メッセージタイプ | 説明 |
---|---|
close-share | 指定した共有をClose |
reload-config | 指定したデーモンに設定の再読み込みさせる |
kill-client-ip | 指定したIPアドレスのクライアントを切断 |
ping = 指定した対象にpingし応答が来た対象のPIDを表示 |
なお/etc/init.d/winbindd restart
でもwinbinddに設定ファイルを再読み込みは可能。
samba-toolコマンド
Samba4での管理のメインツールとなるコマンド。 ドメイン(AD等)の管理、DNSの管理の他、セキュリティ関連の操作やユーザー管理等も行える。
サブコマンド | 説明 |
---|---|
dns | DNS管理 |
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を利用する際の推奨設定(サービス提供範囲の限定)は以下のように行う。
NFSv3/NFSv4
NFSv4の特徴は以下の通り。
- ポート番号が2049番固定
- idimapdサービスによりUIDの考慮が不要
- ルートディレクトリがエクスポートされているように見える
rpcinfoコマンド
RPCサービスの状況を確認するコマンド。
オプション | 説明 |
---|---|
-p | 指定したホストで動作するRPCサービス一覧の表示 |
10.3.2. NFSサーバの設定
NFSサーバで特定のディレクトリを公開することはエクスポートと呼ばれる。
エクスポートするディレクトリは/etc/exports
に記述する。
記述例は以下の通り。
また/etc/exports
のオプションは以下の通り。
オプション | 説明 |
---|---|
ro | 読み取り専用でエクスポートする |
rw | 読み取り/書き込み属性でエクスポート |
no_root_squash | rootアクセス時にroot権限で実行 |
root_squash | rootアクセス時に匿名アカウント権限で実行(デフォルト設定) |
all_squash | すべてのアクセスを匿名アカウント権限で実行 |
NFSサーバの注意点としてUIDを統一するべき。(UNIXのUIDがそのままNFSサーバでも使用されるため) そうしないと別ユーザとして認識される場合がある。
exportsコマンド
現在のエクスポート状況の表示、/etc/exports
の変更を反映させるコマンド。
オプション | 説明 |
---|---|
-a | すべてのディレクトリのエクスポート/アンエクスポート |
-r | すべてのディレクトリの再エクスポート |
-U | アンエクスポート |
-v | 詳細に表示 |
showmountコマンド
NFSサーバのディレクトリをマウントしているNFSクライアントを調べることができるコマンド。
オプション | 説明 |
---|---|
-a | クライアントのホスト名とマウントしているディレクトリの表示 |
-e | 指定したホストでエクスポートしているディレクトリの表示 |
nfsstatコマンド
NFSの統計情報を表示するコマンド。
オプション | 説明 |
---|---|
-s | NFSサーバ側の統計のみを表示 |
-c | NFSクライアント側の統計のみを表示 |
-n | NFSの統計のみを表示 |
-r | RPCの統計のみを表示 |
-o net | ネットワーク層の統計表示 |
10.3.3. NFSクライアントの設定
NFSを使いリモートファイルシステムをマウントするにはmount
コマンドを使用する。
ファイルシステムタイプにはnfs
を指定する。
またNFSをマウントする際のオプションは以下の通り。
オプション | 説明 |
---|---|
bg | マウント失敗時もバックグラウンドで試行し続ける |
fg | マウントをフォアグラウンドで行う |
soft | ソフトマウントを行う |
hard | ハードマウントを行う |
intr | ハードマウント時の割り込みを許可 |
retrans | ソフトマウントの場合の再試行回数 |
rsize=バイト数 | 読み取りのブロックサイズ |
wsize=バイト数 | 書き込みのブロックサイズ |
ソフトマウントとハードマウントはNFSサーバがクラッシュしたり障害が起きた際のNFSサーバが応答がない場合の動作が異なる
- ソフトマウント
- NFSサーバが応答しない場合タイムアウトになる
- ハードマウント
- ハングアップしているように見える
- 応答があるまで要求を再試行し続ける
- これを設定する場合はinitrオプションも指定する必要ある
起動時に自動マウントするには/etc/fstab
に追加しておく。