2011年4月21日木曜日

UbuntuでLDAP+SAMBA

slapd.confを使用しない
smbldap-toolsを使用しない
Sambaのドメインコントローラは smb.conf に ldapsam:editposix = yes と指定してで作る
ldapsam:editposix = yes を使う場合、winbind は必須

DNSは使わない。名前解決はhostsファイルで行う。

以下を参照にやってみた。ありがとうございます。
nofuture.tv - SambaとOpenLDAPでドメインコントローラを作ってみるメモ
http://www.nofuture.tv/index.rb?SambaLdapMemo

できた。


以下、上記サイトを見たら読む必要なし。



OpenLDAPのインストール


OpenLDAPのインストール
$ sudo apt-get -y install slapd ldap-utils


スキーマファイルを登録
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"


$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"


$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"


OpenLDAPの設定


パスワードの作成
$ slappasswd -h "{MD5}"
New password:
Re-enter new password:
{MD5}X03MO1qnZdYdgyfeuILPmQ==

入力例
password
出力例
{MD5}X03MO1qnZdYdgyfeuILPmQ==

バックエンドの設定ファイルを作成
$ vi backend.ldif



# Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb

# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=example,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {MD5}X03MO1qnZdYdgyfeuILPmQ==
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read




バックエンドの設定を登録
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"

adding new entry "olcDatabase=hdb,cn=config"


フロントエンドの設定ファイルを作成
$ vi frontend.ldif



dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: example.com
dc: example

dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: 

dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

dn: ou=groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: ou=idmap,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: idmap

dn: ou=computers,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: computers




フロントエンド設定を登録
$ sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f frontend.ldif

Enter LDAP Password:
adding new entry "dc=example,dc=com"

adding new entry "cn=admin,dc=example,dc=com"

adding new entry "ou=users,dc=example,dc=com"

adding new entry "ou=groups,dc=example,dc=com"

adding new entry "ou=idmap,dc=example,dc=com"

adding new entry "ou=computers,dc=example,dc=com"

パスワードを聞かれるのでpasswordと答える

Sambaのインストール


Sambaのインストール
$ sudo apt-get -y install samba samba-doc winbind

samba-docパッケージに入ってるスキーマを/etc/ldap/schema/にコピーして、解凍する
$ sudo cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/
$ sudo gzip -d /etc/ldap/schema/samba.schema.gz


schema_convert.confを作成する
$ vi schema_convert.conf



include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/samba.schema




変換作業用のディレクトリ/tmp/ldif_outputを作る
$ mkdir /tmp/ldif_output

slapcatで変換して作業用ディレクトリに出力する
$ slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={12}samba,cn=schema,cn=config" > /tmp/cn=samba.ldif


生成された/tmp/cn\=samba.ldifを修正する

$ sudo vi /tmp/cn=samba.ldif


以下の部分の{12}を削除
dn: cn={12}samba,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {12}samba

以下のように変更する
dn: cn=samba,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: samba

ファイルの後部にある以下の部分をすべて削除
structuralObjectClass: olcSchemaConfig
entryUUID: f53006b4-ff77-102f-96ef-cf67afd330fc
creatorsName: cn=config
createTimestamp: 20110420085726Z
entryCSN: 20110420085726.009508Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20110420085726Z


修正した/tmp/cn=samba.ldifをを登録
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/cn\=samba.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=samba,cn=schema,cn=config"


Sambaの設定ファイルsamba_indexes.ldifを作成する
$ vi samba_indexes.ldif



dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub




samba_indexes.ldifを登録
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f samba_indexes.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"


LDAPの認証の設定


LDAPの認証
$ sudo apt-get -y install libnss-ldap

ldap-auth-configの設定

LDAP server Uniform Resource Identifier: → ldapi:///
Distinguished name of the search base: → dc=example,dc=com
LDAP version to use: → 3
Make local root Database admin: → Yes
Does the LDAP database require login? → No
LDAP account for root: → cn=admin,dc=example,dc=com
LDAP root account password: → password















やり直すときは sudo dpkg-reconfigure ldap-auth-config


nsswitch.confの設定を変更
$ sudo auth-client-config -t nss -p lac_ldap


/etc/auth-client-config/profile.d/acc-defaultの[ldap_example]以下をldap-auth-configの[lac_ldap]以下にコピペする
$ vi /etc/auth-client-config/profile.d/acc-default


$ sudo vi /etc/auth-client-config/profile.d/ldap-auth-config

[lac_ldap]
nss_passwd=passwd: files ldap
nss_group=group: files ldap
nss_shadow=shadow: files ldap
nss_netgroup=netgroup: nis
pam_auth=auth       required     pam_env.so
 auth       sufficient   pam_unix.so likeauth nullok
 auth       sufficient   pam_ldap.so use_first_pass
 auth       required     pam_deny.so
pam_account=account    sufficient   pam_unix.so
 account    sufficient   pam_ldap.so
 account    required     pam_deny.so
pam_password=password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
 password   sufficient   pam_unix.so nullok md5 shadow use_authtok
 password   sufficient   pam_ldap.so use_first_pass
 password   required     pam_deny.so
pam_session=session    required     pam_limits.so
 session    required     pam_unix.so
 session    optional     pam_ldap.so




/etc/auth-client-config/profile.d/ldap-auth-configに以下1行追加する
$ sudo vi /etc/auth-client-config/profile.d/ldap-auth-config
session required pam_mkhomedir.so umask=0022 skel=/etc/skel


PAM プロファイルを有効化する
$ sudo pam-auth-update
全て選択する



Sambaの設定


Sambaの設定
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
$ sudo vi /etc/samba/smb.conf

以下コメントアウトする
38行目
workgroup = WORKGROUP

110行目
passdb backend = tdbsam

112行目
obey pam restrictions = yes

以下の内容を追記

[global]
 dos charset = CP932
 unix charset = UTF-8
 workgroup = EXAMPLE

 wins support = Yes

 passdb backend = ldapsam
 obey pam restrictions = Yes
 domain logons = Yes

 os level = 65
 domain master = Auto
 preferred master = Auto
 local master = Yes

 ldapsam:editposix = yes
 ldapsam:trusted = yes

 ldap admin dn = cn=admin,dc=example,dc=com
 ldap suffix = dc=example,dc=com
 ldap group suffix = ou=groups
 ldap machine suffix = ou=computers
 ldap user suffix = ou=users
 ldap ssl = no

 ldap delete dn = Yes
 ldap passwd sync = Yes

 ldap idmap suffix = ou=idmap

 idmap backend = ldap:ldap://localhost/
 idmap uid = 50000-500000
 idmap gid = 50000-500000

 logon home = \\%N\%U
 logon path = \\%N\%U\profile
 logon drive = Z:
 logon script = logon.cmd

 template shell = /bin/bash
 template homedir = /home/%U

[netlogon]
 comment = Network Logon Service
 path = /srv/samba/netlogon
 guest ok = yes
 read only = yes
 share modes = no

[homes]
#       comment = %U's Home Directory
  browseable = no
  writeable = yes
  path = %H
  valid users = %S
  vfs objects = recycle
  recycle:repository = recycle
  recycle:keeptree = yes
  recycle:versions = yes
  recycle:touch = no
  recycle:maxsize = 0
  recycle:exclude = *.tmp ~$*




/srv/samba/netlogonディレクトリをつくる
$ sudo mkdir -p /srv/samba/netlogon

winbind smbd nmbdを止める
$ sudo service smbd stop
$ sudo service nmbd stop
$ sudo service winbind stop


cn=admin,dc=example,dc=comのパスワードを設定する
小文字wオプションは引数としてパスワードを指定
大文字Wオプションはパスワード設定プロンプトが出る
ここでは小文字wオプションを使用し、引数としてパスワードを指定する

$ sudo smbpasswd -w password
Setting stored password for "cn=admin,dc=example,dc=com" in secrets.tdb


winbindを起動。
$ sudo service winbind start

初期ユーザーとグループを設定。
$ sudo net sam provision

Checking for Domain Users group.
Adding the Domain Users group.
Checking for Domain Admins group.
Adding the Domain Admins group.
Check for Administrator account.
Adding the Administrator user.
Checking for Guest user.
Adding the Guest user.
Checking Guest's group.
Adding the Domain Guests group.


smb.confにエラーがある場合、以下のエラーが出る
Provisioning works only with ldapsam backend


Administratorのパスワードを設定。
$ sudo smbpasswd Administrator
New SMB password:
Retype new SMB password:

smbdとnmbdを起動。
$ sudo service nmbd start
$ sudo service smbd start


Administratorに特権与える
$ sudo net rpc rights grant Administrator SeAddUsersPrivilege -U Administrator
Enter Administrator's password:
Successfully granted rights.

$ sudo net rpc rights grant Administrator SeMachineAccountPrivilege -U Administrator
Enter Administrator's password:
Successfully granted rights.

ドメインの情報を確認する
$ net rpc info -U Administrator
Domain Name: EXAMPLE
Domain SID: S-1-5-21-2215086774-2015019925-2070924204
Sequence number: 1303303225
Num users: 2
Num domain groups: 3
Num local groups: 0


LDAPユーザー登録


動作確認用の一般ユーザー作成
$ sudo pdbedit -a -u alice -D 'H:' -h '\\example.com\home\alice'
new password:
retype new password:

-a, --create #create user
-t, --password-from-stdin #get password from standard in
-u, --user=USER #use username
-D, --drive=STRING #set home drive
-h, --homedir=STRING #set home directory
-f, --fullname=STRING #set full name


$ sudo mkdir /home/alice
$ sudo chown alice /home/alice

LDAPユーザーの登録内容を確認
$ id alice
$ sudo pdbedit -u alice -v
$ ldapsearch -xLLL -b "dc=example,dc=com" uid=alice sn givenName cn

ログオンスクリプトをつくる
$ sudo vi /srv/samba/netlogon/logon.cmd



notepad.exe

rem コメント
rem このログオンスクリプトは、ログイン時にメモ帳を立ち上げる。
;; comment




LDAPサーバーにログインする


Winsows に administratorでログイン

C:\WINDOWS\system32\drivers\etc\hostsファイルを編集する
ldap.server.ip.address example.com

参加ドメイン名をexampleにする
ユーザー名administrator,パスpasswordで登録



ユーザー名にalice
パスワードにpassword
ログオン先にEXAMPLEを選択

マイコンピューターを右クリックして、ネットワークドライブの割り当てを行う
ドライブ番号 Z
フォルダ名 \\Virtualmachine\alice


参考


nofuture.tv - SambaとOpenLDAPでドメインコントローラを作ってみるメモ
http://www.nofuture.tv/index.rb?SambaLdapMemo

Samba PDC (lenny) - Samba-JP
http://wiki.samba.gr.jp/mediawiki/index.php?title=Samba_PDC_%28lenny%29

Samba+OpenLDAPによるドメインログオン環境
http://net-newbie.com/samba/

OpenLDAP Server
https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html

Samba and LDAP
https://help.ubuntu.com/10.04/serverguide/C/samba-ldap.html

0 コメント: