Авторизация пользователей через LDAP.

Все настроил строго по этому мануалу:
http://www.gentoo.org/doc/en/ldap-howto.xml

Тем не менее пользователи не авторизуются. Такое ощущение что проблема именно в "pam_ldap", так как следующая команда, после ввода пароля, без проблем возвращает uid и userPassword:

ldapsearch -H ldap://ldap_server:389 -x -W \
    -b "ou=testuser,ou=People,dc=genfic,dc=com" \
    -D "uid=testuser,ou=People,dc=genfic,dc=com" \
    "objectclass=PosixAccount" uid userPassword

Да и: "getent passwd/group" тоже показывает группы и пользователей заведенных в ldap, если конечно залогиниться (временно добавил binddn/bindpw в /etc/ldap.conf, чтобы залогиниться).

Опыта у меня пока маловато - подскажите - куда копать?

А ты точно

А ты точно поставил pam_ldap и pam_nss? Как то раз я забыл это сделать и, конечно, авторизация не работала, несмотря на все остальное.

Покажи конфиги

Покажи конфиги /etc/pam.d/system-auth, /etc/ldap.conf, /etc/nsswitch.conf.
_______________________
From Siberia with Love!

Конфиги

Конфиги идентичные этой доки: "Gentoo Guide to OpenLDAP Authentication" все строки переносились copy/paste. За исключением, само собой, сервера, suffix'а и rootdn.

nss_ldap и pam_ldap работают, за исключением авторизации. Т.е. я взял первую ACL-схему (да и со второй (4.2) и с дефолтной - тоже проверял) из той доки:

access to *
  by dn="uid=root,ou=people,dc=genfic,dc=com" write
  by users read
  by anonymous auth
access to attrs=userPassword,gecos,description,loginShell
  by self write

но авторизации не происходит. Если anonymous auth заменить на read - то все работает и getent и login и ssh - т.о. - это показывает что и nss_ldap и pam_ldap работают, но авторизация по каким-то причинам не проходит.

access to dn.base="" by

access to dn.base=""
by self write
by * auth

access to attrs=userPassword
by self write
by * auth

acces to attrs=shadowLastChange
by self write
by * read

access to *
by * read
by anonymous auth
P.S.: должно быть так (у ну по кр.мере работает) :)

Нет, увы, так не

Нет, увы, так не работает. Авторизации не происходит. И работает только если позволить анонимнусам читать базу.
Я попробовал включить отладку, но за отсутствием должного опыта ничего полезного увидеть не смог.

Подскажите хоть - на что обратить внимание?..

Конфиги

Конфиги покажешь или нет?
_______________________
From Siberia with Love!

Вот конфиги:

# grep -v "#" /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

modulepath      /usr/lib/openldap/openldap
moduleload      back_hdb.so

database        ldbm
suffix          "dc=genfic,dc=localdomain"
rootdn          "cn=admin,dc=genfic,dc=localdomain"
rootpw          XXXXXXXXXXXXX
directory       /var/lib/openldap-data/genfic.localdomain
index           objectClass     eq

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

access to *
    by dn="uid=root,ou=People,dc=genfic" write
    by users read
    by anonymous auth

access to attrs=userPassword,gecos,description,loginShell
    by self write

# grep -v "#" /etc/openldap/ldap.conf

BASE        dc=genfic,dc=localdomain
URI         ldap://ldapserver.localdomain
TLS_REQCERT allow

# cat /etc/pam.d/system-auth

auth            required        pam_env.so
auth            required        pam_unix.so try_first_pass likeauth nullok
auth            sufficient      pam_ldap.so use_first_pass

account         required        pam_unix.so
account         sufficient      pam_ldap.so

password        required        pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password        required        pam_unix.so try_first_pass use_authtok nullok md5 shadow
password        sufficient      pam_ldap.so use_authtok use_first_pass

session         required        pam_limits.so
session         required        pam_env.so
session         required        pam_unix.so
session         optional        pam_ldap.so

# grep -v "#" /etc/ldap.conf

suffix          "dc=genfic,dc=localdomain"
uri              ldap://ldap.localdomain

pam_password     exop

ldap_version     3
pam_filter       objectclass=posixAccount
pam_login_attribute   uid
pam_member_attribute  memberuid

nss_base_passwd  ou=People,dc=genfic,dc=localdomain
nss_base_shadow  ou=People,dc=genfic,dc=localdomain
nss_base_group    ou=Group,dc=genfic,dc=localdomain

scope  one

grep -v "#" /etc/nsswitch.conf

passwd: files ldap [NOTFOUND=return] db
shadow: files ldap [NOTFOUND=return] db
group:  files ldap [NOTFOUND=return] db

hosts:       files dns
networks:    files dns

services:    db files
protocols:   db files
rpc:         db files
ethers:      db files
netmasks:    files
netgroup:    files
bootparams:  files

automount:   files
aliases:     files

Повторяем

Повторяем мантру "Чем выше ACL, тем раньше он будет исполняться" до просветелния.
Смотри что у тебя.

access to *
    by dn="uid=root,ou=People,dc=genfic" write
    by users read
    by anonymous auth

access to attrs=userPassword,gecos,description,loginShell
    by self write

Первая ACL, которая лимитирует доступ ко всем объектам дерева, заставляет анонимусов аутентифицироваться, что справедливо. Однако вторая ACLка никак не лимитирует доступ к атрибуту userPassword анонимусам. Поэтому они стройными рядами идут мимо, бо политика по умолчанию - ничего не давать. Соответственно, они и получить доступ ко всему дереву не могут.

Теперь как надо. Во-первых, поменяй ACL местами. Заклинание "access to * ..." является политикой по умолчанию для доступа всех пользователей ко всем объектам. Во-вторых, разреши анонимусам получать userPassword при аутентификации.

В итоге получаем вот что:

access to attrs="userPassword"
  by dn="uid=root,ou=people,dc=genfic,dc=com" write
  by self write
  by anonymous auth
  by * none

access to *
    by dn="uid=root,ou=People,dc=genfic" write
    by users read
    by anonymous auth

_______________________
From Siberia with Love!

Доку для случая Gentoo не читал...

...и не собираюсь.

inspirra написал(а):
Нет, увы, так не работает. Авторизации не происходит. И работает только если позволить анонимнусам читать базу.

Ну ты блин даёшь!!!
1. Анонимусам- фиг.
2. Простым смертным - не более, чем авторизация (т.е. тоже не больше чем необходимо), даже хэш своего пароля читать низзя!
3. Авторизованному пользователю типа админ - полный доступ.

inspirra написал(а):
Я попробовал включить отладку, но за отсутствием должного опыта ничего полезного увидеть не смог.

Да...
Читаемость логов OpenLDAP оставляет желать лучшего.

inspirra написал(а):
Подскажите хоть - на что обратить внимание?..

На FreeBSD оно выглядит следующим образом (на необходимость установки пакетов pam_ldap и nss_ldap уже указали):
Конфиги клиента лдап для авторизации и просто клиента - не совпадают.
nss_ldap.conf симлинком на ldap.conf (конфиг клиента авторизации) или наоборот.
Необходимо модифицировать /etc/nsswitch.conf.
Если под одинаковым UID'ом в системной базе пользователей и в LDAP'е живут разные пользователи, приоритет отдаётся тому, что в /etc/passwd.
Если в /etc/passwd прописах хэш пароля root'а, то возможна авторизация как с паролем из /etc/passwd, так и с паролем из лдапа (аналогично для адина LDAP, с той только разницей, что его пароль прописывается в slapd.conf.
Научить работать систему когда в ldap.secret прописывается не-cleartext пароль не удалось :(
И главное: для того, чтобы оно всё работало необходимо заменить скрипты (дописать использование LDAP) в /etc/pam.d/.

--
Live free or die

Куда копать дальше?..

Anarchist написал(а):
inspirra написал(а):
Нет, увы, так не работает. Авторизации не происходит. И работает только если позволить анонимнусам читать базу.

Ну ты блин даёшь!!!
1. Анонимусам- фиг.

Это само собой. Этим я только показал что LDAP отчасти работает и клиенты успешно логинятся, за исключением авторизации.

Anarchist написал(а):
Конфиги клиента лдап для авторизации и просто клиента - не совпадают.

Это как?.. Не совсем понял, вернее, совсем не понял.

Anarchist написал(а):
nss_ldap.conf симлинком на ldap.conf (конфиг клиента авторизации) или наоборот.
Необходимо модифицировать /etc/nsswitch.conf.

Симлинк сделал - не помогло. /etc/nsswitch.conf - само собой модифицирован.

Anarchist написал(а):
Если под одинаковым UID'ом в системной базе пользователей и в LDAP'е живут разные пользователи, приоритет отдаётся тому, что в /etc/passwd.

Все пользователи кроме root и системных находятся только в LDAP.

Anarchist написал(а):
Научить работать систему когда в ldap.secret прописывается не-cleartext пароль не удалось :(

Это для меня пока не актуально.

Anarchist написал(а):
И главное: для того, чтобы оно всё работало необходимо заменить скрипты (дописать использование LDAP) в /etc/pam.d/.

Изменено согласно документации.

.

inspirra написал(а):
1. Анонимусам- фиг.

Это само собой. Этим я только показал что LDAP отчасти работает и клиенты успешно логинятся, за исключением авторизации.

Теперь я не понял.
Это как?

inspirra написал(а):
Anarchist написал(а):
Конфиги клиента лдап для авторизации и просто клиента - не совпадают.

Это как?.. Не совсем понял, вернее, совсем не понял.

В смысле ldap.conf используемый библиотечкой авторизации и ldap.conf используемый [например] ldapmodify - это разные конфиги.

inspirra написал(а):
Anarchist написал(а):
nss_ldap.conf симлинком на ldap.conf (конфиг клиента авторизации) или наоборот.

Симлинк сделал - не помогло.

Что у тебя в ldap.conf?
И сколько их у тебя (в FreeBSD это используемый библиотеками авторизации /usr/local/etc/ldap.conf и используемый клиентом /usr/local/etc/openldap/ldap.conf)?

inspirra написал(а):
Все пользователи кроме root и системных находятся только в LDAP.

Кстати, согласно моим наблюдениям системные пользователи в LDAP'е тоже должны быть, без этого не работает.

inspirra написал(а):
Anarchist написал(а):
Научить работать систему когда в ldap.secret прописывается не-cleartext пароль не удалось :(

Это для меня пока не актуально.

Как так не актуально, когда предполагается, что туда прописывается пароль пользователя, с которым производится подключение к LDAP при отработке запроса на авторизацию?

--
Live free or die

Вот так можно сделать…

Anarchist написал(а):
...и не собираюсь.

Оно и видно. :) Потому и советы… несколько странные.

Цитата:
Ну ты блин даёшь!!!
1. Анонимусам- фиг.
2. Простым смертным - не более, чем авторизация (т.е. тоже не больше чем необходимо), даже хэш своего пароля читать низзя!
3. Авторизованному пользователю типа админ - полный доступ.

Вполне достаточно сделать что-то такое

access to attrs=userPassword
        by anonymous auth
        by dn="uid=root,ou=Users,dc=ph,dc=com" write
        by dn="ou=IT,ou=Users,dc=ph,dc=com" write
        by * none

access to attrs=sambaLMPassword,sambaNTPassword
        by dn="uid=root,ou=Users,dc=ph,dc=com" write
        by dn="ou=IT,ou=Users,dc=ph,dc=com" write
        by * none

access to attrs=shadowLastChange
                by by dn="uid=root,ou=Users,dc=ph,dc=com" write
                by dn="cn=bind,ou=Users,dc=ph,dc=com" read
                by * none

access to *
        by dn="uid=root,ou=Users,dc=ph,dc=com" write
        by dn="cn=bind,ou=Users,dc=ph,dc=com" read
        by * none

чтобы работать спокойно.

Цитата:
На FreeBSD оно выглядит следующим образом…

Не стоит путать человека ФриБСД ;)

Для того, чтобы заработала авторизация в лдап, надо:
На сервере прописать соответствующие разрешения, примерно так, как я показал.
Запустить демон slapd, причем, в конфиге /etc/conf.d/slapd надо раскомментировать и обозначить одну строку примерно так:
OPTS="-h 'ldap://ANY_IP ldap://127.0.0.1 ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"
После запуска демона проверить, слушаются ли ANY_IP и localhost.
Создай в каталоге пользователя для бинда, без прав, с домашним каталогом /dev/null, оболочкой /bin/false и с простым паролем. Вовсе не обязательно коннектиться с рутовыми правами к лдап, можно такого cn=bind,ou=Users,dc=ph,dc=com, с простым паролем. коннектится к базе и позволяет прочитать нужные записи. При необходимости его доступ можно еще урезать. Этот пользователь также используется в остальных программах, использующих лдап: почтовике, прокси и тд.
Всё. Остальное делается на клиенте.

Устанавливается pam_ldap и nss_ldap.
Исправляется 3 (три!) конфигурационных файла:

/etc/ldap.conf

# @(#)$Id: ldap.conf,v 2.47 2006/05/15 08:13:44 lukeh Exp $
#
# This is the configuration file for the LDAP nameservice
# switch library and the LDAP PAM module.
#
# PADL Software
# http://www.padl.com
#

# Your LDAP server. Must be resolvable without using LDAP.
# Multiple hosts may be specified, each separated by a 
# space. How long nss_ldap takes to failover depends on
# whether your LDAP client library supports configurable
# network or connect timeouts (see bind_timelimit).
#host 127.0.0.1

# The distinguished name of the search base.
base dc=ph,dc=com

# Another way to specify your LDAP server is to provide an
# uri with the server name. This allows to use
# Unix Domain Sockets to connect to a local LDAP Server.
uri ldap://mainserv.ph.com/
#uri ldaps://127.0.0.1/   
#uri ldapi://%2fvar%2frun%2fldapi_sock/
# Note: %2f encodes the '/' used as directory separator

# The LDAP version to use (defaults to 3
# if supported by client library)
ldap_version 3

# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.
binddn cn=bind,ou=users,dc=ph,dc=com

# The credentials to bind with. 
# Optional: default is no credential.
bindpw 1

# The distinguished name to bind to the server with
# if the effective user ID is root. Password is
# stored in /etc/ldap.secret (mode 600)
#rootbinddn cn=manager,dc=padl,dc=com

# The port.
# Optional: default is 389.
port 389

# The search scope.
#scope sub
#scope one
#scope base

# Search timelimit
timelimit 30

# Bind/connect timelimit
bind_timelimit 10

# Reconnect policy:
#  hard_open: reconnect to DSA with exponential backoff if
#             opening connection failed
#  hard_init: reconnect to DSA with exponential backoff if
#             initializing connection failed
#  hard:      alias for hard_open
#  soft:      return immediately on server failure
bind_policy soft

# Connection policy:
#  persist:   DSA connections are kept open (default)
#  oneshot:   DSA connections destroyed after request
nss_connect_policy persist

# Idle timelimit; client will close connections
# (nss_ldap only) if the server has not been contacted
# for the number of seconds specified below.
idle_timelimit 3600

# Use paged rseults
nss_paged_results yes

# Pagesize: when paged results enable, used to set the
# pagesize to a custom value
pagesize 1000

# Filter to AND with uid=%s
#pam_filter objectclass=account

# The user ID attribute (defaults to uid)
#pam_login_attribute uid

# Search the root DSE for the password policy (works
# with Netscape Directory Server)
#pam_lookup_policy yes

# Check the 'host' attribute for access control
# Default is no; if set to yes, and user has no
# value for the host attribute, and pam_ldap is
# configured for account management (authorization)
# then the user will not be allowed to login.
#pam_check_host_attr yes

# Check the 'authorizedService' attribute for access
# control
# Default is no; if set to yes, and the user has no
# value for the authorizedService attribute, and
# pam_ldap is configured for account management
# (authorization) then the user will not be allowed
# to login.
#pam_check_service_attr yes

# Group to enforce membership of
#pam_groupdn cn=PAM,ou=Groups,dc=padl,dc=com

# Group member attribute
#pam_member_attribute uniquemember

# Specify a minium or maximum UID number allowed
#pam_min_uid 0
#pam_max_uid 0

# Template login attribute, default template user
# (can be overriden by value of former attribute
# in user's entry)
#pam_login_attribute userPrincipalName
#pam_template_login_attribute uid
#pam_template_login nobody

# HEADS UP: the pam_crypt, pam_nds_passwd,
# and pam_ad_passwd options are no
# longer supported.
#
# Do not hash the password at all; presume
# the directory server will do it, if
# necessary. This is the default.
#pam_password clear

# Hash password locally; required for University of
# Michigan LDAP server, and works with Netscape
# Directory Server if you're using the UNIX-Crypt
# hash mechanism and not using the NT Synchronization
# service. 
#pam_password crypt

# Remove old password first, then update in
# cleartext. Necessary for use with Novell
# Directory Services (NDS)
#pam_password nds

# RACF is an alias for the above. For use with
# IBM RACF
#pam_password racf

# Update Active Directory password, by
# creating Unicode password and updating
# unicodePwd attribute.
#pam_password ad

# Use the OpenLDAP password change
# extended operation to update the password.
#pam_password exop

# Redirect users to a URL or somesuch on password
# changes.
#pam_password_prohibit_message Please visit http://internal to change your password.

# Use backlinks for answering initgroups()
#nss_initgroups backlink

# Enable support for RFC2307bis (distinguished names in group
# members)
#nss_schema rfc2307bis

# RFC2307bis naming contexts
# Syntax:
# nss_base_XXX		base?scope?filter
# where scope is {base,one,sub}
# and filter is a filter to be &'d with the
# default filter.
# You can omit the suffix eg:
# nss_base_passwd	ou=People,
# to append the default base DN but this
# may incur a small performance impact.
#nss_base_passwd	ou=People,dc=padl,dc=com?one
#nss_base_shadow	ou=People,dc=padl,dc=com?one
#nss_base_group		ou=Group,dc=padl,dc=com?one
#nss_base_hosts		ou=Hosts,dc=padl,dc=com?one
#nss_base_services	ou=Services,dc=padl,dc=com?one
#nss_base_networks	ou=Networks,dc=padl,dc=com?one
#nss_base_protocols	ou=Protocols,dc=padl,dc=com?one
#nss_base_rpc		ou=Rpc,dc=padl,dc=com?one
#nss_base_ethers	ou=Ethers,dc=padl,dc=com?one
#nss_base_netmasks	ou=Networks,dc=padl,dc=com?ne
#nss_base_bootparams	ou=Ethers,dc=padl,dc=com?one
#nss_base_aliases	ou=Aliases,dc=padl,dc=com?one
#nss_base_netgroup	ou=Netgroup,dc=padl,dc=com?one

# attribute/objectclass mapping
# Syntax:
#nss_map_attribute	rfc2307attribute	mapped_attribute
#nss_map_objectclass	rfc2307objectclass	mapped_objectclass

# configure --enable-nds is no longer supported.
# NDS mappings
#nss_map_attribute uniqueMember member

# Services for UNIX 3.5 mappings
#nss_map_objectclass posixAccount User
#nss_map_objectclass shadowAccount User
#nss_map_attribute uid msSFU30Name
#nss_map_attribute uniqueMember msSFU30PosixMember
#nss_map_attribute userPassword msSFU30Password
#nss_map_attribute homeDirectory msSFU30HomeDirectory
#nss_map_attribute homeDirectory msSFUHomeDirectory
#nss_map_objectclass posixGroup Group
#pam_login_attribute msSFU30Name
#pam_filter objectclass=User
#pam_password ad

# configure --enable-mssfu-schema is no longer supported.
# Services for UNIX 2.0 mappings
#nss_map_objectclass posixAccount User
#nss_map_objectclass shadowAccount user
#nss_map_attribute uid msSFUName
#nss_map_attribute uniqueMember posixMember
#nss_map_attribute userPassword msSFUPassword
#nss_map_attribute homeDirectory msSFUHomeDirectory
#nss_map_attribute shadowLastChange pwdLastSet
#nss_map_objectclass posixGroup Group
#nss_map_attribute cn msSFUName
#pam_login_attribute msSFUName
#pam_filter objectclass=User
#pam_password ad

# RFC 2307 (AD) mappings
#nss_map_objectclass posixAccount user
#nss_map_objectclass shadowAccount user
#nss_map_attribute uid sAMAccountName
#nss_map_attribute homeDirectory unixHomeDirectory
#nss_map_attribute shadowLastChange pwdLastSet
#nss_map_objectclass posixGroup group
#nss_map_attribute uniqueMember member
#pam_login_attribute sAMAccountName
#pam_filter objectclass=User
#pam_password ad

# configure --enable-authpassword is no longer supported
# AuthPassword mappings
#nss_map_attribute userPassword authPassword

# AIX SecureWay mappings
#nss_map_objectclass posixAccount aixAccount
#nss_base_passwd ou=aixaccount,?one
#nss_map_attribute uid userName
#nss_map_attribute gidNumber gid
#nss_map_attribute uidNumber uid
#nss_map_attribute userPassword passwordChar
#nss_map_objectclass posixGroup aixAccessGroup
#nss_base_group ou=aixgroup,?one
#nss_map_attribute cn groupName
#nss_map_attribute uniqueMember member
#pam_login_attribute userName
#pam_filter objectclass=aixAccount
#pam_password clear

# For pre-RFC2307bis automount schema
#nss_map_objectclass automountMap nisMap
#nss_map_attribute automountMapName nisMapName
#nss_map_objectclass automount nisObject
#nss_map_attribute automountKey cn
#nss_map_attribute automountInformation nisMapEntry

############# Вот тут указывается, где искать юзеров и пароли. #################
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberUid
pam_password crypt
nss_base_passwd		ou=Users,dc=ph,dc=com
nss_base_shadow		ou=Users,dc=ph,dc=com
nss_base_group		ou=Groups,dc=ph,dc=com

# Netscape SDK LDAPS
#ssl on

# Netscape SDK SSL options
#sslpath /etc/ssl/certs

# OpenLDAP SSL mechanism
# start_tls mechanism uses the normal LDAP port, LDAPS typically 636
#ssl start_tls
###ssl on
# Gentoo note: Don't use 'ssl on' in 249/250. They are broken in some cases! Use start_tls instead.

# OpenLDAP SSL options
# Require and verify server certificate (yes/no)
# Default is to use libldap's default behavior, which can be configured in
# /etc/openldap/ldap.conf using the TLS_REQCERT setting.  The default for
# OpenLDAP 2.0 and earlier is "no", for 2.1 and later is "yes".
#tls_checkpeer yes

# CA certificates for server certificate verification
# At least one of these are required if tls_checkpeer is "yes"
#tls_cacertfile /etc/ssl/ca.cert
#tls_cacertdir /etc/ssl/certs

# Seed the PRNG if /dev/urandom is not provided
#tls_randfile /var/run/egd-pool

# SSL cipher suite
# See man ciphers for syntax
#tls_ciphers TLSv1

# Client certificate and key
# Use these, if your server requires client authentication.
#tls_cert
#tls_key

# Disable SASL security layers. This is needed for AD.
#sasl_secprops maxssf=0

# Override the default Kerberos ticket cache location.
#krb5_ccname FILE:/etc/.ldapcache

# Timeout behavior
# Upstream nss_ldap hard-codes these values:
#nss_reconnect_tries 5			# number of times to double the sleep time
#nss_reconnect_sleeptime 4		# initial sleep value
#nss_reconnect_maxsleeptime 64	# max sleep value to cap at
#nss_reconnect_maxconntries 2	# how many tries before sleeping
# This leads to a delay of 124 seconds (4+8+16+32+64=124) per lookup if the
# server is not available.

# For Gentoo's distribution of nss_ldap, as of 250-r1, we use these values
# (The hardwired constants in the code are changed to them as well):
nss_reconnect_tries 4			# number of times to double the sleep time
nss_reconnect_sleeptime 1		# initial sleep value
nss_reconnect_maxsleeptime 16	# max sleep value to cap at
nss_reconnect_maxconntries 2	# how many tries before sleeping
# This leads to a delay of 15 seconds (1+2+4+8=15)

# If you are impatient, and know your LDAP server is reliable, fast or local,
# you may wish to use these values instead:
#nss_reconnect_tries 1			# number of times to double the sleep time
#nss_reconnect_sleeptime 1		# initial sleep value
#nss_reconnect_maxsleeptime 1	# max sleep value to cap at
#nss_reconnect_maxconntries 3	# how many tries before sleeping
# This leads to a delay of 1 second.

Если сделать бинд так, как здесь рекомендовано: через пользователя с минимальными правами, то можно не волноваться относительно паролей.

Далее, редактируем /etc/nsswitch.conf

# /etc/nsswitch.conf:
# $Header: /var/cvsroot/gentoo/src/patchsets/glibc/extra/etc/nsswitch.conf,v 1.1 2006/09/29 23:52:23 vapier Exp $
#################### для group сделан первым лдап, чтобы сперва там искались общие группы.##################
passwd:      files ldap
shadow:      files ldap
group:       ldap files

# passwd:    db files nis
# shadow:    db files nis
# group:     db files nis

hosts:       files dns
networks:    files dns

services:    db files
protocols:   db files
rpc:         db files
ethers:      db files
netmasks:    files
netgroup:    files
bootparams:  files

automount:   files
aliases:     files

И, наконец, редактируем /etc/pam.d/system-auth

#%PAM-1.0 + ldap

auth       required     pam_env.so
auth       sufficient   pam_unix.so try_first_pass likeauth nullok
auth       sufficient   pam_ldap.so use_first_pass
auth       required     pam_deny.so

account    sufficient   pam_ldap.so
account    required     pam_unix.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password   sufficient   pam_unix.so try_first_pass use_authtok nullok md5 shadow
password   sufficient   pam_ldap.so use_authtok
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
session    required     pam_mkhomedir.so skel=/etc/skel/ umask=077
session    optional     pam_ldap.so

Все. Этого достаточно, чтобы данные для авторизации на компьютерах брались из лдап.

PS Давал свои рабочие конфиги, а не голословные изобретения.
PPS Не поборол проблему с группой wheel. Если она есть в лдап и есть юзер, ей принадлежащий, то пока на клиентском компьютере эта группа будет в /etc/group, сделать su или sudo не удается. Проблему решил удалением этой группы из файла /etc/group.

=

HolyBoy написал(а):
Оно и видно. :) Потому и советы… несколько странные.

Да обычные советы-то :)

HolyBoy написал(а):
Вполне достаточно сделать что-то такое

access to attrs=userPassword
        by anonymous auth
        by dn="uid=root,ou=Users,dc=ph,dc=com" write
        by dn="ou=IT,ou=Users,dc=ph,dc=com" write
        by * none

access to attrs=sambaLMPassword,sambaNTPassword
        by dn="uid=root,ou=Users,dc=ph,dc=com" write
        by dn="ou=IT,ou=Users,dc=ph,dc=com" write
        by * none

access to attrs=shadowLastChange
                by by dn="uid=root,ou=Users,dc=ph,dc=com" write
                by dn="cn=bind,ou=Users,dc=ph,dc=com" read
                by * none

access to *
        by dn="uid=root,ou=Users,dc=ph,dc=com" write
        by dn="cn=bind,ou=Users,dc=ph,dc=com" read
        by * none

чтобы работать спокойно.

Угу.
В качестве одного из частных решений - вполне.

HolyBoy написал(а):
Цитата:
На FreeBSD оно выглядит следующим образом…

Не стоит путать человека ФриБСД ;)

Там страшного не больше чем в Gentoo :)

HolyBoy написал(а):
Для того, чтобы заработала авторизация в лдап, надо:
На сервере прописать соответствующие разрешения, примерно так, как я показал.
Запустить демон slapd, причем, в конфиге /etc/conf.d/slapd надо раскомментировать и обозначить одну строку примерно так:
OPTS="-h 'ldap://ANY_IP ldap://127.0.0.1 ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

Не просто запустить, а прописать автоматический запуск rc-update add slapd default
На фига слушать сокет я не понял.

HolyBoy написал(а):
После запуска демона проверить, слушаются ли ANY_IP и localhost.
Создай в каталоге пользователя для бинда, без прав, с домашним каталогом /dev/null, оболочкой /bin/false и с простым паролем. Вовсе не обязательно коннектиться с рутовыми правами к лдап, можно такого cn=bind,ou=Users,dc=ph,dc=com, с простым паролем. коннектится к базе и позволяет прочитать нужные записи. При необходимости его доступ можно еще урезать. Этот пользователь также используется в остальных программах, использующих лдап: почтовике, прокси и тд.

По моему опыту, самбе таки правильнее дать права на запись - следовательно отдельный пользователь.
Я считаю правильным специальных пользователей LDAP'а держать отдельно и по одному на рыло (в смысле приложение):
uid=samba,ou=Services,dc=mydomain,dc=ru
uid=squid,ou=Services,dc=mydomain,dc=ru
uid=apache,ou=Services,dc=mydomain,dc=ru

HolyBoy написал(а):
Устанавливается pam_ldap и nss_ldap.
Исправляется 3 (три!) конфигурационных файла:[

В сборке Gentoo nss_ldap не просит персонального конфига?

HolyBoy написал(а):
PPS Не поборол проблему с группой wheel. Если она есть в лдап и есть юзер, ей принадлежащий, то пока на клиентском компьютере эта группа будет в /etc/group, сделать su или sudo не удается. Проблему решил удалением этой группы из файла /etc/group.

Это, насколько я понял, фича пересечения системных конфигов и LDAP'а.
--
Live free or die

Quote: PPS Не

Цитата:
PPS Не поборол проблему с группой wheel. Если она есть в лдап и есть юзер, ей принадлежащий, то пока на клиентском компьютере эта группа будет в /etc/group, сделать su или sudo не удается. Проблему решил удалением этой группы из файла /etc/group.

Как ты думаешь, для чего в sudo есть USE-флаг ldap? sudo реализует собственное подключение к ldap, не связанное с системными настройками ldap. Это сделано ради безопасности. sudo не доверяет никаким подсунутым конфигам, предпочитая обращаться напрямую к источнику. Соотвественно, sudo требует дополнительной схемы и необходимой настройки в дереве. Не все так просто.
_______________________
From Siberia with Love!

Прочитал тебя и

Прочитал тебя и решил поискать по теме.
Вот, http://gentoo-wiki.com/HOWTO_LDAP_SAMBA_PDC_Basic_Setup#.2Fetc.2Fpam.d.2Fsu про su. Как оказалось, мое решение тоже вполне годится.

Всем спасибо!

Обнаружил я свой косяк. Глаз замылился и пропустил такую дурацкую ошибку... В system-auth вместо "auth sufficient pam_unix.so ...", оставил "required".

Благодарю откликнувшихся.

???

inspirra написал(а):
Обнаружил я свой косяк. Глаз замылился и пропустил такую дурацкую ошибку... В system-auth вместо "auth sufficient pam_unix.so ...", оставил "required".

Интересное утверждение.
Для FreeBSD встречал несколько иные рекомендации (в части /etc/pam.d/ отличий быть не должно):

auth            sufficient      /usr/local/lib/pam_ldap.so no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass nullok

--
Live free or die

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".