第17章 Sambaサーバーの構築と運用
LPIC-2 209.1 相当
Windowsとのファイル共有を実現するSambaは、LPIC-2全体でも最大のweight(209.1、weight 5)を持つトピックです。本章では、SMB/CIFSプロトコルの基礎から、smb.confの設定項目、ユーザー管理、Active Directoryへの参加、運用・診断コマンド、Linux側でのマウント方法まで、実務で必要になる内容を一通り扱います。Unix系間の標準的な共有方式であるNFSは、次章で扱います。
SMB/CIFSプロトコルの位置づけ
Sambaは、Windowsが標準で使うSMB(Server Message Block)・CIFS(Common Internet File System、SMB1の別名として使われることが多い呼称)プロトコルをLinux上で実装したソフトウェアです。ファイル共有だけでなくプリンタ共有、認証、名前解決までを一体で提供します。
| バージョン | 主な特徴 |
|---|---|
| SMB1(CIFS) | 1980年代からの最も古い世代。性能・セキュリティ面で多くの弱点を抱え、現在は既定で無効化するのが標準的な運用 |
| SMB2 | Windows Vista/Server 2008で導入。プロトコルの単純化・性能改善が図られた |
| SMB3 | Windows 8/Server 2012以降。通信の暗号化(SMB Encryption)、マルチチャネル、透過的フェイルオーバーなどに対応した現行の標準 |
server min protocol = SMB2のように最低プロトコルバージョンを引き上げ、SMB1を受け付けない設定にするのが現在の標準的な運用です。
SMB/CIFSと合わせて理解しておきたいのがNetBIOS(Network Basic Input/Output System)による名前解決です。NetBIOSは、DNSが普及する以前からWindowsネットワークで使われてきた独自の名前解決の仕組みで、nmbdデーモンがこれを担当します。現在の環境ではDNSによる名前解決が主体となっていますが、Active Directory環境ではDNSが正式な名前解決手段として使われる一方、同一セグメント内のブロードキャストによる簡易な検索やレガシー用途でNetBIOSも併存しているため、両者の役割分担を理解しておく必要があります。
| ポート番号 | プロトコル | 役割 |
|---|---|---|
| 137/udp | NetBIOS Name Service | NetBIOS名の名前解決(問い合わせ・応答) |
| 138/udp | NetBIOS Datagram Service | コネクションレスなデータグラム通信(ブラウジング等) |
| 139/tcp | NetBIOS Session Service | NetBIOS上でのSMBセッション(SMB1時代の主経路) |
| 445/tcp | SMB over TCP(Direct Host) | NetBIOSを経由せず直接TCP上でSMBを流す、現在主流の経路 |
現在主流の構成では、445/tcpが実際のファイル共有通信の主役であり、137〜139番はNetBIOS関連の互換性維持のために残されています。ファイアウォールで不要なポートを絞り込む際は、社内ネットワークの構成(NetBIOSに依存した古いクライアントが残っていないか)を確認したうえで判断する必要があります。
Sambaのデーモン構成
Sambaは単一のプロセスではなく、役割の異なる複数のデーモンで構成されています。それぞれの役割を理解しておくと、障害時にどのデーモンを疑えばよいかの切り分けが早くなります。
| デーモン | 役割 | 停止しているとどうなるか |
|---|---|---|
smbd | ファイル共有・プリンタ共有の本体。クライアントからのSMB接続要求を処理する | |
nmbd | NetBIOS名前解決とブラウジング(ネットワーク上の一覧表示)を担当 | |
winbindd | Windowsドメイン(AD)のユーザー・グループ情報をLinux側のUID/GIDへ解決する |
smbdが停止していると、そもそもファイル共有そのものにアクセスできなくなります。nmbdが停止していても445/tcp経由のSMB接続自体は機能しますが、NetBIOS名でのホスト検索やネットワーク上の「コンピュータ一覧」への表示ができなくなります。winbinddが停止していると、ADドメインのユーザーでログインしようとしても認証やUID/GIDの解決に失敗し、getent passwdでもドメインユーザーが一切表示されなくなります。3つのデーモンは独立したsystemdサービスとして管理されており、必要なものだけを個別に起動・停止できます。
$ sudo systemctl status smbd nmbd winbindd
● smbd.service - Samba SMB Daemon
Active: active (running) since Fri 2026-08-21 07:58:10 JST; 1h 20min ago
● nmbd.service - Samba NMB Daemon
Active: active (running) since Fri 2026-08-21 07:58:10 JST; 1h 20min ago
● winbindd.service - Samba Winbind Daemon
Active: inactive (dead)
$ sudo systemctl enable --now smbd nmbd winbindd
Created symlink /etc/systemd/system/multi-user.target.wants/smbd.service → /usr/lib/systemd/system/smbd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/nmbd.service → /usr/lib/systemd/system/nmbd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/winbindd.service → /usr/lib/systemd/system/winbindd.service.
この行のこの値に注目: statusを複数サービス名まとめて指定すると、それぞれのActive行が個別に表示されます。この例ではwinbinddだけがinactive (dead)で、AD連携を使わない構成であれば起動不要ですが、AD参加済みの環境でこの状態だと認証が機能しません。
smbd/nmbd/winbinddというユニット名はDebian系での表記です。RHEL系の派生ディストリビューションではsmb/nmb(末尾のdなし)というユニット名が使われることもあるため、実際の環境ではsystemctl list-units | grep -i sambaのように確認してから操作すると確実です。
smb.confの設定例([global]セクション)
Sambaの中核となる設定ファイルは/etc/samba/smb.confです。[global]セクションには、サーバー全体に関わる設定を記述します。
/etc/samba/smb.conf([global]セクションの設定例)
[global]
workgroup = EXAMPLE
server string = Samba File Server %v
security = user
map to guest = Bad User
netbios name = FILESERVER01
server min protocol = SMB2
log file = /var/log/samba/log.%m
max log size = 1000
passdb backend = tdbsam
unix charset = UTF-8
dos charset = CP932
| パラメータ | 役割 |
|---|---|
workgroup | Windowsのワークグループ名(またはドメインのNetBIOS名) |
server string | ネットワーク上に表示されるサーバーの説明文字列。%vはSambaのバージョンに置換されるマクロ |
security | 認証方式。user(個々のユーザー認証、標準的)やads(Active Directoryドメインへの参加)など |
map to guest | 認証情報がない・失敗したアクセスをゲストとして扱うかの制御 |
netbios name | ネットワーク上でこのサーバーが名乗るNetBIOS名(ホスト名と異なる名前も設定可) |
server min protocol | 許可する最低限のSMBプロトコルバージョン。古いSMB1は脆弱性が多いため無効化するのが一般的 |
log file | ログの出力先。%mは接続元クライアントのマシン名に置換される |
max log size | 1ログファイルあたりの最大サイズ(KB単位)。超過すると自動的にローテーションされる |
passdb backend | Sambaのユーザー・パスワード情報の保存方式。tdbsam(tdbデータベース)が標準的 |
unix charset | Linux側(ファイルシステム上)で使う文字コード。通常はUTF-8 |
dos charset | 古いDOS/Windowsクライアント向けの文字コード。日本語環境ではCP932(Shift-JIS系)を指定することが多い |
[homes]・[printers]・共有セクションの書式
[global]以外のセクションは、それぞれ1つの共有(またはホームディレクトリ・プリンタの自動共有)を表します。[homes]と[printers]は特別な意味を持つ予約セクション名です。
/etc/samba/smb.conf([homes]セクションの例)
[homes]
comment = ホームディレクトリ
browseable = no
writable = yes
valid users = %S
[homes]セクションを定義しておくと、Sambaにログインしたユーザーごとに、そのユーザーのLinuxホームディレクトリが自動的に\\fileserver\ユーザー名という共有として見えるようになります。個々のユーザーごとに共有セクションを手書きする必要がない点が特徴です。%Sは「現在アクセスしているサービス(共有)名」に置換されるマクロで、[homes]の文脈ではログイン中のユーザー名と一致します。
/etc/samba/smb.conf(通常の共有セクションの例)
[shared]
comment = 部署共通フォルダ
path = /srv/samba/shared
read only = no
valid users = alice, bob, @staff
write list = alice
create mask = 0664
directory mask = 0775
force group = staff
browseable = yes
guest ok = no
| パラメータ | 役割 |
|---|---|
read only | 共有全体を読み取り専用にするかどうか(writableの否定形にあたる書き方) |
valid users | この共有へのアクセスを許可するユーザー・グループの一覧。@グループ名でグループ指定も可能 |
write list | read only = yesの共有であっても、例外的に書き込みを許可するユーザー |
create mask | ファイル作成時に許可する最大パーミッション |
directory mask | ディレクトリ作成時に許可する最大パーミッション |
force group | 実際の書き込みを常に指定したUnixグループの権限で行わせる |
browseable | ネットワーク上の共有一覧にこの共有を表示するかどうか |
guest ok | 認証なしのゲストアクセスを許可するかどうか |
[shared]セクションの各パラメータのうち、書き込み可否に関わる設定は、最終的にLinux側のファイルシステム権限(所有者・パーミッション)とも掛け合わされます。Samba側で許可していても、Linux側のパーミッションで書き込みが拒否されていれば書き込めません。この「2段構えの権限チェック」はトラブルシューティングでよく見落とされるポイントです。
セキュリティモード(share/user/domain/ads)
Sambaのsecurityパラメータは、クライアントをどう認証するかを決める設定で、歴史的に何段階か変遷してきました。
| 値 | 認証方式 |
|---|---|
share | 共有ごとにパスワードを設定する古い方式(レガシー、現在のSambaでは廃止済み) |
user | Sambaサーバー自身がユーザーごとに認証する、スタンドアロン構成の標準 |
domain | NT4スタイルのドメインコントローラに認証を委任する(レガシー) |
ads | Active Directoryドメインのメンバーサーバーとして、Kerberosベースで認証する現在の標準 |
security = userとsecurity = adsでは、必要となる設定項目が大きく異なります。単体のファイルサーバーとして構築する場合と、既存のAD環境に参加させる場合の設定差分を比較します。
スタンドアロン構成(security = user)の[global]
[global]
workgroup = EXAMPLE
security = user
passdb backend = tdbsam
ADメンバーサーバー構成(security = ads)の[global]
[global]
workgroup = EXAMPLE
realm = EXAMPLE.COM
security = ads
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config EXAMPLE : backend = rid
idmap config EXAMPLE : range = 10000-999999
security = adsでは、認証をADドメインコントローラに委ねるためpassdb backend(ローカルのユーザーDB)は不要になる一方、Windows側のSID(セキュリティ識別子)とLinux側のUID/GIDを対応付けるidmap configと、AD参加のためのKerberosレルム(realm)の指定が新たに必要になります。新規に構築する場合、単体のファイルサーバーであればuser、既存のAD環境と連携するのであればadsを選ぶのが基本方針です。shareは既に廃止されているため、古い解説記事などで見かけても現在の構築では使用しません。
ユーザー管理とパスワードデータベース
Sambaのユーザーアカウントは、Linuxのユーザーアカウントとは別に管理されます。passdb backend = tdbsamを使う場合、SambaはLinux上に既に存在するユーザー名と紐づけつつ、SMB認証専用のパスワードハッシュを別のデータベース(/var/lib/samba/private/passdb.tdb)に保持します。これはWindowsのSMB認証プロトコルが要求するパスワードハッシュ形式(NTLMハッシュなど)がLinuxの標準的なパスワードハッシュ(shadowのSHA-512等)と異なるためで、この理由からLinuxのパスワードを変更してもSamba側のパスワードは自動的には変わりません。
$ sudo smbpasswd -a alice # Sambaユーザーを新規追加(要事前にLinuxユーザーが存在すること)
New SMB password:
Retype new SMB password:
Added user alice.
$ sudo smbpasswd -x alice # Sambaユーザーを削除
Deleted user alice.
$ sudo smbpasswd -d alice # アカウントを無効化(一時的にログイン不可にする)
Disabled user alice.
$ sudo smbpasswd -e alice # 無効化したアカウントを再度有効化
Enabled user alice.
この行のこの値に注目: smbpasswdのパスワードはLinux本体のログインパスワードとは別に管理されており、-aで新規追加する際も専用のパスワードを2回入力します。Added/Deleted/Disabled/Enabledという応答から、それぞれの操作が意図通りに完了したかを確認できます。
$ sudo pdbedit -L -v alice
---------------
Unix username: alice
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1234567890-987654321-135798642-1000
Primary Group SID: S-1-5-21-1234567890-987654321-135798642-513
Full Name:
Home Directory: \\fileserver01\alice
HomeDir Drive:
Logon Script:
Profile Path: \\fileserver01\alice\profile
Domain: EXAMPLE
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: Wed, 20 Aug 2026 10:00:00 JST
pdbedit -Lだけだとユーザー名の一覧のみですが、-v(verbose)を付けるとSID・ホームディレクトリ・パスワード最終変更日時などの詳細情報を確認できます。
Windowsのユーザー名とLinuxのユーザー名を別々に運用したい場合はusername mapを使います。たとえばWindows側のドメインユーザー名j.smithを、Linux側の既存ユーザーjsmithに対応付けるといった用途です。
/etc/samba/smb.confの[global]セクション
[global]
username map = /etc/samba/smbusers
/etc/samba/smbusers の書式(Windows側名 = Linux側名)
root = administrator admin
jsmith = j.smith
nobody = guest pcguest smbguest
1行に複数のWindows側ユーザー名を空白区切りで列挙すると、それらすべてが同じLinuxユーザーへマッピングされます。異動や組織変更でWindows側のログオン名だけを変更したい場合にも、Linux側のユーザーやファイルの所有権はそのまま維持できる、実務上便利な仕組みです。
Active Directoryへの参加
既に存在するWindows Active Directoryドメインに、LinuxサーバーをSamba経由で「メンバーサーバー」として参加させる手順を説明します。事前に、DNS解決とKerberos認証が正しく機能している必要があります。
/etc/krb5.conf の設定例
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = true
$ sudo net ads join -U administrator
Enter administrator's password:
Using short domain name -- EXAMPLE
Joined 'FILESERVER01' to dns domain 'example.com'
Joined ... to dns domain ...という出力が表示されれば、ドメインへの参加は成功です。続けて、参加状態の確認と、winbinddの設定を行います。
/etc/samba/smb.confの[global]セクション(winbindd関連)
[global]
winbind use default domain = yes
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config EXAMPLE : backend = rid
idmap config EXAMPLE : range = 10000-999999
template shell = /bin/bash
template homedir = /home/%D/%U
template shellはwinbindd経由で解決されたドメインユーザーに割り当てるログインシェル、template homedirはホームディレクトリのパスのひな形です。%Dはドメイン名、%Uはユーザー名に置換されるマクロで、この例ではドメインごとにホームディレクトリが分離されます。
$ sudo net ads testjoin
Join is OK
$ wbinfo -u
administrator
guest
krbtgt
jsmith
alice
$ wbinfo -g
domain admins
domain users
staff
$ getent passwd jsmith
EXAMPLE\jsmith:*:10000:10000::/home/EXAMPLE/jsmith:/bin/bash
wbinfo -u・wbinfo -gはwinbindd経由で見えるADユーザー・グループの一覧、getent passwdはNSS(Name Service Switch)を経由して、Linuxの標準的なユーザー検索の仕組みからADユーザーが正しく引けるかどうかを確認するコマンドです。getentで結果が返ってこない場合は、/etc/nsswitch.confのpasswd行にwinbindが追加されているかを確認します。
運用・診断コマンド
Sambaの運用でよく使う診断コマンドと、それぞれの実行結果の読み方を確認します。
$ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
構文エラーがある場合は、次のようにエラー箇所と行番号が表示され、Loaded services file OK.は表示されません。
$ testparm
Load smb config files from /etc/samba/smb.conf
Unknown parameter encountered: "raed only"
Ignoring unknown parameter "raed only"
params.c:Parameter() - Ignoring badly formed line in configuration file: raed only = no
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Loaded services file OK.
これはread onlyのタイプミス(raed only)の例です。testparmは未知のパラメータ名を検出すると警告を出しますが、致命的な構文エラーでなければ処理自体は続行される点に注意が必要です。testparm -vを使うと、明示的に設定していない項目も含めた全パラメータの実効値(既定値込み)を確認できます。
$ smbstatus
Samba version 4.19.5
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------
2451 alice staff 192.168.1.50 (ipv4:192.168.1.50:54212) SMB3_11 - AES-128-GMAC
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------
shared 2451 192.168.1.50 Tue Aug 20 10:15:22 2026 JST - AES-128-GMAC
Locked files:
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
--------------------------------------------------------------------------------------
2451 1001 DENY_NONE 0x100081 RDONLY NONE /srv/samba/shared report.xlsx Tue Aug 20 10:16:01 2026
smbstatusの出力は大きく3つのブロックに分かれます。最初のブロックは現在接続中のセッション(誰が・どのマシンから・どのプロトコルバージョンで接続しているか)、2番目は接続中の共有(サービス)ごとの状態、3番目はロックされているファイルの一覧です。Locked filesのセクションを見れば、「誰が・どのファイルを・どのモードで開いているか」が分かるため、他のユーザーがファイルを編集できない、という問い合わせの一次切り分けに使えます。
$ nmblookup -A 192.168.1.50
Looking up status of 192.168.1.50
FILESERVER01 <00> - B <ACTIVE>
FILESERVER01 <03> - B <ACTIVE>
FILESERVER01 <20> - B <ACTIVE>
EXAMPLE <00> - <GROUP> B <ACTIVE>
nmblookup -Aは、指定したIPアドレスに対してNetBIOSステータスを問い合わせ、そのホストが名乗っているNetBIOS名の一覧を表示します。<20>はファイル・プリンタ共有サービスが有効であることを示すサフィックスです。
$ smbclient -L //fileserver01 -U alice
Enter alice's password:
Sharename Type Comment
--------- ---- -------
shared Disk 部署共通フォルダ
alice Disk ホームディレクトリ
printers Printer All Printers
IPC$ IPC IPC Service (Samba File Server 4.19.5)
smbclient -L(list)は、指定したサーバーが公開している共有の一覧を表示します。IPC$は管理用の内部通信に使われる特殊な共有で、通常のファイル共有とは異なります。
$ smbclient //fileserver01/shared -U alice
smb: \> ls
. D 0 Tue Aug 20 10:00:00 2026
.. D 0 Tue Aug 20 10:00:00 2026
report.xlsx A 24576 Tue Aug 20 09:30:00 2026
smb: \> cd subdir
smb: \subdir\> get notes.txt
getting file \subdir\notes.txt of size 512 as notes.txt
smb: \subdir\> put localfile.txt
putting file localfile.txt as \subdir\localfile.txt
smbclientは共有に対話的に接続できるクライアントで、FTPクライアントに似た内部コマンド(ls・cd・get・putなど)でファイルの一覧表示・ディレクトリ移動・ダウンロード・アップロードができます。スクリプトから自動化する場合は-cオプションでコマンドを直接渡すことも可能です。
SambaをADドメインコントローラとして動かしている場合、ユーザー管理にはsamba-toolを使います。
$ sudo samba-tool user create bob P@ssw0rd123 --given-name=Bob --surname=Smith
User 'bob' created successfully
$ sudo samba-tool domain info 192.168.1.10
Forest : example.com
Domain : example.com
Netbios domain : EXAMPLE
DC name : dc01.example.com
DC netbios name : DC01
最後に、Sambaの管理系サブコマンドはnetコマンドの下に体系立てて用意されています。
| サブコマンド体系 | 用途 |
|---|---|
net rpc ... | RPC(リモートプロシージャコール)経由でWindowsサーバー・ドメインを操作する(net rpc infoでドメイン情報表示など) |
net ads ... | Active Directory(LDAP/Kerberos)経由での操作。ドメイン参加(join)や参加状態確認(testjoin)など |
net cache ... | winbindd等が保持するキャッシュの確認・削除(net cache flushでキャッシュを全消去) |
winbinddの名前解決結果が古いままで反映されない、といった問題に遭遇した場合は、net cache flushでキャッシュをクリアしてから再確認するのが定石です。
Linuxクライアントからのマウント
他のLinuxサーバーからSamba(またはWindows)の共有をマウントするには、cifs-utilsパッケージに含まれるmount.cifsヘルパーを使います。まず、パッケージがインストールされていることを確認してください。
$ sudo apt install cifs-utils # Debian/Ubuntu系
Setting up cifs-utils (2:7.0-6ubuntu2) ...
$ sudo dnf install cifs-utils # RHEL/CentOS系
Installed:
cifs-utils-7.0-4.el9.x86_64
Complete!
| マウントオプション | 意味 |
|---|---|
username | 接続に使うユーザー名 |
password | パスワード(コマンドラインや平文でのfstab記述は非推奨、次項参照) |
credentials | ユーザー名・パスワードを別ファイルから読み込ませる指定 |
uid / gid | マウントしたファイルのLinux側の所有者・グループを固定する |
file_mode / dir_mode | マウントしたファイル・ディレクトリに見せるパーミッション |
vers | 使用するSMBプロトコルバージョンを明示的に指定(vers=3.0など) |
iocharset | ファイル名の文字コード変換に使う文字セット(通常utf8) |
パスワードをコマンドラインや/etc/fstabに平文で書くのはセキュリティ上望ましくないため、credentialsファイルに分離するのが標準的な運用です。
/root/.smbcredentials の例
username=alice
password=P@ssw0rd123
domain=EXAMPLE
$ sudo chmod 600 /root/.smbcredentials # root以外が読めないよう制限(パスワードが平文で書かれているため必須。正常時は無出力)
$ sudo mount -t cifs //fileserver01/shared /mnt/win \
-o credentials=/root/.smbcredentials,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,vers=3.0,iocharset=utf8
credentialsファイルのパーミッションを600(所有者のみ読み書き可)に制限しないと、他のユーザーがファイルを開いてパスワードを盗み見できてしまうため、この設定は必須の手順として扱ってください。恒久的にマウントする場合は/etc/fstabに記述します。
/etc/fstab の例
//fileserver01/shared /mnt/win cifs credentials=/root/.smbcredentials,uid=1000,gid=1000,vers=3.0,_netdev 0 0
_netdevオプションは、ネットワークが利用可能になってからこのエントリをマウントするようsystemdに指示するもので、ネットワーク越しのファイルシステムには必須です。これを付けずに再起動すると、ネットワークが上がる前にマウントが試行されて失敗し、システムの起動が遅延・停止する原因になることがあります。
プリンタ共有の設定
Sambaはファイル共有だけでなく、Linuxサーバーに接続されたプリンタ、あるいはCUPS(Common Unix Printing System)で管理されているプリンタを、Windowsクライアントへ共有することもできます。
/etc/samba/smb.confのプリンタ共有設定例
[global]
printing = cups
printcap name = cups
[printers]
comment = All Printers
path = /var/spool/samba
browsable = no
printable = yes
guest ok = no
[printers]という特別なセクション名は、CUPSに登録されている全てのプリンタを自動的に共有対象にする特殊な意味を持ちます。個別のプリンタごとにセクションを分けて細かく権限を設定することも可能です。pathに指定するのは、印刷ジョブが処理されるまでの一時的なスプールディレクトリです。
ログとトラブルシューティング
Sambaのログは既定で/var/log/samba/以下に、デーモンごと・接続元クライアントごとに分かれて出力されます。ログの詳細度はlog levelで制御します。
| log level | 詳細度 |
|---|---|
| 0 | 致命的なエラーのみ。通常運用での最小構成 |
| 1〜3 | 警告・接続の成否など、通常運用で継続的に見ておく範囲 |
| 5〜7 | 個々のSMB操作の詳細。障害の切り分けに有用だがログ量が増える |
| 10 | デバッグレベル。プロトコルの生データに近い情報まで出力され、一時的な調査以外では使わない |
通常運用では1〜3程度、切り分けが難航する場合は一時的に10前後まで上げて調査し、原因が分かったら元の値に戻すのが定石です。ログレベルを上げたまま放置すると、ディスクを圧迫するだけでなく機微な情報がログに残るリスクもあるため注意してください。
「接続できない」という問い合わせを受けた場合の切り分け手順は、次の順序で進めると効率的です。
- ポート疎通の確認:
nc -zv fileserver01 445などで、そもそもネットワーク的に到達できているかを確認する - testparmでの構文チェック: smb.confに構文エラーがないか、意図した設定が実際に読み込まれているかを確認する
- smbclient -Lでの共有一覧確認: サーバー側が想定通りの共有を公開しているかを確認する
- 認証の確認: ユーザー名・パスワードが正しいか、ADメンバーサーバーであればwinbinddが正常に動作しているか(
wbinfo -u)を確認する - Linux側パーミッションの確認: Samba側の設定では許可されていても、Linux側のファイル・ディレクトリのパーミッション(所有者・グループ・モード)で拒否されていないかを確認する
特に5番目の「Samba側で許可しているのに書き込めない」は頻出のパターンです。valid usersやwrite listでSamba側は書き込みを許可していても、実際のディレクトリのUnixパーミッションが読み取り専用(例:drwxr-xr-xで書き込みグループに属していない)であれば、最終的には書き込みが拒否されます。この「2段構えの権限チェック」を意識せずに、Samba側の設定だけを何度も見直して原因が分からなくなる、というのはよくある落とし穴です。
| エラー | 主な原因 |
|---|---|
NT_STATUS_ACCESS_DENIED | 認証は成功しているが、共有・ファイルへのアクセス権限がない(Samba側のvalid usersやLinux側のパーミッションを確認) |
NT_STATUS_LOGON_FAILURE | ユーザー名・パスワードが誤っている、またはアカウントがsmbpasswd -d等で無効化されている |
NT_STATUS_BAD_NETWORK_NAME | 指定した共有名がsmb.confに存在しない、またはタイプミスしている |
ADメンバーサーバー構成でログインできない場合は、まずnet ads testjoinでドメイン参加状態を確認し、次にwbinfo -uでwinbinddがユーザー一覧を正しく取得できているかを確認する、という順序で切り分けます。