トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

samba3

[server] [linux]

参考リンク集

今のところこれぐらいしかないようです。

環境

我が家では、以下のマシン構成となっています。

LAN(192.168.1.0/24) -----------------------------------
                       +----------------+
                       |    router      |
                       +----------------+
                           192.168.1.1
                               |
   +--------+--------+---------+-----------+----------+
   |        |        |                     |          |
  jona     munky    kazz              notepc1   notepc2
 (Linux)   (Win)   (Linux)              (Win)     (Win)
   2        10       102                 ??         ??

ここで、Sambaサーバとなるのはkazzマシンです。jona, munkyはそれぞれクライアントとなります。jonaはLinuxなので、特にWindows共有を利用しなくてもいいので(sftpとかあるので)、まずはmunkyからkazzマシンを見えるようにします。

インストール

 iconv

前提となるソフトウェアとして、iconvユーティリティが必要になります。Linuxであれば、glibcに含まれていますが、バージョンによって EUCJP-MS エンコーディングをサポートしていないかもしれません。サポートされているかどうかを調べるには、下記のコマンドを使用します。

$ iconv -l | grep EUCJP-MS

これで EUCJP-MS// と表示されればOKです。表示されない場合は、sarge や sid のパッケージをインストールするなどして対処してください。あとは apt-get install するのみです。今回は3.0.4を使いたいため、sidのものを借ります。

 Samba

sidの3.0.4をインストールします。

# apt-get install samba-common/unstable samba/unstable swat/unstable \
  smbclient/unstable smbfs/unstable samba-doc/unstable

色々聞かれるので適当に答えます。

Workgroup/Domain Name?
-> KAZZD(とか適当に)
Use password encryption?
-> Yes
Modify smb.conf to use WINS settings from DHCP?
-> No
How do you want to run Samba?
-> daemons

設定

 swatをxinetd経由でアクセス出来るように

下記の内容を/etx/xinetd.d/swatとして保存します。

# default: on
# swat configuration
service swat
{
        disable         = no
        protocol        = tcp
        socket_type     = stream
        user            = root
        wait            = no
        server          = /usr/sbin/swat
        log_on_failure  += USERID
}

また、LAN内からのみアクセスを許すように/etc/hosts.allowに書いておきます。

swat: 192.168.1. 127.0.0.1

追加したswatの設定を読み込ませるため、xinetdをreloadします。

# /etc/init.d/xinetd reload

アクセスできるか確認してみます。URLは"http://<サーバ名>:901/"です。パスワードを聞かれるので、rootのパスワードで認証します。"Welcome to SWAT!"というページが表示されれば成功です。

 Samba自身の設定

先ほどswatを使えるようにしたので、ブラウザからアクセスして"Globals"ボタンをクリックし、以下の項目を設定します。それぞれの意味はHelpを参照してください。
項目 設定する値
dos charset CP932
unix charset EUCJP-MS
display charset CP932
hosts allow 192.168.1. 127.0.0.1
hosts deny ALL

そして、Samba を再起動します。

# /etc/init.d/samba restart

これで、Windowsマシンのワークグループにインストール時に設定したものを指定して、"マイ ネットワーク"からSambaサーバにアクセスできればOKです。

ドメインコントローラとして機能させる

 Sambaの設定

インストールしたSambaサーバをドメインコントローラ(PDC)として動かし、NTドメインを構築してみましょう。これにより、ユーザ認証をドメインコントローラで一元管理することが可能になります。PDCとして機能させるには、以下の項目を設定する必要があります。swatの"GLOBALS"をクリックして、設定してください。(もちろん/etc/samba/smb.confを直接編集でも可)

os level
32 以上の値を設定します。
preferred master
Yes
domain master
Yes
security
USER
encrypt passwords
Yes
domain logons
Yes
passdb backend
tdbsam
admin users
Administratorなど、適当なユーザ名を入力します。これはWindowsクライアントをメインに参加させるときに必要になるものです。通常、クライアントをドメインへ参加させるにはrootアカウントを使用しますが、「ドメイン参加のためにrootを使うのはちょっと...」という時のために設定します。ここでは"Administrator"と設定します。

上記の項目が設定されれば、PDCとして機能するのですが、その他、ドメインを使う上での便利な機能があるので紹介しておきます。

logon home
ドメインにログオンするユーザのホームディレクトリを指定します。つまり、Sambaサーバの共有フォルダをユーザのホームディレクトリとするということです。
logon drive
ドメインログオン時に、ホームディレクトリをネットワークドライブとして接続するドライブレターを指定します。"Z:"や"U:"などを指定します。
logon path
ユーザの移動プロファイルを格納する場所を指定します。
logon script
ユーザがドメインにログオンしたときに実行されるスクリプトを指定します。ログオンスクリプトは、改行がCR/LFとなっているDOSの書式(いわゆる.batファイル)で作成し、NETLOGON共有のディレクトリに配置しておきます。
上記項目を設定したら、Sambaサーバを再起動しておきます。

# /etc/init.d/samba restart

 ユーザアカウントの作成

それでは、テスト用のユーザを作ってみます。最終的なSamba用のアカウントを作るには、LinuxのマシンアカウントとSambaのアカウントを作成する必要があります。まずはLinuxのマシンアカウントから。パスワードなどを聞かれるので、適当に入力してください。

# adduser --shell /bin/false --ingroup users smbtest

次はSamba用。ユーザデータベースバックエンドとしてtdbsamを使用しているので、pdbeditを使用します。これもパスワードを聞かれるので、先のものと同じものを入力します。

# pdbedit -a smbtest -F "Samba test user"

pdbeditの細かい使い方は man pdbedit か pdbedit -h で確認できます。パスワードを変更したい場合は、smbpasswdを使用します。

 ドメイン管理アカウントの作成

admin usersで指定した、ドメインを管理する専用のユーザアカウントを作成します。

# adduser --force-badname --shell /bin/false Administrator
# pdbedit -a -u Administrator -f "Domain administrator"

 マシンアカウントの作成

クライアントマシンをドメインに参加させるには、"クライアントマシン名$"という名前で、Sambaサーバにマシンアカウントを作成しなければなりません。ここでは、まずmachineというクライアントマシン用のグループを作成し、$付きのマシンアカウントを作成します。ちなみに、pdbeditで-mオプションを付けると、クライアントマシン用のアカウントだと認識されます。

# addgroup machines
# adduser --system --force-badname --ingroup machines \
 --shell /bin/false --no-create-home 'munky$'
# pdbedit -a -m munky

これでドメインログオンに必要な準備が整いました。

 Windowsマシンから確認

Windowsマシンを起動して、Administratorでログオンします。デスクトップの"マイ コンピュータ"を右クリックし、"プロパティ"を選択します。"ネットワークID"タブの"プロパティ"をクリックして、ドメインにSambaパッケージをインストールした時に指定したドメイン名を入力します。ドメインのユーザ名とパスワードを聞かれるので、ドメイン管理アカウント名(domainmgr)とパスワードを入力します。しばらく待たされた後に、「xxxドメインへようこそ」というメッセージが表示されれば、ドメインへの参加は成功です。あとは再起動して、ログオン画面で"ログオン先"にドメイン名を入力します。ここでsmbtestユーザでログオンできれば、見事ドメインに参加してNTドメイン上のユーザでログオンしていることになります。

 作成したアカウントにAdministrators(Domain Admins)権限を与える

先ほどの手順でアカウントを作成すると、そのグループはusersになっています。このままではWindows上ではAdministrators権限がないので、アプリケーションのインストールなど、多くのことができません。これを解決するには、対象のアカウントが属するUnixグループをWindowsのAdministratorsグループにマッピングする必要があります。例えば、この場合だと、UnixグループusersをWindowsのDomain Adminsにマッピングします。ただし、これだとusersに属する全てのアカウントにAdministrators権限を与えてしまうことになるので、セキュリティ上あまりよろしくないです。今回はLinuxマシンにAdministratorというグループ(とアカウント)を作っているので、これを使ってみることにします。まず、Domain Admins権限を付与したいユーザをAdministratorグループの一員にします。vigrで/etc/groupのAdministratorの行を編集します。

Administrator:x:1002:
       ↓
Administrator:x:1002:smbuser,root

そして、netコマンドを使用してUnixグループAdministratorをWindowsグループDomain Adminsにマッピングします。

# net groupmap set "Domain Admins" "Administrator"
                   (Windowsグループ) (Unixグループ)

これでWindowsマシン上でsmbuserでログオンするとアプリケーションのインストールなど、特権ユーザでしか出来なかったことが出来るようになります。

SambaマシンをNTドメインに参加させる

ここでは、SambaをインストールしたマシンをクライアントとしてNTドメインに参加させてみます。

 smb.confの修正

まず、Sambaクライアントの設定を下記のようにします。

security
DOMAIN
encrypt passwords
Yes

 マシンアカウントの作成

PDCであるSambaサーバ上でドメインに参加させたいSambaクライアントのマシンアカウントを作成します。

# adduser --system --force-badname --ingroup machine \
 --shell /bin/false --no-create-home 'jona$'
# pdbedit -a -m jona

 ドメインへの参加

最後に、Sambaクライアント上(jona)のSambaサーバを停止させてから、下記のコマンドを実行します。-Uオプションで指定しているのは、ドメイン参加用のアカウントです(%以降はパスワード)

# /etc/init.d/samba stop
# net join KAZZD -U Administrator%Administratorのパスワード

これで、"Joined domain KAZZD."と返ってくれば無事ドメイン参加に成功しています。

最後にSambaクライアントの設定(smb.conf)を以下のように設定します。
項目名 設定する値 意味
workgroup KAZZD 参加するNTドメイン
security DOMAIN 認証方法
encrypt passwords Yes パスワードを暗号化するか
password server kazz 認証サーバ(PDC、BDCを指定する)
以上でドメインへの参加は完了です。sambaを再び起動させましょう。

共有フォルダを作成

では、Sambaサーバに共有フォルダを作成して、Windowsクライアントからアクセスできるようにしてみます。(以下、未執筆)

LDAPでアカウント管理(まだうまくいってません)

SambaとOpenLDAPを使用して、Windowsドメインコントローラを構築します。OpenLDAPに関しては、OpenLDAPのページを参考にして設定してください。ここではsuffix,rootdnなどの設定はすでに済んでいるものとして話を進めます。

 LDAPサーバの設定

Samba用のスキーマファイルを include するように/etc/ldap/slapd.confを修正します。スキーマは/usr/share/doc/samba-doc/examples/LDAP/samba.schema.gzとしてsamba-docパッケージに含まれているので、これを解凍して/etc/ldap/schema/配下にコピーします。

# gunzip /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz
# cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema /etc/ldap/schema

コピーしたものをincludeするように/etc/ldap/slapd.confに下記の行を追加します。

include         /etc/ldap/schema/samba.schema

また、Sambaで使用するアカウントとLinuxのアカウントに対するアクセス制限を行うようにします。

# Samba account
access to attr=SambaLMPassword
     by dn="cn=admin,dc=kazz,dc=homeunix,dc=org" write
     by self read
     by anonymous auth
     by * none

access to attr=SambaNTPassword
     by dn="cn=admin,dc=kazz,dc=homeunix,dc=org" write
     by self read
     by anonymous auth
     by * none

上記の設定が完了したら、LDAPサーバを再起動します。

# /etc/init.d/slapd restart

 Sambaの設定

今度はSamba側で、パスワードの格納先がLDAPであり、認証するときはこれを参照するようにsmb.confを修正します(今回はswatから設定します)。具体的には以下の項目です。

passdb backend
LDAPに格納したアカウント情報を使用するように、ldapsam:ldap://<LDAPサーバ名>と指定します。今回はSambaとLDAPサーバが同じなので、"ldapsam:ldap://localhost"と指定します。
ldap suffix
slapd.confで指定したものと同じものを指定します。ここでは"dc=kazz,dc=homeunix,dc=org"です。
ldap machine suffix
マシンアカウント情報を格納するLDAPツリーの位置を指定します。ldap suffixパラメータを基準とした相対位置を指定します。アカウント情報はou=Computersの下にあるので、"ou=Computers"と指定します。
ldap user suffix
アカウント情報を格納するLDAPツリーの位置を指定します。ldap suffixパラメータを基準とした相対位置を指定します。アカウント情報はou=Peopleの下にあるので、"ou=People"と指定します。
ldap group suffix
グループ情報を格納するLDAPツリーの位置を指定します。ldap suffixパラメータを基準とした相対位置を指定します。アカウント情報はou=Groupの下にあるので、"ou=Group"と指定します。
ldap admin dn
slapd.confのrootdnと同じ識別子を指定しておきます。ここでは"cn=admin,dc=kazz,dc=homeunix,dc=org"です。
ldap passwd sync
SambaとLDAPを連携させる際に、Sambaで管理するパスワード(Windowsユーザ用のパスワード)とLinuxのアカウントのパスワードを同期させるかどうかを指定します。ここでは"Yes"と設定します。

なお、SambaからLDAPサーバにアクセスする際には、LDAPの管理者アカウントで接続する必要があるので、下記のコマンドを実行しておきます。

# smbpasswd -w rootpwで指定しているパスワード

以上、完了したらSambaを再起動しておいて下さい。

 smbldap-toolsのインストール

Samba-LDAPの連携を行うために、smbldap-toolsというツールを使用します。もちろんインストールはapt-getで。

# apt-get install smbldap-tools

 smbldap-toolsの設定

自分の環境に合わせて、smbldap_conf.pmの設定を行います。

$SID

先ほどのsmb.confの設定が完了した状態で、netコマンドによってドメインSIDを取得し、$SIDのパラメータとして設定します。

# net getlocalsid KAZZD
SID for domain KAZZD is: S-1-5-21-3612735126-3729275470-3986820287

$slaveLDAP、$slavePort、$masterLDAP、$masterPort

SambaサーバとLDAPサーバは同じマシンなので、デフォルトのままでOK。

$ldapSSL

SSLは使用しないので、"0"を指定します。

$suffix

smb.confのldap suffixに指定した値を設定します。ここでは、"dc=kazz,dc=homeunix,dc=org"です。

$usersou、$computersou、$groupsou

"ldap user suffix"、"ldap machine suffix"、"ldap group suffix"に設定した識別子を利用するので、それぞれPeople、Computers、Groupを設定しておきます。q()で囲まれた_USER_の部分を修正します。

$hash_encryptの設定

Linux用のパスワードの暗号化方式を指定します。Linuxでは通常はMD5形式なので、"MD5"を設定しておきます。

$binddn

smb.confのldap admin dnに設定した管理者の識別子を設定します。ここでは"cn=admin,$suffix"です。

$bindpasswd

LDAPのslapd.confのrootpwに設定したパスワードを指定します。ただし、プレインテキスト形式のみが許されるので、slapd.confにMD5形式などで設定しているとしても、プレインテキスト形式で設定してください。

$_userLoginShell

ユーザを追加する際のデフォルトログインシェルを設定します。

$_userHomePrefix

ユーザを追加する際のデフォルトホームディレクトリのPREFIXを設定します。例えば、このパラメータに/home/を指定した場合、ユーザ takedaのホームディレクトリは、/home/takedaとして作成されます。

$_defaultUserGid

ユーザを追加する際のデフォルトのグループIDを設定します。私は"100"(users)を指定しました。

$_defaultComputerGid

マシンアカウントを追加する際のデフォルトのグループIDを設定します。私は"1000"(machines)を指定しました。

$_userSmbHome、$_userProfile

ユーザを追加したときに、Windowsユーザのデフォルトホームディレクトリ、および移動プロファイルの格納場所として設定されます。私は下記で設定しました。

項目
$_userSmbHome \\\\KAZZ\\homes
$_userProfile \\\\KAZZ\\profiles

$_userHomeDriveの設定

メインログオン時にホームディレクトリを割り当てるドライブレターを指定します。私は"Z:"にしました。

$smbpasswdのパスの設定

デフォルトでは、/usr/bin/smbpasswdに設定されています。Debianのパッケージを使ってインストールしていればこのままでよいでしょう。Debianでない方は which smbpasswd で調べてください。

$mk_ntpasswdのパスの設定

/usr/local/sbin/配下にコピーした場合はそのままでOKです。

以上でsmbldap-toolsの設定は終わりです。設定する項目が多く、面倒かもしれませんが一旦設定してしまえば、後はこのツールだけでアカウントが管理出来るようになります。

 LDAPへの移行

先ほどのsmbldap-toolsの設定が完了すれば、SambaとLinuxのアカウントをLDAPで管理することが可能です。なお、すでにLinuxのアカウントをLDAPで運用している場合は、一度データベースを初期化し、後でアカウントをまとめて登録する方が混乱が少なくて済むと思います。

smbldap-populate.plの実行

まず、Sambaを使用するために必要なユーザとグループをLDAPに登録するために、smbldap-populdate.plを実行します。

# /usr/local/sbin/smbldap-populdate.pl

下記のように出力されればOKです。これで、LDAPツリーのトップオブジェクトであるdc=kazz,dc=homeunix,dc=org以下、必要な情報をLDAPに登録されました。

adding new entry: dc=kazz,dc=homeunix,dc=org
adding new entry: ou=People,dc=kazz,dc=homeunix,dc=org
adding new entry: ou=Group,dc=kazz,dc=homeunix,dc=org
adding new entry: ou=Computers,dc=kazz,dc=homeunix,dc=org
adding new entry: uid=Administrator,ou=People,dc=kazz,dc=homeunix,dc=org
adding new entry: uid=nobody,ou=People,dc=kazz,dc=homeunix,dc=org
(以下略)

(以下未執筆)