1. Sambaの基礎
1.1. Sambaの概念とアーキテクチャ
1.1.1. Sambaのバージョンと機能
Sambaとは
Microsoft Winodwsのファイル/プリンタ共有・認証機能をUnix/Linux OSに実装したOSSソフトウェアのこと。
Sambaサービスの実現にはSMB/CIFSプロトコルが利用される。
提供できる機能は以下の通り。
- ファイルサーバ機能
- プリントサーバ機能
- WINSサーバ機能
- ドメインコントローラ
- ActiveDirectoryメンバーサーバ
- Microsoftネットワーククライアント
Sambaのバージョン
Sambaには3.0系と4.0系がある。
機能 | Samba3 | Samba4 |
---|---|---|
ドメインコントローラ | NTドメインのドメインコントローラ構築ができる(NTMLv2の使用、WINSサーバによる名前解決、LDAP連携の可能) | ADドメインのドメインコントローラ構築ができる(Keroberos認証、DNSによる名前解決、LDAP内蔵) |
ファイルサーバ | SMB2に対応 | SMB2,SMB3に対応 |
Samba3.0系のデーモンプロセス
Samba3.0系のデーモンプロセスはsmbdとnmbにより提供される。
- smbd
- ファイル/プリント共有とユーザ認証機能
- ポート番号:139/TCP,445/TCP(SMB without NetBIOS)
- nmbd
- ブラウジング/NetBIOS名前解決機能
- ポート番号:137/UDP,138/UDP
- winbindd
- Linuxアカウント/Windowsアカウントを統合的に扱う仕組み
- ポート番号: 445/TCP
Samba4.0系のデーモンプロセス
Samba4.0系のデーモンプロセスは3.0系に加えて以下のプロセスが追加されている。
- samba
- ActiveDirectoryドメインコントローラ機能
- Keroberos認証
- ポート番号:88/TCP・UDP
- LDAP
- ポート番号:389/TCP・UDP,636/TCP
- Global Catalog
- ポート番号:3268/TCP,3269/TCP
- Keroberos認証
- ActiveDirectoryドメインコントローラ機能
1.2. Sambaの設定
1.2.1. Sambaの起動
Sambaのコマンドによる起動
Sambaの起動方法はSystemdのシステムでは以下の通り。
SysVinitを採用したシステムでは以下の通り。
testparmコマンド
testparmコマンドはsmb.confにミスがないかチェックできるコマンド。
オプション | 説明 |
---|---|
-s | 構文チェック後Enter押さなくてもsmb.conf内容を表示 |
-v | 構文チェック後smb.confに記述されていない内容も表示 |
レジストリを使用した起動方法
設定ファイルを極力使用せずに、レジストリを使用して設定を行う方法がある。 この方法によるSambaのメリットは以下の通り。
- Sambaサーバにログインせずにリモートで設定を行える
- Sambaのデーモンの起動にかかる時間が短くなる。これはデーモンは必要なタイミングまでレジストリの設定データを読み込まないため。
- 設定反映についてSambaのデーモンのリロードが不要になる
なお、レジストリベースのSamba設定とはWindowsのレジストリのような、階層を持つキーと値による設定形式のことであり、レジストリベースであっても設定自体は設定ファイル(バックエンド)に保存される。
1.2.2. smb.conf
Sambaサーバの設定はsmb.confファイルで行う。
なお、パッケージからインストールした場合は/etc/samba
、ソースコードからインストールした場合は/usr/local/samba/etc
ディレクトリに格納される。
smb.confは全体設定、共有定義から構成される。
smb.confの構造は以下の通り。
コメントアウトは#
か;
で可能。
# 全体設定
[global]
パラメータ名 = 値
# 共有定義
[homes]
パラメータ名 = 値
[printers]
パラメータ名 = 値
[セクション名1]
パラメータ名 = 値
[セクション名2]
パラメータ名 = 値
セクション | 説明 |
---|---|
global | Samba全体設定 |
homes | 各ユーザのホームディレクトリ |
printes | 共有プリンタの設定 |
共有名 | 指定した共有に適用される設定 |
なお各セクションの真偽値はyes/true/1,no/false/0が使用できる。
globalセクションの設定
globalセクションではsmaba全体の設定を行う。 なお変更後はsambaの再起動が必要となる。
主要な項目は以下の通り。
[global]
# 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 = ホスト
# ファイル共有に使用するポート(プロトコル)の優先順位の設定
smb ports = 445 139 # CIFS優先
# 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 = サイズ
# SambaサーバのログをWindowsのイベントビューアから参照する機能
eventlog list = イベントログ名
# ハッシュ値を用いた暗号化パスワードの使用を設定
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アドレス
homesセクションの設定
homeセクションでは各ユーザのホームディレクトリを指定する。
printersセクションの設定
共有プリンタの設定
共有名セクションの設定
指定した共有に適用される設定(以下例ではshare)を指定する。
[share]
# コメントの指定
comment = コメント
# ブラウジングしたときの表示設定
browseable = Yes | No
# 書き込みの許可設定
writeable = Yes | No
read only = No | Yes
# 共有ディレクトリのパスを指定
path = ディレクトリのパス
# 読み取り不可能なリソースの設定
hide unreadable = yes | no
# 共有内に作成するファイル/ディレクトリの所有者/グループを強制的に変換
force user = ユーザ名
force group = グループ名
# 書き込みが例外許可されるユーザ/グループの指定
write list = ユーザ名 | @グループ名
# 「.」で始まる名前のファイル/ディレクトリを表示しないように隠し属性の適用の指定
hide dot files = Yes | No
# 任意の名前のファイルやディレクトリを表示させたくない場合に指定。「/」で複数指定可能。
veto files = /ファイル名/
# 共有内にファイルやディレクトリを作成する場合のパーミッション設定
############ AND演算 ##########################
# ファイルに適用可能なパーミッション(Default:0744)
create mask = mode
# ディレクトリに適用可能なパーミッション(Default:0755)
directory mask = mode
############ OR演算 ###########################
# 必ずファイルに適用されるパーミッション(Default:0000)
force create mode = mode
# 必ずディレクトリに適用されるパーミッション(Default:0000)
force directory mode = mode
###############################################
# アクセス可能ユーザの指定
valid users = ユーザ名
# Guestユーザのログイン許可の指定
guest ok = Yes | No
public = yes | No
1.2.3. Samba変数
Sambaの設定ファイルsmb.conf
では変数を使用できる。
以下のようなものがある。
変数 | 説明 |
---|---|
%D | 現ユーザーが所属するドメイン/ワークグループ名 |
%L | サーバのNetBIOS名 |
%m | クライアントのNetBIOS名 |
%U | サーバに接続しているユーザ名 |
%G | %Uのプライマリグループ |
%S | ユーザが接続した共有名 |
%u | 共有に接続しているユーザ名 |
%g | %uのプライマリグループ |
%H | %uのホームディレクトリ |
1.3. Sambaの通常メンテナンス
1.3.1. Sambaの制御
Sambaを制御するための手段として構成ファイルに設定を記述する方法(smb.confの編集)とプログラムにメッセージを送る方法(smbcontrol
コマンド)がある。
smbcontrolコマンド
smbcontrolはSambaのプロセス(smbd、nmbd、winbindd)にメッセージを送って制御するためのプログラムのこと。
- [destination] ... メッセージの宛先を指定
- smbd,nmbd,winbindd or allで指定
- [message-type] ... プロセスに送るコマンド
shotdown
:デーモン停止reload-config
:設定ファイルの再読み込みdubug ログレベル
:指定したログレベルに変更debuglevel
:デバックレベルを問い合わせて表示
- [parameter] ... パラメータを必要とするコマンドの場合
smbstatusコマンド
Sambaサーバに接続しているクライアントの確認/サーバの稼働状況を確認できるコマンド。
共有に接続しているクライアントのユーザ名、グループ名、接続元IPアドレスとポートに加え、接続を受け付けたSambaのプロセスIDを表示する。
1.3.2. Sambaのログレベル
[global]セクションで使用されるログ設定に関わる主な設定項目は以下の通り。
項目 | 説明 |
---|---|
log file = ファイル名 | ログファイルを指定 |
log level = レベル | ログレベルの指定 |
max log size = キロバイト | ログファイルの最大サイズの指定 |
debug timestamp = yes/no | ログファイルに時刻を出力するかどうか |
dubug hires timestamp = yes/no | ログファイル二秒単位以上の時刻を出力するか指定 |
debug pid = yes/no | ログファイルにPIDを出力するかどうか |
debug uid = yes/no | ログファイルにUIDを出力するかどうか |
eventlog list = イベントログ名 | SambaサーバのログをWindosのイベントビューアから参照する機能 |
Samba3系からはクラスごとにログレベルを設定できる。 使用できる主なクラスは以下の通り。
- all ... すべてのクラス(デフォルト)
- tdb ... TDBに関するログ
- smb ... SMBプロトコルのデバッグに関するログ
- passdb ... パスワードデータベースに関するログ
- auth ... 認証に関するログ
- winbind ... Winbindに関するログ
例)ログレベルを、パスワードデータベース関連は3、認証関連は4、その他は1に設定する場合
1.4. Sambaのトラブルシューティング
1.4.1. TDB(Trivial Datadase)
TDB(Trivial Datadase)はSamba3.0から使用可能になったバイナリ形式の簡易データベースで様々な情報が格納されている。
smb -bコマンド
smb -b
コマンドはTDBのディレクトリを確認できるコマンド。
出力内容は長いため、通常はgrep
コマンドを使用して必要な設定を確認する。
tdbbackupコマンド
TDBファイルの検査およびバックアップとリストアを行うコマンド。
-v
はTDBファイルの検査と、問題がある場合はバックアップからリストアを行うオプション。
tdbdumpコマンド
TDBファイルの内容表示を行うコマンド。
tdbtoolコマンド
TDBファイルの対話的な管理を行うコマンド。
tdbrestoreコマンド
tdbバックアップからリストアするコマンド。
1.4.2. TDBファイル
Sambaが使用するデータベースファイルにはsercret.tdbとregistory.tdbがある。
secret.tdb
Sambaが認証情報(ユーザー名、パスワードなど)を格納するためのデータベースファイル。
Sambaサーバーがユーザー認証を行う際に使用される。 通常、このファイルには、ユーザーのパスワードハッシュやアクセス許可情報などが保存される。
具体的に保存されるデータは以下のものがある。
- machine/domain (SID)
- LDAPと共に使用される秘密パスワード
- machine 秘密トークン
registory.tdb
Sambaサーバーの設定情報を格納するためのデータベース。 Windowsレジストリのように、Sambaサーバーの構成や設定を管理する。
例えば、共有フォルダの設定、ユーザーのアクセス権限、ネットワークのパラメータなどがこのファイルに保存される。
1.4.3. Sambaパスワードデータベースに問い合わせ
smbpasswdコマンド
Sambaのパスワードデータベースを管理するためのユーティリティ。 パスワードの設定、変更、削除などを行う際に使用する。
pdbeditコマンド
Sambaのパスワードデータベースを直接操作するための高度なユーティリティ。 ユーザーアカウントの追加、削除、属性の変更など、より広範な管理作業が可能。
オプション | 説明 |
---|---|
-Lv | 詳細の表示 |
-a | ユーザの追加 |
-x | ユーザの削除 |
1.4.4. LDAP
LDAPとは
LDAPはネットワーク機器やユーザーID、パスワードを管理するディレクトリサービスの維持やアクセスを行うプロトコルのこと。 堅く言うと、X.500をベースとしたディレクトリサービスに接続するために使用されるプロトコルでDAPを軽量化したものともいえる。
一般的にLDAPは一元管理の認証サーバを構築する際に使用される。 LDAPによりユーザやリソースに関する情報を検索したり管理することができる。
LDIF
LDIFはディレクトリ内の情報を記述するファイル形式のこと。 LDAPサーバにディレクトリ情報を登録、変更する場合に使用される。 記法は以下の通り。
LDIFファイルでは最初の行でエントリの識別名(DN)を記述する。 また、複数のエントリを記載する場合は空行で区切り、コメントは行頭に「#」をつける。
なお、属性値は通常UTF-8のテキストで記載するが、バイナリデータなどの特殊なデータを指定する場合は「属性名::属性値」のようにし、属性値にはBase64でエンコードした値を指定する。
ldbsearchコマンド
LDAPデータベース内のエントリーを検索するためのコマンド。 指定されたクエリやフィルタを使用して、LDAPディレクトリ内の情報を検索する。
例えば、ユーザーアカウントやグループ、機器などの情報を検索するために使用される。
オプション | 解説 |
---|---|
-h |
検索を行うLDAPサーバーのホストを指定します。 |
-b |
検索のベースDNを指定します。 |
-s |
検索のスコープを指定します。デフォルトはbaseで、oneまたはsubを指定できます。 |
-D |
バインドに使用するDNを指定します。 |
-W | パスワードをプロンプトで入力するように求めます。 |
ldbmodifyコマンド
LDAPデータベース内のエントリーを変更するためのコマンド。
LDIFファイルを使用して、エントリーの属性を変更する。 これにより、ユーザーの属性の更新やグループメンバーシップの変更などが可能になる。
オプション | 解説 |
---|---|
-h |
変更を行うLDAPサーバーのホストを指定します。 |
-b |
変更の対象となるエントリーのベースDNを指定します。 |
-D |
バインドに使用するDNを指定します。 |
-W | パスワードをプロンプトで入力するように求めます。 |
ldbeditコマンド
インタラクティブな方法でLDAPエントリーを編集するためのコマンド。
エディタを介してエントリーの属性を直接編集できる。これは、手動でのエントリーの編集が必要な場合に使用される。
オプション | 解説 |
---|---|
-h |
エディットするLDAPサーバーのホストを指定します。 |
-b |
エディットの対象となるエントリーのベースDNを指定します。 |
-D |
バインドに使用するDNを指定します。 |
-W | パスワードをプロンプトで入力するように求めます。 |
ldbaddコマンド
LDAPデータベースに新しいエントリーを追加するためのコマンド。
追加するエントリーの情報を含むLDIFファイルを使用する。ユーザーアカウントやグループ、機器などの新しいエントリーをLDAPディレクトリに追加する際に使用される。
オプション | 解説 |
---|---|
-h |
エディットするLDAPサーバーのホストを指定します。 |
-b |
エディットの対象となるエントリーのベースDNを指定します。 |
-D |
バインドに使用するDNを指定します。 |
-W | パスワードをプロンプトで入力するように求めます。 |
ldbdelコマンド
LDAPデータベースからエントリーを削除するためのコマンド。
削除するエントリーのDNを指定して使用する。 ユーザーアカウントやグループの削除など、LDAPディレクトリからエントリーを削除する際に使用される。
オプション | 解説 |
---|---|
-h |
削除を行うLDAPサーバーのホストを指定します。 |
-D |
バインドに使用するDNを指定します。 |
-W | パスワードをプロンプトで入力するように求めます。 |