カテゴリー : CentOS 5

LDAP 連携した Samba でユーザ認証が失敗する

CentOS 5.7 (x86_64)のSamba(Samba 3.5.4)でLDAP連携し、大量のユーザの追加をしたところ
ユーザ認証が失敗するようになった。LDAPのエントリがデフォルトで500であるため、それを超えて
見えなくなった様子。(500に達した時点で検索をやめてしまう)

/etc/openldap/slapd.conf の設定を変更することで認証できるようになった。

sizelimit 15000

なお、 sizelimit 0 にした場合は、無制限となる。

net sam provision が失敗する

CentOS 5.7 (x86_64)のSamba(Samba 3.5.4)でLDAP連携し、複数のLDAPサーバをsmb.confで指定した
ところ net sam provision が失敗した。表示されたメッセージは以下の通り。

# net sam provision

Checking for Domain Users group.
Adding the Domain Users group.
lib/smbldap.c:757(smb_ldap_setup_conn)
 ldap_initialize: Bad parameter to an ldap routine
lib/smbldap.c:757(smb_ldap_setup_conn)
 ldap_initialize: Bad parameter to an ldap routine

/etc/samba/smb.conf の以下の設定に、ダブルクォートが入っていると事象が発生する様子。

passdb backend = ldapsam:"ldap://ldap01/ ldap://ldap02/"

上記設定を一時的に単一LDAPサーバのみ参照するように変更したところ、事象が発生しなくなった。

passdb backend = ldapsam:ldap://ldap01/
# 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.

LDAP 連携した Samba の運用コマンド

LDAP連携したSambaの運用コマンドは以下の通り。

idmapの確認

# net groupmap list

ユーザ一覧

# net rpc user -U Administrator%password

ユーザ情報(参加しているグループを表示)

# net rpc user INFO hoge -U Administrator%password

ユーザの追加

# net rpc user ADD hoge password -U Administrator%password

ユーザの削除

# net rpc user DELETE hoge -U Administrator%password

パスワードの変更

# net rpc user PASSWORD hoge password -U Administrator%password

ユーザ名の変更

# net rpc user RENAME hoge hogehoge -U Administrator%password

グループ一覧

# net rpc group LIST -U Administrator%password

グループの追加

# net rpc group ADD hoge-G -U Administrator%password

グループの削除

# net rpc group DELETE hoge-G -U Administrator%password

グループに参加するメンバ一覧

# net rpc group MEMBERS hoge-G -U Administrator%password

グループに参加するメンバを追加

# net rpc group ADDMEM hoge-G hoge -U Administrator%password

グループに参加するメンバを削除

# net rpc group DELMEM hoge-G hoge -U Administrator%password

グループ名の変更

# net rpc group RENAME hoge-G hogehoge-G -U Administrator%password

CentOS 5 で Samba 3.5 と OpenLDAP 2.3 を連携する方法

CentOS 5でSamba 3.5とOpenLDAP 2.3を連携する方法は以下の通り。

構成

ldap01 (192.168.1.101/プロバイダ)
ldap02 (192.168.1.102/コンシューマ)
samba01 (192.168.1.103)

1. ldap01 と ldap02をプロバイダ・コンシューマとして構成

2. samba01 で必要なパッケージをyumからインストール。

# yum -y install samba3x samba3x-client samba3x-common

3. ldap01 と ldap02 の/etc/hostsに以下のエントリを追加。

【ldap01とldap02にて実施】

192.168.1.103    samba01

3. samba01 の/etc/hostsに以下のエントリを追加。

【samba01にて実施】

192.168.1.101    ldap01
192.168.1.102    ldap02
192.168.1.103    samba01

4. samba01 の /etc/openldap/schema/samba.schema を ldap01 と ldap02 へコピー。

【samba01にて実施】

# scp -p /etc/openldap/schema/samba.schema ldap01:/etc/openldap/schema/
# scp -p /etc/openldap/schema/samba.schema ldap02:/etc/openldap/schema/

5. ldap01 と ldap02 のスキーマを拡張するため、/etc/openlda/slapd.conを変更。

【ldap01 と ldap02 にて追加】

include         /etc/openldap/schema/samba.schema
index sambaDomainName,sambaSID,sambaSIDList,sambaGroupType,uniqueMember,displayName eq
index homeDirectory,sambaNTPassword,sambaAcctFlags,sambaPasswordHistory,sambaPwdLastSet eq

【ldap01 と ldap02 にて変更】

access to attrs=userPassword,sambaLMPassword,sambaNTPassword,sambaPasswordHistory,sambaPwdLastSet,sambaPwdMustChange
    by self write
    by anonymous auth
    by * none

今回は以下のように設定した。

【ldap01】

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/samba.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

access to attrs=userPassword,sambaLMPassword,sambaNTPassword,sambaPasswordHistory,sambaPwdLastSet,sambaPwdMustChange
    by self write
    by anonymous auth
    by * none

access to *
    by self write
    by * none

database        bdb
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}BavHs9MY2gWx+Z+rJdrbEBEGFrC2TTPG
directory       /var/lib/ldap

index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub
index entryCSN,entryUUID                eq
index sambaDomainName,sambaSID,sambaSIDList,sambaGroupType,uniqueMember,displayName eq
index homeDirectory,sambaNTPassword,sambaAcctFlags,sambaPasswordHistory,sambaPwdLastSet eq

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100

【ldap02】

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/samba.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

access to attrs=userPassword,sambaLMPassword,sambaNTPassword,sambaPasswordHistory,sambaPwdLastSet,sambaPwdMustChange
    by self write
    by anonymous auth
    by * none

access to *
    by self write
    by * none

database        bdb
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}/QBSyONNxS4Ra+/fNasAzbQScZxbu0wi
directory       /var/lib/ldap

index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub
index entryCSN,entryUUID                eq
index sambaDomainName,sambaSID,sambaSIDList,sambaGroupType,uniqueMember,displayName eq
index homeDirectory,sambaNTPassword,sambaAcctFlags,sambaPasswordHistory,sambaPwdLastSet eq

syncrepl rid=001
    provider=ldap://ldap01:389
    type=refreshOnly
    interval=00:00:05:00
    searchbase="dc=example,dc=com"
    bindmethod=simple
    binddn="cn=Manager,dc=example,dc=com"
    credentials=password

6. ldap01 と ldap02 でインデックスを作成。

【ldap01 と ldap02 にて実施】

# /etc/init.d/ldap stop
# slapindex
# /etc/init.d/ldap start

7. ldap01 にてLDAPエントリを作成。

【ldap01 にて実施】

# vi example.ldif

今回は以下のように作成した。

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

dn: cn=Manager,dc=example,dc=com
objectclass: organizationalRole
cn: Manager

dn: ou=Users,dc=example,dc=com
objectClass: organizationalUnit
ou: Users

dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups

dn: ou=Computers,dc=example,dc=com
objectClass: organizationalUnit
ou: Computers

dn: ou=Idmap,dc=example,dc=com
objectClass: organizationalUnit
ou: Idmap
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w password -f example.ldif

以下のメッセージが表示されることを確認。

adding new entry "dc=example,dc=com"
adding new entry "cn=Manager,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=Computers,dc=example,dc=com"
adding new entry "ou=Idmap,dc=example,dc=com"

ldap02 へ正常に複製されていることを確認。

【ldap02にて実施】

# slapcat

8. samba01 にてldap認証の設定。

【samba01 にて実施】

# authconfig --enableldap --enableldapauth --ldapserver=ldap01,ldap02 --ldapbasedn=dc=example,dc=com --update

9. samba01 にて /etc/ldap.conf の変更。

【samba01 にて追加】

bind_policy soft

10. 共有フォルダを用意。

【samba01 にて実施】

# mkdir -p /var/samba/public
# chmod 777 /var/samba/public

11. 共有フォルダの設定ファイルを用意。

【samba01 にて実施】

# vi /etc/samba/public.conf

今回は以下のように設定した。

[public]
    comment = public
    volume = public on %h
    fstype = CIFS
    path = /var/samba/public
    writeable = no
    valid users = @domadmins @domusers
    write list = @domadmins @domusers
    force group = domusers
    create mask = 0660
    directory mask = 0770
    acl group control = yes
    acl map full control = no
    store dos attributes = yes
    map read only = no
    map archive = no
    inherit permissions = yes
    inherit acls = yes
    dos filemode = yes
    csc policy = disable
    force unknown acl user = no

12. sambaの設定を用意。

【samba01 にて実施】

今回は以下のように設定した。

[global]
    dos charset = CP932
    unix charset = UTF-8
    display charset = CP932
    workgroup = EXAMPLE
    server string = samba01
    netbios name = samba01
    #smb ports = 139

    log file = /var/log/samba/log.%m
    max log size = 1024
    log level = 1
    syslog = 0

    security = user
    passdb backend = ldapsam:"ldap://ldap01/ ldap://ldap02/"
    #passdb backend = ldapsam:ldap://ldap01/
    encrypt passwords = yes
    wins support = yes
    domain logons = yes
    local master = yes
    domain master = yes
    preferred master = auto
    os level = 65
    dns proxy = no
    map to guest = Never
    guest account = guest
    guest ok = no

    load printers = no
    cups options = raw
    disable spoolss = yes
    printing = bsd

    ldap admin dn = cn=Manager,dc=example,dc=com
    ldap suffix = dc=example,dc=com
    ldap user suffix = ou=Users
    ldap group suffix = ou=Groups
    ldap idmap suffix = ou=Idmap
    ldap machine suffix = ou=Computers
    ldap ssl = off
    ldap delete dn = yes
    ldap passwd sync = yes 

    logon path =
    template homedir = /home/%U
    template shell = /bin/true
    idmap backend = ldap:ldap://ldap01/
    idmap uid = 10000-99999
    idmap gid = 10000-99999
    idmap alloc backend = ldap
    idmap alloc config : ldap_url=ldap://ldap01/
    idmap alloc config : ldap_user_dn=cn=Manager,dc=example,dc=com 

    ldapsam:trusted = yes
    ldapsam:editposix = yes 

    winbind use default domain = yes
    winbind enum users = yes
    winbind enum groups = yes
    admin users = Administrator
    wide links = yes
    unix extensions = no

include = /etc/samba/public.conf

13. LDAPのrootpwをSambaに設定。

【samba01 にて実施】

# smbpasswd -w password

14. Samba用LDAPエントリの作成。

複数のLDAPサーバを参照する設定では以降の手順が失敗するので、一旦 /etc/samba/smb.conf を以下のように変更しておく。

【samba01にて実施】

(変更前)

passdb backend = ldapsam:"ldap://ldap01/ ldap://ldap02/"

(変更後)

passdb backend = ldapsam:ldap://ldap01/

変更が終わったら以下のコマンドを入力。

# /etc/init.d/winbind start
# chkconfig winbind on
# net idmap secret alloc password
# 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.

15. /etc/samba/smb.conf の設定を戻す。

【samba01 にて実施】

(変更前)

passdb backend = ldapsam:ldap://ldap01/

(変更後)

passdb backend = ldapsam:"ldap://ldap01/ ldap://ldap02/"

16. Sambaを起動

【samba01 にて実施】

# /etc/init.d/smb start
# /etc/init.d/nmb start
# chkconfig smb on
# chkconfig nmb on

17. Administrator のパスワードを設定。

【samba01 にて実施】

# smbpasswd Administrator

環境:
CentOS 5.7 (x86_64)
OpenLDAP 2.3.43-12
Samba 3.5.4-0.83

CentOS 5 で OpenLDAP 2.3 を冗長化する方法

CentOS 5でOpenLDAP 2.3を冗長化する方法は以下の通り。
レプリケーション方式はプロバイダ/コンシューマ方式。

構成

ldap01 (192.168.1.101/プロバイダ)
ldap02 (192.168.1.102/コンシューマ)

1. ldap01 と ldap02でOpenLDAP 2.3のインストールまで実施。

2. ldap01 と ldap02 の/etc/hostsに以下のエントリを追加。

192.168.1.101    ldap01
192.168.1.102    ldap02

3. ldap01 のslapd.confに以下の設定を追加。

【ldap01 にて実施】

index entryCSN,entryUUID                eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100

4. ldap01 でインデックスを作成。

【ldap01 にて実施】

# /etc/init.d/ldap stop
# slapindex
# /etc/init.d/ldap start

3. ldap02 のslapd.confに以下の設定を追加。

【ldap02 にて実施】

index entryCSN,entryUUID                eq
   syncrepl rid=001
   provider=ldap://ldap01:389
   type=refreshOnly
   interval=00:00:05:00
   searchbase="dc=example,dc=com"
   bindmethod=simple
   binddn="cn=Manager,dc=example,dc=com"
   credentials=password

5. ldap02 でインデックスを作成。

【ldap02 にて実施】

# /etc/init.d/ldap stop
# slapindex
# /etc/init.d/ldap start

ldap01のldap.logに以下のようなメッセージが出力されていること。

conn=x fd=x ACCEPT from IP=192.168.1.102:50779 (IP=192.168.1.101:389)

環境:
CentOS 5.7 (x86_64)
OpenLDAP 2.3.43-12

CentOS 5 に OpenLDAP 2.3 をインストールする方法

CentOS 5にOpenLDAP 2.3をインストールする方法は以下の通り。

1. 必要なパッケージをyumからインストール。

# yum -y install openldap-servers openldap-clients

2. slap.confのrootpwへ設定するパスワードハッシュを作成。今回は password と入力した。

# slappasswd
New password:
Re-enter new password:
{SSHA}BavHs9MY2gWx+Z+rJdrbEBEGFrC2TTPG

3. DB_CONFIGを用意。

# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

4. OpenLDAPの設定ファイルを用意。

# vi /etc/openldap/slapd.conf

今回は以下のように設定した。

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

access to attrs=userPassword
 by self write
 by anonymous auth
 by * none

access to *
 by self write
 by * none

database        bdb
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}BavHs9MY2gWx+Z+rJdrbEBEGFrC2TTPG
directory       /var/lib/ldap

index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub

5. syslogの設定。

# vi /etc/syslog.conf

以下を追加する。

local4.*                                                /var/log/ldap.log

6. syslogを再起動。

# /etc/init.d/syslog restart

7. ログローテーションの設定。

# vi /etc/logrotate.d/syslog

(変更前)

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron

(変更後)

/var/log/ldap.log /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron

8. OpelLDAPを起動。

# /etc/init.d/ldap start

ipv6を無効にしている環境で以下のメッセージが表示される場合がある。

IPv6 socket() failed errno=xx (Address family not supported by protocol)

/etc/init.d/ldapの143行目を変更することでメッセージが表示されなくなった。

(変更前)

harg="ldap:///"

(変更後)

harg="ldap://192.168.1.101/"

9. OS起動時に自動で起動するように設定。

# chkconfig ldap on

iptabelsが有効なら、TCP/389,636を許可する。

# vi /etc/sysconfig/iptables

以下を追加する。

-A RH-Firewall-1-INPUT -p tcp --dport 389 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 636 -j ACCEPT

iptablesの設定を変更した場合は、設定を有効化する。

# /etc/init.d/iptables restart

LDAP認証の設定直後にGUIからログインできないことがあった。
※CLI(ssh)ではログインできるが、GUI(X Window)ではログインが失敗するという事象が発生した。
サーバの再起動もしくは、以下のコマンドを実行すればログインできるようになった。

# gdm-restart

環境:

CentOS 5.7 (x86_64)
OpenLDAP 2.3.43-12

CentOS 5 に Samba 3.5 をインストールする方法

CentOS 5にSamba 3.5をインストールする方法は以下の通り。

1. 必要なパッケージをyumからインストール。

# yum -y install samba3x samba3x-client samba3x-common

2. 共有フォルダを用意。

# mkdir -p /var/samba/public
# chmod 777 /var/samba/public

3. 共有フォルダの設定ファイルを用意。

# vi /etc/samba/public.conf

今回は以下のように設定した。

[public]
    comment = public
    volume = public on %h
    fstype = CIFS
    path = /var/samba/public
    writeable = yes
    acl group control = yes
    acl map full control = no
    store dos attributes = yes
    map read only = no
    map archive = no
    inherit permissions = yes
    inherit acls = yes
    dos filemode = yes
    csc policy = disable
    force unknown acl user = no

5. sambaの設定を用意。

# vi /etc/samba/smb.conf

今回は以下のように設定した。

[global]
    dos charset = CP932
    unix charset = UTF-8
    display charset = CP932
    workgroup = EXAMPLE
    server string = samba01
    netbios name = samba01
    #smb ports = 139
    log file = /var/log/samba/log.%m
    max log size = 1024
    log level = 1
    syslog = 0

    security = user
    passdb backend = tdbsam
    encrypt passwords = yes
    wins support = yes
    local master = yes
    preferred master = auto
    dns proxy = no

    map to guest = Never
    guest account = nobody
    guest ok = no

    load printers = no
    cups options = raw
    disable spoolss = yes
    printing = bsd
    idmap backend = tdb
    idmap uid = 10000-99999
    idmap gid = 10000-99999
    winbind enum users = yes
    winbind enum groups = yes
    wide links = yes
    unix extensions = no

include = /etc/samba/public.conf

6. sambaを起動。

# /etc/init.d/smb restart
# /etc/init.d/nmb start
# /etc/init.d/winbind start

7. OS起動時に自動で起動するように設定。

# chkconfig smb on
# chkconfig nmb on
# chkconfig winbind on

8. ユーザを追加。

# useradd hoge
# pdbedit -a hoge

ユーザを削除する場合。

# pdbedit -x hoge
# usedel -r hoge

iptabelsが有効なら、UDP/137,138 TCP/139,445を許可する。

# vi /etc/sysconfig/iptables

以下を追加する。

-A RH-Firewall-1-INPUT -p udp --dport 137:138 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 445 -j ACCEPT

iptablesの設定を変更した場合は、設定を有効化する。

# /etc/init.d/iptables restart

環境:
CentOS 5.7 (x86_64)
Samba 3.5.4-0.83

CentOS 5 でデバイスの UUID を確認する方法

CentOS 5でデバイスのUUIDを確認する方法は以下の通り。

# /lib/udev/vol_id -u <デバイス名>

(例)

# /lib/udev/vol_id -u /dev/sda

/etc/fstab に UUIDでエントリを作成すれば、OS再起動時にデバイスが勝手に入れ替わらない。

(例)変更前

/dev/sda   /home   ext3   defaults   1 2

(例)変更後

UUID=8e8427da-820e-456d-a4a7-6b79d3a0e5f2   /home   ext3   defaults   1 2

環境:
CentOS 5.6 (i386)

CentOS のアカウントのパスワードを一行で変更する方法

CentOSのアカウントのパスワードを一行で変更する方法は以下の通り。

# echo <パスワード> | passwd --stdin <アカウント名>

(例)

# echo password | passwd --stdin hoge

環境:
CentOS 5.6 (i386)

Zabbix から ejabberd にメッセージを送信する方法

Zabbixからejabberdにメッセージを送信する方法は以下の通り。

1. Zabbixのメディアタイプを設定([管理]→[メディアタイプ]→[jabber])

説明: Jabber
タイプ: Jabber
JabberID: zabbix@example.com (取得済ID)

2. 「パスワード変更」ボタンを押してパスワードを設定し、保存

3. ejabberd.cfgの修正

# vi ejabberd.cfg
{5222, ejabberd_c2s, [
%%{certfile, "/opt/ejabberd-2.1.6/conf/server.pem"}, starttls,
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},

4. hostsの修正

# vi /etc/hosts
192.0.2.100 example.com

5. ユーザのjabberIDを設定 ([管理]→[ユーザ]→[ユーザ名])

6. Jabber送信アクションを設定 ([設定]→[アクション]→[アクションの作成])

手順3を実施しない場合は、zabbix_server.logに以下のエラーが出力された。

JABBER: [zabbix@example.com] receiving error [7][0]

手順4を実施しない場合は、zabbix_server.logに以下のエラーが出力された。

JABBER: [zabbix@example.com] Connection failed: Connection timed out

pandion は _xmpp-client._tcp.example.com の SRVレコードが解決できれば接続できたが

Zabbixは example.com の Aレコードを解決し接続している様子。

環境:
CentOS 5.6 (i386)
Zabbix 1.8.4-1
ejabberd 2.1.6

TOP

INFORMATION

当サイトは備忘録であり、その内容を保証するものではありません。 当サイトまたはリンク先によるいかなるトラブルや損害に関しても、一切の責任を負いかねます。 当サイトの内容を無断で転用したり、転載する等の行為はおやめください。