LPICひたすら暗記（3日目）

#Sambaの学習

##sambaの概要
・Samba4ではActive Directoryでドメインコントローラになれる
・Sambaによるドメコン「NTドメイン」「ADドメイン」の2種
・Samba4で、Windowsの共有フォルダやSambaが提供する共有ディレクトリにアクセスするコマンド
　①smbclient　②mount.cifs　③mount -t cifs

```ruby:書式
　 smbclient [オプション] //ホスト名/共有名
   smbclient //ホスト名/共有名 [オプション]　　　
```

|デーモン|説明|ポート|
|:-----------:|:------------:|:------------|
|-L ホスト名/ --list=ホスト名|指定したホストで利用可能な共有リソースを一覧表示|
|-N|認証を行わない|
|-U ユーザー名/--user=ユーザー名|接続するユーザーを指定|

・Samba3デーモン↓

|デーモン|説明|ポート|
|:-----------:|:------------:|:------------|
|smbd|ファイル、プリンタの共有、ユーザー認証等Sambaの基本的な機能|139/tcp,445/tcp(ダイレクトホスティングSMBサービス使用時)|
|nmbd|ブラウジング機能、WINSサーバーなどの機能を提供|137/tcp 138/tcp|
|winbindd|NSSを利用しWindind（Samba側からWindowsユーザの情報を利用可能に）と呼ばれる機能を提供|なし|

・Samba4がドメコンの場合は「samba」プログラムに統一。必要に応じて、上記から各機能が呼び出される。
・samba3,samba4の相違↓

|機能|samba3|samba4|
|:-----------:|:------------:|:------------|
|ドメインコントローラー|NTドメイン/認証はNTLmv2/Einsサーバーによる名前解決/LDAP連携可能|Actieve Directory・認証はKerberosを使用/DNSによる名前解決/LDAPを内蔵|
|ファイルサーバ|SMB2に対応|SMB2,SMB3に対応|

・NTLMv2認証:チャレンジレスポンス方式
・Kerberos認証：1つの認証でユーザが複数台のサーバへアクセスすることが出来る
・WINS：名前解決にNetBIOS名とIPアドレスを対応付ける
・SMB3：SMB2に加えて、パフォーマンスの改善や暗号化などの機能が追加


■Samba4での管理ツール：```samba-tool```

```ruby:書式
　 samba-tool サブコマンド　　　
```

|サブコマンド|説明|
|:-----------:|:------------:|:------------|
|dns|DNS管理を行う|
|domain|ドメイン管理を行う|
|testparm|設定ファイルの構文チェックを行う|
|user|ユーザー管理を行う|

■sambaの主要なデーモン(smbd,nmbd,winbindd)にメッセージを送るプログラム：```smbcontrol```

```ruby:書式
　 smbcontrol [対象] [メッセージタイプ]　　　
```

|対象|説明|
|:-----------:|:------------:|:------------|
|all|smbd,nmbd,windinddの全プロセスにブロードキャスト|
|<デーモン名> or <PID>|上記のいずれか指定されたデーモンpdiファイルに記載されたプロセスID,または直接指定したPIDみメッセージ送信|

|メッセージタイプ|説明|
|:-----------:|:------------:|:------------|
|clese-share|指定した共有をクローズ　※対象はsmbdのみ|
|reload-config|指定したデーモンに設定の再読み込みをさせる|
|kill-client-ip|指定したIPアドレスのクライアントを切断※対象はsmbのみ|
|ping|指定した対象にpingし応答が来た対象のPIDを表示|

■Sambaの設定ファイル「/etc/samba/smb.conf」には3つの特別なセクションである[global]、[homes]、[printers]セクションと、個々の共有の設定を行う任意の名前のセクションがある。

■[homes]、[printers]、任意の名前のセクションで使用される主な設定項目　↓

|設定|説明|
|:-----------:|:------------:|:------------|
|comment =コメント|ブラウジングした際に表示される説明|
|path =ディレクトリ|共有ディレクトリのパスを指定|
|writable = yes/no|書き込みの許可か否か|
|read onle = yes/no|読み取り専用するか否か|
|rwrite list = ユーザ名/@グループ名|書き込み拒否でも書き込みができるユーザを指定|
|valid users=ユーザ名/@グループ名|アクセス可能なユーザ|
|group ok = yes/no|ゲストログインの許可するか。Yesの場合はパスワードなしでゲストとしてログオン|
|hide files = /ファイル名/|表示させたくないファイル、ディレクトリ（アクセス可能）|
|veto files = /ファイル名/|表示させたくないファイル、ディレクトリ（アクセス不可）|
|force user =ユーザー名|認証したユーザーに関係なく。共有内では指定したユーザーの権限で作業を行わせる|
|force group =グループ名|認証したグループに関係なく。共有内では指定したグループの権限で作業を行わせる|

■共有プリンタの設定：```[printers]セクション```

```ruby:書式
　 printtable = yes
   print ok = yes　　
   のいずれか一方
```

・Windowsクライアントにプリンタドライバがインストールされていない場合、自動的にドライバをダウンロードさせる


■[global]セクションで使用される全般設定に関わる主な設定項目

|設定項目|説明|
|:-----------:|:------------:|:------------|
|workgroup = ワークグループ名|所属するワークグループを指定|
|server string =文字列|ブラウジングの際に表示されるサーバーの説明|
|netbils name = NetBios名|SambaサーバのNetBios名を指定|
|brousable = yes/no|ブラウジングの際に表示するかどうか。表示されていなくてもアクセス可能|
|wins support = yes/no|Sanmba差0ば0をWinsサーバーとして動作するか|
|wins server = IPアドレス|WINSサーバーが存在する場合、IPアドレスを指定|
|hide dot files = yes/no|.で始まるファイルを隠すか|
|logono script = ファイル名|ログオン後に実行されるスクリプト|

■[global]セクションで使用される認証設定に関わる主な設定項目

|設定項目|説明|
|:-----------:|:------------:|:------------|
|security = user/domain/abs|認証方式を設定 user=ユーザーレベル domain=NTドメコンを使用し認証 ads=ADドメコンを使用し認証|
|passdb = 認証方式|Samba3.0以降 security=useの場合smcpasswd,tdbsam.ldapsamなどの認証方式を指定|
|smb passwd file = ファイル名|security = userの場合 smbpasswdで認証を行う際のパスワードファイルの指定|
|password server = NetBiOS名/IPアドレス|security=[ads/domai/server]の場合、認証を別の差0ば0で行う際のパスワードサーバーの指定|

Samba2.2系のユーザ管理の特徴
・ユーザ認証：smbpasswd方式
・パスワード管理：テキスト形式
・パスワードファイルの指定：設定項目「smb passwd file」
・ユーザ管理：smbpasswdコマンド

Samba3.0系からのユーザ管理の特徴
・ユーザ認証：複数方式から選択（後述）
>・smbpasswd
　テキスト形式のパスワードファイルを使用した認証方式
・tdbsam
　バイナリ形式のデータベースを使用した認証方式
・ldapsam
　LDAPサーバを使用した認証方式

・認証方式の指定：設定項目「passdb backend」
・ユーザ管理：pdbeditコマンド

■Sambaユーザの管理：smbpasswd
 ・パスワードファイル：/etc/samba/smbpasswd」
 ・「/etc/samba/smb.conf」の項目「smb passwd file」でパスワードファイルを変更可能

```ruby:書式
　 smbpasswd [オプション] [Sambaユーザ名]
```

|オプション|説明|
|:-----------:|:------------:|:------------|
|-a|Sambaユーザーの作成|
|-d|Sambaユーザーの無効化|
|-e|Sambaユーザーの有効化|
|-x|Sambaユーザーの削除|

■Samba3.0系から：pdbedit
・smbpasswdを含むいろいろな認証方式を使用することが出来る
・デフォルトはバイナリ形式のデータベースファイルを扱うtdbsamという認証方式（その他にLDAP認証方式のldapsam）

```ruby:書式
　 smbpasswd [オプション] [Sambaユーザ名]
```

|オプション|説明|
|:-----------:|:------------:|:------------|
|-L|Sambaユーザーの一覧表示|
|-a|Sambaユーザーの追加|
|-x|Sambaユーザーの解除|

■[global]セクションで使用されるログ設定に関わる設定項目

|メッセージタイプ|説明|
|:-----------:|:------------:|:------------|
|log file = ファイル名|ログファイルを指定|
|log level =　レベル|ログレベルを指定（数字が大きいほど詳細）|
|max log size =　サイズ|ログファイルイルの最大サイズを指定。ファイルが制限値を超えた場合は、あたらいいログファイルを作成。0指定で無制限|


■パスワードに関わる主な設定項目：```[global]セクション```

|メッセージタイプ|説明|
|:-----------:|:------------:|:------------|
|user map = ファイル名 |ユーザー名のマッピング情報を格納したファイル指定|
|guest account = ゲストユーザー名|ゲスト認証を許可する場合、ゲストのユーザーのユーザー名を指定|
|map to guest = Never/Bad user/Bad Password|Sanmaユーザーとして認証できなかった場合の対応を指定 Never:ゲスト認証を許可しない　Bad User 存在しないユーザーの場合はゲスト認証（存在するユーザーでパスワードミスはゲスト認証不可）　Bad Password　パスワードのミスの場合はゲスト認証
|encrypt passwords = yes/no|暗号化されたパスワードを使用するか否か|
|unix password sync = yes/no|LinuxとSambaのパスワードを同期させるか否か|
|passwd program = プログラム名|samba側でパスワードを変更した際に実行するプログラムを指定（unix password syncが有効な場合のみ）|
|passwd chat = 文字列|passwd program実行時の応答内容を指定|
|||

■smbaの設定ファイル「/etc/samba/smb.conf」の構文チェック


```ruby:書式
　 testparm [オプション] [設定ファイル]
```

|オプション|説明|
|:-----------:|:------------:|:------------|
|-s|構文をチェックした後、Enterキーを押さなくてもsmb.confの内容を表示|
|-v|構文をチェックした後、smb.confに記述されていない（未定義）のパラメータも表示|



■バーミッションの設定

|メッセージタイプ|説明|
|:-----------:|:------------:|:------------|
|create madsk =　値|ファイルに適用可能なパーミッションを指定。この値とDOSノゾクセイヲUNIXの属性に変換した値との倫理積がパーミッションをなる。属性をしよする場合に使用。デフォルト0744|
|force create mmode|必ずファイルに適用されるパーミッションをしてい。皓の値と、create maskで算出された値との倫理和が最終的なパーミッションとなる。属性を追加する場合に使用。デフォルト0000|
|directory mask = 値|ディレクトリに適用可能なパーミッションを指定。この値と、DOSの属性をUNIX属性に変換した値との倫理積がパーミッションとなる。属性を削除したい場合に使用　デフォルト0755|
|force directory mode =　値|必ずファイルに適用されるパーミッションを指定。この値とDirectory maskで算出された値との倫理和が最終的なパーミッションになる。属性を追加する場合に使用。デフォルト0000|

>共有内のディレクトリのパーミッションは次のように決定されます。
>1.DOSのアクセス許可属性からUNIXのパーミッションにマッピングされる

>2.上記1の値とdirectory maskの値の論理積を求める
論理積は、両方が1の場合のみ1(いずれかが0の場合は0)となりますので、属性を削除したい場合に使用します。デフォルトは0755です。

>例）上記1の値が770、directory maskの値が755の場合
rwx rwx rwx
111 111 000 = 770
111 101 101 = 755
-----------------------
111 101 000 = 750
自分以外のユーザの書き込み権が削除されます。

>3.上記2の値とforce directory modeの値の論理和を求める
論理和は、いずれかが1であれば1となりますので、属性を追加する場合に使用します。この値がファイルの最終的なパーミッションの値になります。デフォルトは0000です。

>例）上記2の値が750、force directory modeの値が0111の場合
rwx rwx rwx
111 101 000 = 750
001 001 001 = 0111
--------------------
111 101 001 = 751
全てのユーザに実行権が与えられます。

■ホストのアクセス制御

|書式|説明|
|:-----------:|:------------:|:------------|
|hosts allow = IPアドレス|接続許可|
|hosts deny = IPアドレス|接続拒否|

・複数のホストの指定は[,][スペース][タブ]で区切る。
・allowに指定されないホスト＝拒否
・denyに制定されないホスト＝許可
・矛盾＝Allowが優先

■winbind機能：SambaサーバはWindowsドメインの既存のユーザ情報を利用することが出来る

＜認証＞
1. Sambaサーバへのアクセス時、Windowsクライアントにログオンしたユーザ名/パスワードがSambaに送信

2. Sambaは認証情報⇒ドメインコントローラに問い合わせ、ドメインコントローラが認証作業を実施。

3. 認証に成功⇒SambaはUIDをWinbind機構に問い合わせます。Winbind機構はWindowsユーザとLinuxユーザのマッピング情報のデータベースを検索し、存在しない場合は新たにLinuxユーザを作成します。
作成されたLinuxユーザの情報は「/etc/passwd」ファイルなどには格納されないため、SambaはNSS(Name Service Switch)を利用してユーザ情報を取得。

4. 作成されたLinuxユーザのUIDを使用して、Sambaの共有上のファイルへアクセスする。

＜手順＞
1. Windowsドメインに参加

2. NSSの設定ファイル「/etc/nsswitch.conf」にwinbindを追加
「/etc/passwd」ファイル、「/etc/group」ファイルの他にwinbindからもLinuxユーザーの情報を取得できるように、以下の行にwinbindを追加します。

passwd: files winbind
group: files winbind

3. 「smb.conf」の[global]セクションにWinbind関連の設定を記述する。
以下はWinbind関連の主な設定項目です。

・Sambaサーバをドメインメンバーとする設定項目「security」の値に「domain」または「ads」を指定
・Winbind機能を利用する際に「idmap config」の設定は必須
・IdmapはWindowsユーザとLinuxユーザのマッピングを行う機能
　winbinddはLinuxユーザを作成する際、「idmap config * : range」で指定された範囲の最小値からUIDおよびGIDをユーザに割り当てる。
「idmap config * : backend」は、マッピング情報の格納先であるIdmapバックエンドを指定

security = ads (またはdomain)　
idmap config * : backend = tdb
idmap config * : range = 10000-19999

4. Winbind機構を起動する。(プロセス名はwinbindd)

■マスターブラウザの検索、ワークグループ内のホストの検索、NetBIOS名の問い合わせなどを行う：```nmblookupコマンド```

```ruby:書式
　 nmblookup [オプション] NetBIOS名|IPアドレス|ワークグループ名
```

|オプション|説明|
|:-----------:|:------------:|:------------|
|-M|マスターブラウザの検索|
|-A|引数をIPアドレスとみなす。指定されたIPアドレスのMACアドレスやNetBios名などを表示|


■マスターブラウザ：ブラウザリスト（Windowsネットワーク内にあるコンピュータのリスト）を管理するコンピュータのことです
・どのホストがマスターブラウザになるかは、OSの種類による優先度(OSレベル)などで変わる

・[global]セクションにて使われるマスターブラウザ関連の主な設定項目

|設定項目|説明|
|:-----------:|:------------:|:------------|
|os level=数値|ブラウザ選定時に宣言する優先度を指定（数値が大きいほど優先度は高い）|
|local master = yes/no|ブラウザ選定に参加するか否か|
|preferredmaster = yes/no|ブラウザ選定を要求するか否か|