|
日本 Samba ユーザ会 (Samba Users Group Japan)
Samba 2.2とLinux (Kernel 2.4) によるWindowsネットワーク構築ガイド2001/12/04 改定 ミラクル・リナックス(株) <基本設定編>Samba(「サンバ」と読む)は、UNIXやLinuxマシンをWindows NT互換のファイルサーバ/プリント・サーバにするオープン・ソース・ソフトウェアだ。 ここではLinuxベースのSamba設定方法を解説し、Sambaサーバを構築していく。 構築手順は以下の通りだ。 (1) Linuxのインストール (1) LinuxのインストールSamba 2.2はLinuxカーネル2.4の上で開発され、いくつかの機能はLinuxカーネル2.4に依存している。 もちろん、Linuxカーネル2.2やFreeBSD、商用UNIXの上でも使用することは可能だが、本記事では以下のカーネル2.4のLinuxディストリビューションを前提に解説する。 ●MIRACLE LINUX V2.0 それぞれのOSインストールの仕方はここでは述べないが、Sambaを利用するための条件としてインストール後以下のチェックを行いLinuxマシン(サーバ側)とWindowsマシン(クライアント側)でネットワーク設定が正しく行われていることを最低限確認して欲しい。 (i) Linuxマシン上で自分自身のIPアドレスに対し、pingを実行する。 (ii) 自分自身にホスト名でping 図1
上記のようにホスト名と外部と通信可能なIPアドレスをマッピングさせる。 (iii) WindowsクライアントへIPアドレスでping (iv) Windowsマシンへ名前でping (2) Samba 2.2日本語版のインストールここではSamba 2.2日本語版のインストール方法について述べる。 先にあげたLinuxディストリビューションはすべて製品パッケージ管理機能としてRPM(Redhat Pakage Manager)を採用している。
図2 Red Hat 7.1の場合は Red Hat 7.2のものは使用できないので、Red Hat 7.1と互換性のあるMIRACLE LINUX V2.0のものを使用すると良い。
もし、エラーが出てしまったら、図3のようにすべてのSambaモジュールを削除してからインストールしてみて欲しい。 日本Sambaユーザ会で配布しているRPMは1つですべてのSambaモジュールが入るようになっている。 図3
もし、先にあげたディストリビューション以外でRPM4ベースのものの場合はSRPMを再ビルドすることでインストール可能なRPMを作成することができる。 図4
新しいRPMが作成される場所もまたディストリビューンによって異なるのでメッセージをよく見てどこに作成されるか確認してから図2のコマンドを実行して欲しい。 例えば、Red Hat Linux 7.0の場合は、/usr/src/redhat/RPMS/i386/に作成される。 これらやRPMに対応していないディストリビューンの場合、自分でSambaをソースからコンパイルすることで対応することは可能であるが、初心者には難しい上、解説にはかなりのページを費やすため今回は省略させて頂く。 (3) SWATを起動Sambaの設定はsmb.confファイルに設定パラメータを記述することで行う。 そうした人のためにSambaには標準でSWATというSamba Web管理ツールが同梱されている。これを使うとWebブラウザからSambaの設定や管理が可能になる。 SWATにはいくつかの起動方法があり、一般的な方法は以下である。
かつてはinetd経由の起動が多かったが、最近のディストリビューンではinetdの替わりにxinetdを採用するようになったため、Red Hat Linux 7.xやTurbolinux 7.0ではxinetd経由で起動する。 Mirale Linux V2.0もxinetd経由で起動可能であるが、セキュリティの観点から暗号化通信可能なwebmin経由の起動を標準設定・推奨している。 inetd,xinetd経由で使用する場合は、通信が暗号化されずrootのパスワードなどが他者から盗聴可能なのでファイアフォール内のイントラネット以外で使用することは推奨しない。 MIRACLE LINUX V2.0は標準でwebminからSWATを利用可能にしてあるが、Red Hat Linux / Turbolinux では標準で利用できないようになっている。 使用できるようにするには以下の2つのコマンドをrootで実行する。
Turbolinuxはこれだけで使用できるようになるが、Red HatのオリジナルSambaの場合はリモートからのSWAT接続はできないので、/etc/xinetd.d/swatファイルの以下の行を削除することも推奨する。
SWATの起動方法はWebブラウザから、Red Hat / Turbolinuxの場合 http://Sambaサーバ名:901/ でアクセスし、MIRACLE LINUX V2.0の場合は、https://Sambaサーバ名:10000/ で一旦Webminにログインしてからサーバメニューの中からSambaを探してSWATのアイコンからログインする。 xinetd経由もwebmin経由でも起動時に認証が必要なので、ユーザ名としてrootを、パスワードとしてrootのものを入力する。
しかし、SWATはWindows版のMSIEかNetscapeで使用するようにして欲しい。 Linux版のNetscape 4.xなどを使用してはいけない。理由はNetscape 4.x以前にはバグがあって、入力データをSWATに正確に送らないため、設定を変更するとsmb.confが壊れてしまうことがあるからだ。 (4) smb.confの設定SWATを使えばディストリビューンやインストール方法によるsmb.confの場所の違いを意識せずにSambaの設定を行うことができる。 ●ホーム(HOME)SWATの表紙を表示する。 ●全体設定(GLOBALS)Samba全体の設定を行う[GLOBAL]セクションの設定ができる。 ●共有設定(SHARES)共有フォルダ毎の設定ができる。 ●プリンタ(PRINTERS)プリンタ共有の設定をする。 ●動作状況(STATUS)
Sambaデーモンの起動・終了ができる。加えて、誰が共有ファイルをアクセスしているか表示される。 ●設定表示(VIEW)
smb.confの内容を表示する。 ●パスワード(PASSWORD)
ユーザの追加・削除、パスワードの変更などを行える。 Sambaを使用するにあたってはSWATの表紙にある「導入編」にあるドキュメントは、必ず目を通しておこう。 ◎セキュリティ・モードの決定Sambaの設定に先だってまず以下の4つのセキュリティ・モードから1つを選ぶ必要がある。 ●security = user (ユーザ認証モード)
共有(ファイル/プリンタ)を個別のユーザを使ってアクセスする。 ●security = domain (ドメイン認証モード)
共有(ファイル/プリンタ)を個別のユーザを使ってアクセスする。 Samba 2.0/2.2では上記security=userまたはdomainでシステム運用することを推奨する。以下に述べる2つのセキュリティ・モードも存在するがセキュリティ強度の問題からあまり推奨しない。 ●security = share (共有認証モード)
共有(ファイル/プリンタ)を決まった固定ユーザを使ってアクセスする。 ●security = server (サーバ認証モード)
共有(ファイル/プリンタ)を個別のユーザを使ってアクセスする。 では、「全体設定 [GLOBALS] 」アイコンをクリックして、設定を開始する。パラメータはたくさんでてくるが、重要なパラメータだけを解説する。
SWATは、最初重要なパラメータまたはデフォルト以外を設定しているパラメータを表示する。 もし、「coding system」と「client code page」の2つのパラメータが設定されていなければ「詳細表示」のボタンを押して忘れずに設定する。この2つを指定していないと日本語ファイル名は使用できない。 ●coding system
Linuxマシン側で扱う日本語ファイル名のコーディングシステムを指定。 ●client code pageクライアントに日本語Windowsを使用する時は、932を必ず指定する。 ●workgroup
Sambaの所属する(あるいはクライアントへ応答する)Windowsワークグループ名/Windowsドメイン名を指定する。 ●server string
「ネットワークコンピュータ一覧」で詳細表示した時、「サーバの説明」と「プリンタの説明」に表示する文字列を指定する。 既定値: server string = Samba %v 例: server string = Samba %v on %h Linux ●security先に説明したセキュリティ・モードを指定する。 ●map to guestUNIXにユーザアカウントがない場合、guest接続を許すかどうか指定する。設定は下記の3 種類がある。
●encrypt passwords
暗号化されたパスワードを使用するかどうか、指定する。 ●socket options
以下を指定することを推奨。 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SWATの入力項目に必要なパラメータを入力したら、「設定」ボタンを押して確定する。
以下に設定例をあげる。 図13
◎共有フォルダの設定方法続いてファイル共有の設定をしてみる。ここでは、全体設定で「security = user (または、domain , server)」を選択したことを前提に解説する。( 「security = share (共有認証モード)」 では、動きが異なる) SWATの「共有設定」のアイコンを押す。次に新規の共有名を入力し、「新規共有作成」のボタンを押すとパラメータの入力画面が出てくる。 ここでは、例として共有名を「企画」として説明する。 ●共有名
SWATで設定する場合は自動変換するので意識する必要はないが、smb.confの中に指定する文字(共有名やコメント)はcoding systemに合わせた日本語コードで記述する必要がある。 ●comment共有名のコメント(説明)を記述する。40バイト以下にすること。 例: comment = 企画の共有フォルダ ●pathこのパラメータは、共有するLinux上のディレクトリを指定する。 例: path = /home/kikaku ●read only またはwriteable更新のある共有は、read only = No またはwriteable = yesとする。 ●create maskSamba によって作成されるファイルに設定されるUNIX のモード・ビットのパーミッションを4桁の8進数で指定する。 ●directory maskSamba によって作成されるディレクトリに設定されるUNIX のモード・ビットのパーミッションを4桁の8進数で指定する。 ●force userクライアントが接続したときのユーザ名は無視され、全てのファイル操作は「強制されたユーザ forced user」によって実行されたことになる。 ●guest onlyguest ok = yes の時、全てのファイル操作は guest によって実行されたことになる。 ●guest ok接続するときにパスワードが不要になり、guestでアクセス可能となる。 ●browseable
net view コマンドの出力や「ネットワーク コンピュータ」の共有一覧にこの共有を見せるかどうか指定する。 既定値: browseable = Yes これらの入力が終わったら、「設定変更」のボタンを押す。これで、Linux側の ディレクトリ が Windows 側に共有されることになる。 今回は、公開範囲を3レベル想定し、以下に3つの例をあげる。 例1)決まったユーザ(グループ)だけが、アクセス可能な共有の設定
/home/kikaku の属性を 775(rwxrwxr-x)とし、同一のUNIXグループだけが更新でき、他のUNIXグループは参照が可能な共有を作成する。(valid usersとinvalid usersで、更にグループ内のユーザを制限可能)
例2)UNIXにアカウントを持つユーザは誰でもアクセス可能な共有の設定
/home/kikaku の属性を 755(rwxr-xr-x)とし、ディレクトリの所有者をkikauというUNIXユーザとする。
例3)誰でもアクセス可能な共有の設定
/home/kikaku の属性を 755(rwxr-xr-x)とし、ディレクトリの所有者をnobodyというUNIXユーザとする。
(5) Sambaの起動SWATを使って設定がうまくいったら、以下のいずれかの方法でSambaを起動する。 ●SWATで起動SWATの状態表示(STATUS)ページを開いて、smbd (ファイル共有デーモン) と nmbd (ネームサービスデーモン) を開始させる。 ●コマンドで起動 rootになって以下のコマンドを実行する。
●システム起動時に起動 OS起動時にSambaが自動的に起動するように以下のコマンドをrootで実行する。
システムをリブートすると起動する。 (6) Linuxユーザーの登録新しくSambaユーザを登録するには、まずLinuxのユーザーを登録する必要がある。 以下はSambaに限った方法ではなく、一般的なユーザーの登録方法だ。
実行例)
MIRACLE LINUX V2.0で標準インストールされるWebminを使用する場合は、「UnixとSambaユーザの自動同期」機能を使用すると、Linuxユーザのアカウント、パスワードを作成するときに自動でSambaユーザの設定をすることが可能だ。 使用方法は、各種サーバ設定画面の「Samba Windowsファイル共有」をクリックするとSambaの設定画面となるので「UnixとSambaユーザの同期の自動化を設定」をクリックし、以下を設定する。
● Unixのユーザが追加されたときに Samba ユーザを追加
|
# smbpasswd -a odagiri New SMB password: <-----パスワードを入力 Retype new SMB password: <-----再度パスワードを入力 |
次に Windows95/98/NT クライアント側の設定について解説する。
基本的に何ら設定を変更することはないと思うが、もしうまく接続できない場合は以下を確認して欲しい。
図14にWindows2000の設定例をあげる。
図14.Windows 2000の設定
Samba サーバの設定で新規にワークグループを構築した場合は、ワークグループ名をサーバで設定したものにあわせると良い。
(注1)
Samba サーバを既存のワークグループに参加させた場合は、クライアント側では何も設定する必要はない。
(注2)
実際には Samba サーバにアクセスするためには、必ずしもワークグループ名が同一である必要はない。
例えば WINS 等で名前解決が出来ていれば UNC名(\\サーバ名\共有名)を直接指定してアクセスしても構わない。
Windowsの「スタート」ボタンをクリックし、「ファイル名を指定して実行」を開き、名前入力の中へ「\\サーバ名」もしくは「\\サーバ名\共有名」を直接指定して実行してみて欲しい。コンピュータの共有一覧やファイル一覧が表示されれば問題ない。
もし、うまくアクセスできなければ以下を参考に調査して欲しい。
Sambaサーバで共有プリンタを使うには、まずLinux上でプリンタを使用できるようにする必要がある。
今回はRedHat 7.1系でよく使われるプリンタ設定ツール(printconf-gui)を使った方法を紹介する。
Miracle Linux V2.0 / Red Hat Linux 7.xの場合、GNOMEの「プログラム」−「システム」−「プリンタ設定」から移動する。
図15.printconf-gui
「新規」ボタンを押してプリンタを作成する。
図16.プリンタを新規作成
Sambaのプリンタでは、「プリンタ・ドライバ」で「Rawプリントキュー」を指定し、プリントフィルタが動作しないようにする。
図17
プリンタが定義できたら適用ボタンを押して、lpdを再起動する。
図18
Sambaの場合は、プリンタ毎の設定は通常必要ない。きめ細かな設定が必要な時のみプリンタ毎に設定する。
なぜなら、OS(の/etc/printcap)に設定してあるすべてのプリンタを、Sambaで公開する設定の「load printers = yes」はデフォルトなので通常指定する必要はないからだ。
最低限SWATの「プリンタ設定」で以下をデフォルト設定がしてあればすぐにプリンタが使用できる。
[printers] path = /var/spool/samba writeable = no guest ok = yes printable = yes |
Sambaのプリンタをクライアントから使用するには、(Linux側にプリンタドライバは必要なく)クライアント側にプリンタドライバが必要だ。
プリンタを設定するには、「ネットワークコンピュータ」からSambaマシンをクリックして、現れるプリンタアイコンをダブルクリックするだけでインストールが開始される。
プリンタドライバの場所を聞いてきますので、プリンタに付属していたものやインターネットで最新のWindows用のものをダウンロードして使用する。
共有の表示時に、クライアントのユーザ名を共有名としてマッピングして表示する機能だ。
たとえば、yamadaというアカウントでSambaマシンをアクセス(ネットワーク・コンピュータをクリック)した場合、UNIX上の/home/yamadaが共有名yamadaとして表示され、また、suzukiというアカウントでSambaマシンをアクセス(ネットワーク・コンピュータをクリック)した場合はUNIX上の/home/suzukiが共有名suzukiとして表示される。
これによってユーザごとの専用のディレクトリを提供し、他人のディレクトリをアクセスするのが防げる。
SWATの「全体設定」で[global]を設定し、「共有設定」でhomesという共有を作成する。
[global] security = USER encrypt passwords = Yes [homes] comment = %Sさん専用の共有です valid users = %S read only = No browseable = No |
Windows ドメインがすでに存在する場合、Samba は,Windows NT / 2000 Workstation のようにWindowsドメインに参加することが可能だ。
ドメインに参加することで、認証を Windows ドメインに統合して、よりシームレスな運用が可能になる。
まず準備として Windows NT/2000 Serverの "サーバマネージャ"(srvmgr.exe) を使ってSambaマシンをWindows NT WorkstatonとしてWindowsドメインに追加する。
その後 Samba マシン上でドメイン参加の手続きを行なう。
参加するWindowsドメインの名前が DOMNAME , PDC(プライマリ・ドメイン・コントローラ) のコンピュータ名が DOMPDC の場合の方法は以下の通りだ。
# service smb stop <-- Samba サーバの停止 # smbpasswd -j DOMNAME -r DOMPDC smbpasswd: Joined domain DOMAIN. <-- 成功したときに表示されるメッセージ |
事前に忘れずに Samba サーバを停止させること。
また、-r オプションでは、必ず PDC のコンピュータ名(上記の例では DOMPDC)で PDC
を指定する必要がある。
エラーになる場合は、PDC のコンピュータ名と IP アドレスを /etc/hosts に記述しておく。
これを確認したら、以下のように security パラメータを DOMAIN にして、Samba サーバを起動する。
[global] security = DOMAIN encrypt passwords = Yes workgroup=DOMNAME # ドメイン名を指定します password server = DOMPDC # ここは、* も指定可能。 |
Samba サーバをWindowsドメインのメンバにしたことで、Windowsドメインにログオンしたユーザであれば Samba サーバにもシームレスにアクセスできるようになる。
そこで更に一歩進んで、Samba サーバ上でのアカウントのメンテナンスを自動化する方法を解説する。
まず、一例として以下のようなスクリプトを /usr/local/sbin に作成する。
スクリプト( /usr/local/sbin/smb-useradd.sh ) の例
#!/bin/sh /usr/sbin/useradd -m $1 mkdir ~$1/public_html # これは、ApacheのためのWebホームディレクトリ |
スクリプト( /usr/local/sbin/smb-userdel.sh ) の例
#!/bin/sh /usr/sbin/userdel -r $1 |
次にSWATでsmb.confに、以下の、add user script と del user script パラメータを設定する。
smb.confの設定
[global] add user script = /usr/local/sbin/smb-useradd.sh %u delete user script = /usr/local/sbin/smb-userdel.sh %u |
これで、Windows ドメインにアカウントがあるが、Samba サーバにはアカウントがないユーザで Windows ドメインにログオン後、Samba サーバにアクセスすると、自動的ユーザが登録されホームディレクトリが表示される。
add user script を設定すると、Windowsドメインで認証されているにも関わらず、Samba サーバに存在しないユーザでアクセスがあったときに、add user script で指定したスクリプトを実行してユーザを自動的に作成することが出来るのだ。
del user script は、同様にユーザがWindowsドメインに存在しなくなったときに自動的に消去するためのスクリプトだ。
これらを活用することで、Windowsドメイン上でのユーザの追加/ 削除のみで、Samba サーバ上に自動でユーザの作成/ 削除を行なうが可能になり、管理コストが大幅に削減される。
Samba 2.2はWinodwsドメインコントローラとして機能することが可能になっている。
まず、SWATの「全体設定」で smb.conf を設定して下さい。
[global] security = USER encrypt passwords = Yes domain logons = Yes domain master = yes wins support = yes local master = yes preferred master = yes os level = 65 workgroup=ドメイン名 logon script=%U.bat |
次に「共有設定」で[netlogon]共有を作成し、以下のように設定する。
[netlogon] path = /home/samba/netlogon writeable = no guest ok = yes |
動作確認のために、Windows クライアント上で 以下のようなログオンスクリプトを記述し,Samba サーバの [netlogon] 共有にユーザ名.batという名前で配置しておく。
net use * \\サーバ名\ユーザ名 pause #動作確認したらこの行は削除しよう |
Windows 9x / Meクライアントの側では,[コントロールパネル] - [ネットワーク]- [Microsoft ネットワーククライアント] のプロパティを以下のように設定する。
図19
また Windowsドメインでの設定と同様に、[コントロールパネル] -[パスワード] の"ユーザ別の設定" タブで,以下のように,ユーザ別の設定" をチェックしておくことで、ユーザプロファイルの利用も可能になる。
図20
Windows 9x / Meはドメイン・ログオンするのにSamba PDC上で何も設定が必要ないが、SambaとWindows NT/2000/XPをドメイン・メンバに加える場合は、PDCマシンの上でドメイン・メンバ・マシンのマシンアカウントを作成する必要がある。
PDCマシン上でrootになり、以下を実行する必要がある。
(#の後が入力内容)
# smbpasswd -a root |
上記は、1度だけ実行し、rootのパスワードを設定する。
Windowsのadministratorから管理をしたい場合は、このユーザも以下のように追加した方が良いだろう。
# useradd administrator # smbpasswd -a administrator |
Sambaのユーザ・アカウントは英大文字は使用せず、英子文字、数字のみで15バイト以下とすること。(日本語も使用不可)
そして、マシン・アカウント用のグループも作成した方がいいだろう。
# groupadd machines |
以下はドメイン・メンバのマシン分実行する。
# useradd -g machines -d /dev/null -s /bin/false マシン名$ # smbpasswd -a -m マシン名 |
useraddの時、マシン名の後に$をつけたものをLinuxユーザとして登録する必要があるので気をつけて欲しい。
(マシン名は英大文字は使用せず、英子文字、数字のみで15バイト以下とすること。日本語も使用不可)
Windows NT/2000/XP上では以下の作業を行う。
(1) Administratorとしてログオンする。
(2) コントロールパネルの「システム」のプロパティを起動し、「ネットワークID」タブの「ネットワークID」のボタンを押す。
図21
(3) 「ユーザアカウントとドメイン情報」の入力で、Samba PDCで設定したrootユーザとrootのパスワード、ドメイン名を入力する。
図22
(4) 「ドメインへようこそ」というダイアログが表示されることを確認する。
(5) Windows XP Professionalの場合、以下の設定を変更しないとドメインログオンできない。
「コントロールパネル」の「管理ツール」から「ローカル セキュリティ ポリシー」を起動し、「ローカル ポリシー」の「セキュリティ」オプションにおいて、「ドメイン メンバ:常にセキュリティ チャネルのデータをデジタル的に暗号化または署名する」を「無効」にする。
図23
これでWindows 2000と同等のレベルになり、問題なくSambaドメインログインできる。
設定を行なったら、Windows クライアントをリブートし、設定したWindowsドメインにログオンする。
ログオンスクリプトが動作すれば、設定は正しく動いている。
Samba サーバが複数台ある時は、一台のサーバをWindowsドメインコントローラとして設定し、残りのサーバは security パラメータを domain にして、認証サーバとしてドメインコントローラの Samba サーバを指定すれば、Windows ドメイン環境のように、一度認証を受ければ、すべての Samba サーバにアクセスできるようになる。
Sambaを使ってWindowsの共有フォルダをLinuxのファイルシステムとしてマウントすることが出来る。
iocharsetパラメータで表示の漢字コードも指定できる。LinuxのktermなどはEUCが標準なのでeuc-jpを指定しよう。
使用方法)
# mount -t smbfs -o username=Windowsユーザ名,password=Windowsパスワード,codepage=cp932,iocharset=euc-jp //サーバ名/共有名 マウント先 |
例)Windows共有 \\odagirixp01\shareddocs にユーザ名Administrator パスワードmiracle で接続し、Linuxの/mnt/smb1 にマウントする。
# mount -t smbfs -o username=administrator,password=admin12,codepage=cp932,iocharset=euc-jp //server1/share1 /mnt/smb1 |
これで、マウントの設定は終わりだ。
実際にマウントされているかどうかを df
コマンドを使って確かめると良い。
マウントされた共有は、通常のファイルシステム同様に cd や ls などのコマンドを使って操作することができる。
図24
しかし、Windows のTCP/IPフィルタリング機能やファイアウォールソフトを使っている場合は接続できないことがあるので気を付けて欲しい。
図25
外部からのファイル共有を受け付けるにはポート139番のTCPポートを受け付けるようにすればよい。
ブラウジングや名前解決で問題が出る場合は、137番のUDPポートと138番のTCPポートを通すようにすると良い。
小田切 耕司