[Chapter 6] 6.6 ログオンスクリプト
Date: 1999-11-05T21:34:19Z

| ## Using Samba Robert Eckstein, David Collier-Brown, Peter Kelly 共著 第一版 1999 年 11 月 1-56592-449-5, 注文番号: 4495 416 ページ, 34.95 ドル ハードコピー版(英語)を購入する 目次

| Chapter 6 ユーザ、セキュリティ、ドメイン |

> ## 6.6 ログオンスクリプト

> Samba は Windows のログオンスクリプトを実行する機能を提供している。ログオンスクリプト(.BAT や .CMD)は、ユーザがWindowsドメインにログオンした時にクライアント側で実行されるものである。スクリプトはUNIX側に保存されているが、ネットワーク経由でクライアントに転送されてユーザのログオン時に実行されることに注意すること。このスクリプトは、動的にログオンしたユーザのネットワークの設定を行うのに非常に有用である。スクリプトは Windows 側で実行されるので、Windows でのネットワーク設定コマンドを用いる必要がある。

> NET コマンドについての詳細情報が必要な場合は、O'Reillyのハンドブック: Windows NT in a Nutshell, Windows 95 in a Nutshell, Windows 98 in a Nutshellを推奨する。

> Samba にログオンスクリプトを提供させるには、`logon` `script` オプションを以下のように設定する:

>     [global]
>     	domain logons = yes
>     	security = user
>     	workgroup = SIMPLE

>     	os level = 34
>     	local master = yes
>     	preferred master = yes
>     	domain master = yes
>     	logon script = %U.bat

>     [netlogon]
>     	comment = The domain logon service
>     	path = /export/samba/logon
>     	public = no
>     	writeable = no
>     	browsable = no

> この例では、`%U` 変数を用いていることに注意すること。これにより、ログオンしたユーザ毎に別のスクリプトを実行できる。一般的に、ドメインにログオンした時のユーザやドメインに応じて、利用するログオンスクリプトを変更する。これにより、個別のユーザやクライアントに応じた設定のカスタマイズが可能になる。

> 各ログオンスクリプトは`[netlogon]` 共有に配置する必要がある。例えば、`[netlogon]` 共有は /export/samba/logon で、logon script が jeff.batの場合、ファイルは /export/samba/logon/jeff.bat に配置する必要がある。ユーザがスタートアップスクリプトが設定されているドメインにログオンすると、ユーザにはスクリプトが実行であることを示す小さいダイアログが表示され、MS-DOS ボックス中にスクリプトが生成する出力が表示される。

> このスクリプトは Windows が読み込んで Windows 側で実行されるため、UNIX 形式の復帰文字ではなく、DOS 形式の復帰/改行コードを用いる必要がある点に気をつけること。そのため、スクリプトは DOS や Windows ベースのエディタを使って作成するとよいだろう。

> 以下に、現在時刻をSambaサーバに合わせ、ネットワークドライブ`h` と `i`をサーバ上の共有にそれぞれ割り当てるログオンスクリプトの例を示す。

>     #  Reset the current time to that shown by the server.
>     #  We must have the "time server = yes" option in the
>     #  smb.conf for this to work.

>     echo Setting Current Time...
>     net time \\hydra /set /yes

>     #  Here we map network drives to shares on the Samba
>     #  server
>     echo Mapping Network Drives to Samba Server Hydra...
>     net use h: \\hydra\data
>     net use i: \\hydra\network

> ### 6.6.1 移動プロファイル

> Windows 95 や NT では、個々のユーザが自分の profileを保持することができる。プロファイルには以下のような情報が含まれる: ユーザのディスクトップの外見、スタートメニューに表示されるアプリケーション、壁紙や、その他の項目。プロファイルがローカルなディスクに格納されている場合は、特定のマシン上でのユーザの環境を定義するものになるため、 ローカルプロファイルと呼ばれる。一方プロファイルがサーバ上に格納されている場合は、 ユーザはサーバに接続する各クライアントマシンで、同一のプロファイルをダウンロードすることが可能である。ユーザがマシン間を移動しても、同じプロファイルを利用することが可能なため、これは 移動プロファイルと呼ばれる。これは、デスク上のマシンからログオンしたり、またある時は外出中に携帯マシンからログオンしたりといったユーザがいる場合に特に便利である。 図 6.6 ではローカルプロファイルと移動プロファイルを図示している

> #### 図 6.6: ローカルプロファイルと移動プロファイル

> Samba は domain logons を yes に設定した上で、`logon path` をユーザのホームディレクトリに設定し、`logon home` をユーザのホームディレクトリ内のプロファイルを格納するディレクトリに設定することで、移動プロファイルをサポートできる(monyo訳注、logon pathとlogon home の記述が逆)。このオプションは、ユーザを表す変数を使って、以下の例のように設定されることが多い:

>     [global]
>             domain logons = yes
>             security = user
>     	workgroup = SIMPLE
>     	os level = 34
>     	local master = yes
>     	preferred master = yes
>     	domain master = yes

>     	logon home = \\%N\%U
>     	logon path = \\%N\%U\profile

> 2.0.6 以前の Samba のバージョンでは、Win9X マシンがプロファイルを別の共有に格納することが可能になっていたが、そのためクライアントは `logon path` を設定することができず、ホームディレクトリをマウントするために、「net use /home」と入力することが必要であった。これは2.0.6で改修された。

> ユーザが初めてログオンすると、Windows クライアントは user.dat もしくは ntuser.dat というファイルを作成する。どちらが作成されるかはクライアントで稼働しているOSに依存する。次にクライアントはデスクトップ上を構成する情報である、スタートメニュー、ネットワークコンピュータや プログラムフォルダ内の各フォルダの内容などをアップロードする。ユーザがログオンすると、これらの情報がサーバからダウンロードされ、ユーザが ログオンしているクライアントマシン上で利用可能になる。ユーザがログオフすると、これらの情報は次にユーザからの接続があるまでの間、サーバに書き戻される。プロファイルフォルダとして設定されたディレクトリを見ると、以下のようになっているだろう:

>     # ls -al

>     total 321
>     drwxrwxr-x   9 root  simple    Jul 21 20:44 .
>     drwxrwxr-x   4 root  simple    Jul 22 14:32 ..
>     drwxrwx---   3 fred  develope  Jul 12 07:15 Application Data
>     drwxrwx---   3 fred  develope  Jul 12 07:15 Start Menu
>     drwxrwx---   2 fred  develope  Jul 12 07:15 cookies
>     drwxrwx---   2 fred  develope  Jul 12 07:15 desktop
>     drwxrwx---   7 fred  develope  Jul 12 07:15 history
>     drwxrwx---   2 fred  develope  Jul 12 07:15 nethood
>     drwxrwx---   2 fred  develope  Jul 19 21:05 recent
>     -rw-------   1 fred  develope  Jul 21 21:59 user.dat

> user.dat ファイルはバイナリの設定ファイルであり、Windows によって自動的に作成される。このファイルは Windows 上からプロファイルエディタによって編集することが可能であるが、but they can be somewhat tricky to get correct. Samba はこの機能を Windows NT 5.0ベータ版(monyo訳注:現Windows 2000)までのクライアントに対して提供しているが、比較的新しい機能である。

> Samba ドキュメント中の docs/textdocs/DOMAIN.txt と docs/textdocs/PROFILES.txt に、ログオンスクリプトを用いる際のヒントや方法が記述されている。

> ### 6.6.2 固定プロファイル

> ユーザに 固定プロファイルを利用させることも可能である。これは移動プロファイルの一種であるが、変更することができない。例えば固定プロファイルを用いている場合、ユーザが火曜日にスタートメニューにコマンドを追加したとしても水曜日にログオン下時点では、それはなくなっている。固定プロファイルは、単純に user.dat ファイルを user.man に名前を変更して、UNIX サーバ上で読み込み専用にすればよい。これには、通常管理者がユーザに常に利用してほしい設定を含めておく。管理者が固定的なユーザ設定を作成するときには、以下のようにして行う:

> 1. Samba サーバに読み書き可能なディレクトリを作成する

> 2. `logon` `path` オプションを smb.conf ファイル中に作成し、このディレクトリを指定する

> 3. ディレクトリ構成を移行するために、Windows 95/98 から一般ユーザとしてログオンする。

> 4. その結果作成される user.dat を user.man に名前変更する。

> 5. ディレクトリ及びその内容を読み込み専用にする。

> 固定プロファイルは殆んど用いられない。一方移動プロファイルは Samba が提供する Windows の便利な機能の一つになっている。

> ### 6.6.3 ログオンスクリプトのオプション

> 表 6.10には、通常 Windowsドメインのログオンスクリプトと一緒に用いられるオプションを集めた。

> 表 6.10: ログオンスクリプト関連オプション
> オプション | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `logon script` | 文字列 (DOS path) | DOS/NT バッチファイルの名前 | なし | グローバル
> `logon path` | 文字列 (UNC のサーバおよび共有名) | ユーザの移動プロファイルの位置 | `\\%N\%U\profile` | グローバル
> `logon drive` | 文字列 (ドライブ名) | ホームディレクトリのドライブ名を指定する(NTのみ) | `Z`: | グローバル
> `logon home` | 文字列 (UNC のサーバおよび共有名) | ドメインにログオンしたクライアントに提供するホームディレクトリの位置を設定する | `\\%N\%U` | グローバル

> #### 6.6.3.1 logon script

> このオプションを設定することで、DOS形式の改行コード(復帰、改行コード)の.BAT や .CMD ファイルを、ユーザのドメインログオン後にクライアント上で実行することができる。ログオンスクリプトは`[netlogin]` という名前の共有に格納される必要がある(詳細は section Section 6.5.1 を参照のこと)。このオプションでは、しばしば`%U` や `%m` 変数(ユーザ名やNetBIOS名)を使うことで、ユーザやマシン毎に個別のスクリプトを指定することが可能である。以下に例を示す:

>     logon script = %U.bat

> 上記は、`[netlogin]` 共有にある、ユーザ名に基づいたスクリプトが実行される。接続しようとしているユーザが `fred` であり、`[netlogin]` 共有が /export/samba/netlogin ディレクトリだった場合、スクリプトのパスは /export/samba/netlogin/fred.bat になる。スクリプトはクライアントにダウンロードされて Windows 上で実行されるため、UNIXの改行コードではなくDOS形式の改行コード文字が用いられている必要がある。

> #### 6.6.3.2 logon path

> このオプションは、移動プロファイルの位置を設定する。ユーザがログオンすると、移動プロファイルがサーバからクライアントにダウンロードされ、ログオンしたユーザに適用される。ユーザがログオフすると、プロファイルはサーバにアップロードされ、次回のユーザのログオン時まで格納される。

> ユーザのプロファイルを格納する専用の共有を作成した方が一般的により安全である:

>     logon path = \\hydra\profile\%U

> このオプションに関する詳細は、この章の前半部にある section Section 6.6, Logon Scriptsを参照のこと。

> #### 6.6.3.3 logon drive

> このオプションにより、NTクライアントに対して `logon` `home` オプションで指定したホームディレクトリを割り当てるドライブ名を指定する。このオプションは Windows NTクライアントのみで動作する。以下に一例を示す:

>     logon home = I:

> 利用するドライブ文字は、クライアントマシン上の固定的なドライブ名と重複しないようにする必要がある。デフォルトは Z であり、これは A:, C:, D: 等とは非常に離れているので、無難な設定といえよう。

> #### 6.6.3.4 logon home

> このオプションは、DOS の NET コマンドによって用いられるユーザのホームディレクトリの位置を指定する。ホームディレクトリを Samba サーバ上の共有に設定する例を以下に示す:

>     logon home = \\hydra\%U

> 任意のディレクトリを指定することが可能ではあるが、 `[homes]` サービスと連携して用いるのが便利である。ホームディレクトリは、以下のようにすることでログオンスクリプト中でマッピングできる:

>     NET USE I: /HOME

> Windows NT の「ユーザマネージャ」を使い、ユーザのプロパティにある「ログオン環境」を設定することで、ホームディレクトリを自動的に設定することが可能である。

> ### 6.6.4 その他の接続スクリプト

> ユーザがSambaの共有への接続を完了した後で、Samba サーバ側で共有を利用させる上での事前設定を行うスクリプトを実行させることが可能である。Samba は共有への接続前、および接続後の両方でスクリプトを実行させることが可能である。このオプションは Windows ドメインを利用していない場合でも利用可能である。 表 6.11 にこの設定を行うオプションを示す。

> 表 6.11: 接続スクリプト関連オプション
> Option | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `root preexec` | 文字列 (UNIX コマンド) | 共有に接続する際に`root`権限で実行されるコマンドを設定する | なし | 共有
> `preexec (exec)` | 文字列 (UNIX コマンド) | 共有に接続する際にユーザ権限で実行される UNIX のコマンドを設定する | なし | 共有
> `postexec` | 文字列 (UNIX コマンド) | 共有との接続を解除した際にユーザ権限で実行されるコマンドを設定する | なし | 共有
> `root postexec` | 文字列 (UNIX コマンド) | 共有との接続を解除した際に`root` 権限で実行される UNIX コマンドを設定する | なし | 共有

> #### 6.6.4.1 root preexec

> ログオンコマンドの最初のものは、`root` `preexec`である。このオプションに指定したUNIXコマンドは、共有への接続が完了する前に root 権限で 実行される。このオプションはroot権限が必要な場合だけに用いること。一例をあげると `root` `preexec` はCD-ROMをマウントすることで、クライアントから利用可能にする用途に利用したり、必要に応じて特定のディレクトリを作成したりするのに利用できる。`root` `preexec` オプションが設定されないとデフォルトでは何も行われない。以下に、CD-ROMをマウントするコマンドを設定する例を示す:

>     [homes]
>     	browseable = no
>     	writeable = yes
>     	root preexec = /etc/mount /dev/cdrom2

> このコマンドはrootで実行されることに注意すること。セキュリティを保つためには、users should never be able to modify the target of the `root` `preexec` command.

> #### 6.6.4.2 preexec

> 二つ目のログオン前に実行されるオプションは `preexec` オプションである。これは `exec` と呼ばれることもある。これはSambaが`%u`変数に格納されているユーザ権限で実行するごく普通の非特権コマンドである。一般的な使用方法の一例をあげると、以下のようなロギングの実施があげられる:

>     [homes]
>     preexec = echo "%u connected to %S from %m (%I)\" >>/tmp/.log

> コマンドが標準出力へ出力した内容はユーザからは確認できず、破棄されることに注意すること。`preexec` スクリプトの仕様を検討している場合、Samba から実行させる前に、それが正しく動作することを確認しておくべきであろう。

> #### 6.6.4.3 postexec

> ユーザが共有との接続を切断した時に `postexec` で指定されたコマンドをSamba サーバ上でユーザ権限で実行して必要な後処理を行うことが可能である。このオプションは本質的に`preexec` オプションと同じである。 繰り返しになるが、コマンドが`%u`変数に格納されているユーザの権限で実行されることと、標準出力に出力された内容は無視されることを忘れないこと。

> #### 6.6.4.4 root postexec

> `postexec` オプションに続き、`root` `postexec` コマンドが指定されていれば実行される。このオプションに指定された UNIX コマンドは、共有から切断する前に rootで実行される。このオプションは、root権限が必要な処理を行いたいときに限り使用すること。

> ### 6.6.5 NIS や NFS との連携

> 最後になるが、Samba は NIS や NIS+ と連携する機能も持っている。Samba が動作しているサーバが複数台存在する場合、SMB クライアントが接続するサーバは、実際にそのユーザのホームディレクトリを提供しているサーバであることが望ましいであろう。Samba サーバがファイルをネットワーク越しのNFS 経由で提供し、それをSMBでクライアントに提供するために再度ネットワーク越しの送信が必要となる形は決して望ましい形ではない(最大の難点は、遅くなることである。通常のSambaのパフォーマンスの30%程度になってしまう)。 そのため、Samba に対して、NIS が適切なサーバ名を知っていることと、どのNIS マップを利用すればよいかを伝えるための一連のオプションが存在する。

> 表 6.12 に、ユーザが設定する必要のあるオプションの一覧を示す。

> 表 6.12: NIS オプション
> オプション | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `nis homedir` | 真偽値 | `yes`の場合、ユーザのホームディレクトリのパスを入手するのに /etc/passwdではなくNISを利用する | `no` | グローバル
> `homedir map` | 文字列 (NIS マップ名) | ユーザのホームディレクトリを検索するNISマップを設定する | なし | グローバル

> #### 6.6.5.1 nis homedir と homedir map

> `nis` `homedir` と `homedir` `map` オプションは、NFS、オートマウント、NIS、(Yellow Page)を利用して、UNIX のホームディレクトリが提供しているSambaサーバに適用可能なオプションである。

> `nis` `homedir` オプションを設定すると、ユーザにホームディレクトリを提供するサーバがNISにより検索されるようになる。 `homedir` `map` オプションは、ユーザのホームディレクトリを提供するサーバを検索するのにどのNISマップを利用すれば良いかをSambaに通知する。クライアントはSMBを使った接続を行うので、ホームディレクトリを提供するサーバはSambaサーバである必要があり、また検索を行う関係上NISがインストールされている必要がある。

> 一例を挙げると、ユーザ`joe` が `[joe]`という共有に接続しようとしており、`nis` `homedir` オプションが `yes` の場合、Samba は `homedir` `map` で指定されたファイルを参照して、`joe` のホームディレクトリを検索する。発見すると、Samba はホームディレクトリを保持するサーバ名をクライアントに返却する。そこでクライアントは、 ホームディレクトリを保持する マシンに対して接続を行い、共有にアクセスすることができる。NIS の検索が可能な場合は、以下のように設定する:

>     [globals]
>     	nis homedir = yes
>     	homedir map = amd.map

6.5 Windows ドメイン |  | 7. 印刷と名前解決

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.