LDAP: управление пользователями и группами с помощью ldapscripts

Автор: | 11/01/2014
 

ldap-logoldapscripts – набор shell-скриптов,упрощающих работу с пользователями и группами в UNIX-системах.

Вместо создания отдельных ldif-файлов каждый раз для добавления новой записи в LDAP – можно воспользоваться утилитами ldapadduser или ldapaddgroup. Кроме того, ldapscripts предоставляют ещё несколько утилит, упрощающих работу с LDAP.

Скрипты используют объектные классы posixAccount (ldapadduser) и posixGroup (ldapaddgroup):

objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY
DESC 'Abstraction of an account with POSIX attributes'
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description ) )
objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup' SUP top STRUCTURAL
DESC 'Abstraction of a group of accounts'
MUST ( cn $ gidNumber )
MAY ( userPassword $ memberUid $ description ) )

Подробнее можно посмотреть в файле схемы nis.schema (/usr/local/etc/openldap/schema/nis.schema во FreeBSD), на странице OpenLDAP nis.schema или в статье LDAP: добавление записи из ldif-файла на примере создания root для DIT и описание objectClass.

Устанавливаем порт:

# cd /usr/ports/ && make search key="ldapscripts"
Port:   ldapscripts-2.0.5_1
Path:   /usr/ports/net/ldapscripts
Info:   Scripts to manage posix accounts in an OpenLDAP directory
Maint:  [email protected]
B-deps: libiconv-1.14_1 openldap-client-2.4.38
R-deps: libiconv-1.14_1 openldap-client-2.4.38
WWW:    http://contribs.martymac.org
# cd /usr/ports/net/ldapscripts && make install clean

В примерах используются:

# uname -or
FreeBSD 9.1-RELEASE-p5
# pkg_info | grep openldap
openldap-client-2.4.38 Open source LDAP client implementation
openldap-server-2.4.38_1 Open source LDAP server implementation

Предполагается, что у нас имеется только созданный root в одном DIT, пример – тоже в статье LDAP: добавление записи из ldif-файла на примере создания root для DIT и описание objectClass.

В качестве root (base, suffix – кому как удобнее) будет выступать запись dc=testdn1.

Теперь – нам необходимо создать несколько дополнительных записей (entry), которые будут составлять собой дерево учётных записей.

Первым – создадим запись localhost, в которую будет добавлять группы и пользователей.

Для этого – воспользуемся объектным классом organizationalUnit.

Вот как выглядит ldif-файл для добавления этой записи:

# cat oulocalhost.ldif
dn: ou=localhost,dc=testdn1
objectClass: organizationalUnit
ou: localhost

Выполняем ldapadd:

# ldapadd -x -D "cn=root,dc=testdn1" -W -f oulocalhost.ldif
Enter LDAP Password:
adding new entry "ou=localhost,dc=testdn1"

ldap_posix_add_1

Далее, добавим запись в которой будут храниться записи о группах:

# cat ougroups.ldif
dn: ou=sysgroups,ou=localhost,dc=testdn1
objectClass: organizationalUnit
ou: sysgroups
# ldapadd -x -D "cn=root,dc=testdn1" -W -f ougroups.ldif
Enter LDAP Password:
adding new entry "ou=sysgroups,ou=localhost,dc=testdn1"

Теперь – для пользователей:

# cat ouusers.ldif
dn: ou=sysusers,ou=localhost,dc=testdn1
objectClass: organizationalUnit
ou: sysusers
# ldapadd -x -D "cn=root,dc=testdn1" -W -f ouusers.ldif
Enter LDAP Password:
adding new entry "ou=sysusers,ou=localhost,dc=testdn1"

Если что-то пошло не так, и вы хотите удалить запись – воспользуйтесь утилитой ldapdelete. С ключами -n и -v утилита просто покажет какие действия будут выполнены – но не выполнит их:

# ldapdelete -nv "ou=sysusers,ou=localhost,dc=testdn1"
ldap_initialize( )
!deleting entry "ou=sysusers,ou=localhost,dc=testdn1"

Что бы выполнить удаление:

# ldapdelete -D "cn=root,dc=testdn1" -W "ou=sysusers,ou=localhost,dc=testdn1"
Enter LDAP Password:

Итак, мы добавили группу sysusers – посмотрим как она выглядит и убедимся что всё нормально:

# ldapsearch -x -b "dc=testdn1" "ou=sysusers"
# extended LDIF
#
# LDAPv3
# base <dc=testdn1> with scope subtree
# filter: ou=sysusers
# requesting: ALL
#

# sysusers, localhost, testdn1
dn: ou=sysusers,ou=localhost,dc=testdn1
objectClass: organizationalUnit
ou: sysusers

Так выглядят записи для групп и пользователей в phpLdapAdmin:

ldap_posix_add_2

Переходим к настройке ldapscripts – редактируем файл /usr/local/etc/ldapscripts/ldapscripts.conf:

# LDAP server
SERVER="127.0.0.1"

# Suffixes
SUFFIX="dc=testdn1" # Global suffix
GSUFFIX="ou=sysgroups,ou=localhost" # Groups ou (just under $SUFFIX)
USUFFIX="ou=sysusers,ou=localhost" # Users ou (just under $SUFFIX)
#MSUFFIX="ou=machines" # Machines ou (just under $SUFFIX) // тут закомментировано, т.к. требуются только пользователи и группы

# Else, use the value as an SASL authentication mechanism
SASLAUTH=""

# Указываем учётную запись пользователя, который имеет права на запись/редактирование в базе
BINDDN="cn=root,dc=testdn1"

# И его пароль
BINDPWD="PASSWORD"

# Стартовые ID *если записи ещё нет LDAP*
GIDSTART="10000" # Group ID
UIDSTART="10000" # User ID
#MIDSTART="20000" # Machine ID

# the former is a subset of the latter. The ldapscripts wouldn't cope well with this configuration.
GCLASS="posixGroup" # Leave "posixGroup" here if not sure !

# Настройки создания пользователей
USHELL="/usr/local/bin/bash"
UHOMES="/home/%u" # You may use %u for username here
CREATEHOMES="yes" # Create home directories and set rights ?
HOMESKEL="/etc/skel" # Directory where the skeleton files are located. Ignored if undefined or nonexistant.
HOMEPERMS="700" # Default permissions for home directories

#PASSWORDGEN="cat /dev/random | LC_ALL=C tr -dc 'a-zA-Z0-9' | head -c8"
PASSWORDGEN="pwgen"
PASSWORDGEN="echo changeme"
PASSWORDGEN="echo %u"
PASSWORDGEN=""

# WARNING !!!! DO NOT FORGET TO TURN OFF RECORDING WHEN DONE !
RECORDPASSWORDS="no"
PASSWORDFILE="/var/log/ldapscripts_passwd.log"

# Путь к файлу лога
LOGFILE="/var/log/ldapscripts.log"

# Temporary folder
TMPDIR="/tmp"

# OpenLDAP client commands
LDAPSEARCHBIN="/usr/local/bin/ldapsearch"
LDAPADDBIN="/usr/local/bin/ldapadd"
LDAPDELETEBIN="/usr/local/bin/ldapdelete"
LDAPMODIFYBIN="/usr/local/bin/ldapmodify"
LDAPMODRDNBIN="/usr/local/bin/ldapmodrdn"
LDAPPASSWDBIN="/usr/local/bin/ldappasswd"

Добавляем первую группу в корень дерева ou=sysgroups,ou=localhost,dc=testdn1:

# ldapaddgroup sysusers1
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added group sysusers1 to LDAP

Находим её:

# ldapsearch -x -b "dc=testdn1" "cn=sysusers"
# extended LDIF
#
# LDAPv3
# base <dc=testdn1> with scope subtree
# filter: cn=sysusers
# requesting: ALL
#

# sysusers, sysgroups, localhost, testdn1
dn: cn=sysusers,ou=sysgroups,ou=localhost,dc=testdn1
objectClass: posixGroup
cn: sysusers
gidNumber: 10000
description: Group account

 

ldap_posix_add_3

Так же можно воспользоваться утилитой lsldap из того же набора ldapscripts:

# lsldap
Warning : using command-line passwords, ldapscripts may not be safe
dn: dc=testdn1
objectClass: top
objectClass: dcObject
objectClass: organization
dc: testdn1
o: TestLDAP
description: Testing LDAP server DIT number one

dn: ou=localhost,dc=testdn1
objectClass: organizationalUnit
ou: localhost

dn: ou=sysgroups,ou=localhost,dc=testdn1
objectClass: organizationalUnit
ou: sysgroups

dn: ou=sysusers,ou=localhost,dc=testdn1
objectClass: organizationalUnit
ou: sysusers

dn: cn=sysusers,ou=sysgroups,ou=localhost,dc=testdn1
objectClass: posixGroup
cn: sysusers
gidNumber: 10000
description: Group account

Добавим вторую группу:

# ldapaddgroup wheel
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added group wheel to LDAP

Теперь – добавляем первого пользователя, в группу sysusers – это будет его primary, т.е. – основная группа. Как в LDAP пользователя добавить во вторую группу с помощью ldapscripts – будет показано дальше:

# ldapadduser sysuser1 sysusers
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added user sysuser1 to LDAP
Setting password for user sysuser1
New Password:
Retype New Password:
Successfully set password for user sysuser1
Successfully created home directory for user sysuser1

Проверим домашнюю директорию:

# ls -l /home/ | grep sys
drwx------ 2 10000 10000 512 Dec 4 2012 sysuser1

Директория создана, права доступа установлены в соответствии с его UID и GID.

Снова воспользуемся утилитой lsldap с ключём -u, что бы вывести список пользователей:

# lsldap -u
Warning : using command-line passwords, ldapscripts may not be safe
dn: uid=sysuser1,ou=sysusers,ou=localhost,dc=testdn1
objectClass: account
objectClass: posixAccount
cn: sysuser1
uid: sysuser1
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/sysuser1
loginShell: /usr/local/bin/bash
gecos: sysuser1
description: User account
userPassword:: e1NTSEF9aFJ3UXlUV09PNndLRXV4VzErQzdHeXVZZjVqV0M3a3Y=

ldap_posix_add_4

Или – утилитой ldapid из этого же набора:

# ldapid sysuser1
Warning : using command-line passwords, ldapscripts may not be safe
uid=10000(sysuser1) gid=10000(sysusers) groups=10000(sysusers)

Ещё одна полезная утилита – ldapfinger:

# ldapfinger -u sysuser1
Warning : using command-line passwords, ldapscripts may not be safe
dn: uid=sysuser1,ou=sysusers,ou=localhost,dc=testdn1
objectClass: account
objectClass: posixAccount
cn: sysuser1
uid: sysuser1
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/sysuser1
loginShell: /usr/local/bin/bash
gecos: sysuser1
description: User account
userPassword:: e1NTSEF9aFJ3UXlUV09PNndLRXV4VzErQzdHeXVZZjVqV0M3a3Y=

Теперь – мы хотим добавить созданного пользователя во вторую группу, wheel. Для этого – воспользуемся утилитой ldapaddusertogroup:

# ldapaddusertogroup sysuser1 wheel
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added user sysuser1 to group cn=wheel,ou=sysgroups,ou=localhost,dc=testdn1

Посмотрим на пользователя ещё раз:

# ldapid sysuser1
Warning : using command-line passwords, ldapscripts may not be safe
uid=10000(sysuser1) gid=10000(sysusers) groups=10000(sysusers),10001(wheel)

Ссылки по теме

http://manpages.ubuntu.com
http://www.zytrax.com
И её перевод на Pro-LDAP:
http://pro-ldap.ru

Bongdalu – trực tiếp tỷ số bóng đá chất lượng miễn phí