- 参考リンク集
- 環境
- インストール
- 設定
- ドメインコントローラとして機能させる
- SambaマシンをNTドメインに参加させる
- 共有フォルダを作成
- LDAPでアカウント管理(まだうまくいってません)
参考リンク集
今のところこれぐらいしかないようです。
- The Official Samba-3 HOWTO and Reference Guide - 本家のリファレンス
- Miracle Linux/技術情報/Samba 3.0解説
- Samba HOWTO 集 - まだ翻訳途中ですが、大体の人のやりたいことは載ってるんじゃないかと思います。
- 主婦電/ラスト・サンバは私に
環境
我が家では、以下のマシン構成となっています。
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共有のディレクトリに配置しておきます。
# /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サーバに共有フォルダを作成して、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 (以下略)
(以下未執筆)