はじめに
Samba関連のメモ
前提条件
Ubuntu22.04 上での Samba の構築メモ
たぶん、UNIXの Samba ならだいたい一緒
単語
- NetBIOS
- WINS
- CIFS
- ファイルサーバ
- プリントサーバ
- WINSサーバ
- ドメインコントローラー
- Active Directory
- メンバーサーバ
- Microsoft ネットワーククライアント
- ブラウジング
- ブラウザマスタ
- ブラウザマスタは、ネットワーク上の他のマシン(ワークステーションやサーバなど)が共有を見つけるために参照する、共有とサービスのリストを保持するマシン
- ローカルマスターブラウザは、サブネットワーク内のすべてのマシンを知り、ドメインマスターブラウザと情報を交換する
インストール
$ sudo apt install samba
サービス
$ sudo systemctl status smbd
$ sudo systemctl status nmbd
$ sudo systemctl status winbindd
ポート
- 137/UDP
- NetBIOS 名前解決、ブラウジング
- 138/UDP
- NetBIOS 名前解決、ドメインログオン
- 139/TCP
- ファイル共有
- 445/TCP
- ファイル共有
設定
読み込まれるファイル
$ cat /etc/samba/smb.conf
元のファイル
$ cat /usr/share/samba/smb.conf
smb.conf の記述
[global]
全体設定、予約されている
- workgroup = ワークグループ名 or ドメイン名
- server role = 動作モード
- AUTO
- securityパラメータの設定に従う
- STANDALONE
- スタンドアローンのサーバ
- MEMBER SERVER
- ドメインのメンバサーバ
- CLASSIC PRIMARY DOMAIN CONTROLLER
- NTドメインのプライマリドメインコントローラ、PDC
- CLASSIC BACKUP DOMAIN CONTROLLER
- NTドメインのバックアップドメインコントローラ、BDC
- ACTIVE DIRECTORY DOMAIN CONTROLLER
- Active Directory のドメインコントローラ
- AUTO
- netbios name = NetBIOS名
- server string = サーバのコメント
- hosts allow = 接続許可ホスト
- hosts deny = 接続不許可ホスト
- guest account = ゲストユーザ名
- map to guest = Never or Bad User or Bad Password
- log file = ログファイル名
- max log size = ログファイルの最大サイズ、KB指定、0は制限なし
- encrypt password = Yes or No
- smb passwrd file = パスワード認証を smbpasswd 方式で行う場合の、パスワードファイルのパス
- unix password sync = Yes | No
- Yes にすると、Sambaパスワードの変更時にLinuxユーザのパスワードも同時に変更される
- passwd program = パスワードコマンドのパス、通常は passwd
- passwd chat = パスワード変更プロセス中に期待するプロンプトと応答
- デフォルト値は、
passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
- デフォルト値は、
- username map = マッピングファイル名 (/etc/samba/smbusers)
- ファイルは、Linuxユーザ名 = Windowsのユーザ名(複数可) の形式で記述
john = John smith = "John Smith" taro = "大阪太郎" root = admin administrator
- ファイルは、Linuxユーザ名 = Windowsのユーザ名(複数可) の形式で記述
- logon script = スクリプトファイル名
- WindowsクライアントがSambaサーバーにログインした時に実行するスクリプト
- スクリプトは、通常、netlogon共有を作成して配置する
- 以下は、logon script = logon.bat に設定する例
/etc/samba/smb.conf
[global] logon script = logon.bat : : [netlogon] comment = Network Logon Service path = /export/smb_share/netlogon guest ok = yes read only = yes : : [shared] : :
/export/smb_share/netlogon/logon.bat@echo off net use s: \\SAMBA-SERVER\shared
- wins support = Yes or No
- wins server = WINSサーバのIPアドレス
- local master = Yes or No
- ローカルマスターブラウザとして機能するかどうか
- os level = 優先度(0-255)
- マスターブラウザとして選ばれる優先度
- 値が高いほど、Sambaサーバがブラウザマスターに選ばれる可能性が高くなる
- os level の値だけがブラウザマスターの選出に影響するわけではなく、マシンの種類(例えば、PDC(Primary Domain Controller)はBDC(Backup Domain Controller)やメンバーサーバよりも優先される)、起動時間(より長く稼働しているマシンが優先される)、同じ os level の場合はアルファベット順に優先される
- Windows 9X = 1、ドメインコントローラー以外のWindows = 16、ドメインコントローラー = 32
- domain master = Yes or No
- preferred master = Yes or No or Auto
- security = USER or SHARE or DOMAIN or ADS
- USER
- クライアントは自身のユーザー名とパスワードを提供し、その資格情報はサーバー上の対応するユーザーとパスワードにより認証される
- デフォルトのモード
- SHARE
- 接続先の共有自体に対してパスワードが設定される
- 各共有には独自のパスワードが存在し、それを知っているクライアントだけが接続できる
- このモードは古く、非推奨
- DOMAIN
- Windowsドメインコントローラーに対してユーザー認証を委譲する。ユーザーはドメインコントローラーに登録された資格情報を使用して認証を行う
- 既存のWindowsドメインにSambaサーバーを統合する際に利用
- ADS
- Active Directoryサービスとの統合
- Active Directoryドメインのメンバーサーバとして機能し、Kerberosを使用して認証を行う
- USER
- passdb backend = smbpasswd or tdbsam or ldapsam
- smbpasswd
- テキスト形式のファイルにユーザ情報を保存する
/etc/samba/smbpasswd
- tdbsam
- Trivial Database
- Samba のデフォルト形式
- バイナリ形式のデータベースファイルにユーザ情報を保存する
/etc/samba/passdb.tdb
- 記述は、
passdb backend = tdbsam:/etc/samba/passdb.tdb
- ldapsam
- LDAPディレクトリサービスを使用してパスワードを管理
- Active Directory との連携で使用
- 複数指定
-
passdb backend = tdbsam:/etc/samba/passdb.tdb,smbpasswd
のように複数を指定可能
-
- smbpasswd
[global] 以外で、共通の定義
- comment = 共有のコメント
- browseable = Yes or No
- writable = Yes or No
- read only = Yes or No
- path = ディレクトリのパス
- force user = ユーザ名
- 共有内に作成するファイルやディレクトリの所有者を、強制的に指定
- force group = グループ名
- 共有内に作成するファイルやディレクトリの所有グループを、強制的に指定
- write list = ユーザ名 or @グループ名
- writable = No or read only = Yes のとき、例外で書き込みができるユーザ、グループ名
- 複数の場合は、スペースで区切って記述
- hide dot file = Yes or No
-
.
が先頭につくファイルを隠すかどうか - 隠すだけでアクセスはできるので注意、アクセス制限は acl で行う
-
- hide files = /ファイル名/
- 隠すファイルを指定
- '/' で区切ってファイルとディレクトリを複数指定可能、? や * のワイルドカードを指定することも可能
- 隠すだけでアクセスはできるので注意、アクセス制限は acl で行う
- veto files = /ファイル名/
- 表示も、アクセスもさせたくないファイルとディレクトリを指定
- '/' で区切ってファイルとディレクトリを複数指定可能、? や * のワイルドカードを指定することも可能
- create mask = ファイルに適用可能なパーミッション、デフォルトは
0744
、論理積(AND)される - directory mask = ディレクトリに適用可能なパーミッション、デフォルトは
0755
、論理積(AND)される - force create mode = 必ずファイルに適用されるパーミッション、デフォルトは
0000
、論理和(OR)される - force directory mode = 必ずディレクトリに適用されるパーミッション、デフォルトは
0000
、論理和(OR)される - valid users = ユーザ名 or @グループ名
- 複数の場合は、スペースで区切って記述
- guest ok = Yes or No
- public = Yes or No
[homes]
ユーザーごとにホームディレクトリの共有を自動的に作成するための特別な設定、予約されている
[printers]
プリンタ共有の設定、予約されている
- print ok = Yes or No
- pritable = Yes or No
[セクション名]
共有フォルダや共有プリンタなどファイル共有設定、[]内の文字列が共有名となる
共有名の末尾が$の共有は、ブラウズしても見えない隠し共有となる、browseable = No と同様
- shared の設定例
/etc/samba/smb.conf
: : [shared] comment = ubuntu22.04 share path = /export/smb_share available = yes read only = no browsable = yes public = yes writable = yes guest ok = yes : :
設定ファイルの検証
$ testparm
ユーザ管理
pdbedit
- ユーザ一覧
pdbedit -L
- ユーザ追加
pdbedit -a NEW_USER
- linux のユーザを追加するわけではない、linuxのユーザとsambaのユーザを関連付ける
- ユーザ削除
pdbedit -x DELETE_USER
- linux のユーザが削除されるわけではない、linuxのユーザとsambaのユーザの関連付けを削除する
smbpasswd
- ユーザ削除
smbpasswd -x DELETE_USER
- linux のユーザが削除されるわけではない、linuxのユーザとsambaのユーザの関連付けを削除する
- ユーザの無効化
smbpasswd -d DISABLE_USER
- linux のユーザが無効化されるわけではない、sambaのユーザが無効化される
- ユーザの有効化
smbpasswd -e ENABLE_USER
- linux のユーザが有効化されるわけではない、sambaのユーザが有効化される
コントロール
smbcontrol
-
smbcontrol 宛先 コマンド
の形式 - 宛先は、smbd or nmbd or winbindd or プロセスID or all
- コマンド
- debug
- デバッグレベルを設定
- ping
- デーモンが動作しているかを確認
- profile
- プロファイリングデータを取得または設定
- shutdown
- デーモンを終了
- reload-config
- デーモンに設定の再読み込みを指示
- debug
smbstatus
- Sambaの現在の状態と、現在の接続状況を表示
samba-tool
- dns
- DNS管理
- domain
- ドメイン管理
- testparm
- 設定ファイルの検証
- user
- ユーザ管理
nmblookup
- 後日
smbclient
- SMBサーバと接続
SMBサーバが192.168.100.100
ユーザ名/パスワードがsmbuser/smbpassword
の場合
$ smbclient --user smbuser //192.168.100.100/share smbpassword
acl
- 後日
net
- 後日
さいごに
かんたんでしたね