Попытка добавить локального пользователя в систему CentOS 6.3, которая использует ldap для аутентификации Samba, но блокируется существующей записью пользователя в ldap.
[root@samba ~]# adduser wchandy
adduser: user 'wchandy' already exists
[root@samba ~]# useradd wchandy
useradd: user 'wchandy' already exists
Пользователь еще не является локальным пользователем:
[root@edgar2 ~]# grep wchandy /etc/passwd
Но они являются пользователем Samba в ldap:
[root@edgar2 ~]# smbldap-usershow wchandy | grep uid
dn: uid=wchandy,ou=people,dc=ucsc,dc=edu
uid: wchandy
uidNumber: 30490
adduser не имеет локальной опции. Как заставить adduser работать правильно для добавления локальных пользователей при наличии аутентификации ldap.
Другие вещи, которые следует учитывать:
Первоначально я настроил аутентификацию samba-ldap с помощью удобной (но, похоже, необратимой) команды authconfig:
[root@samba ~]# authconfig --enableshadow --enablemd5 --enableldap \
--enableldapauth --enableldaptls --enablemkhomedir \
--ldapserver=dir.mydomain.com --ldapbasedn="dc=mydomain,dc=com" \
--enablelocauthorize --updateall
Мой / etc / sysconfig / authconfig выглядит так:
IPADOMAINJOINED=no
USEMKHOMEDIR=yes
USEPAMACCESS=no
CACHECREDENTIALS=yes
USESSSDAUTH=no
USESHADOW=yes
USEWINBIND=no
PASSWDALGORITHM=sha512
FORCELEGACY=no
USEFPRINTD=yes
USEHESIOD=no
FORCESMARTCARD=no
USEDB=no
USELDAPAUTH=yes
IPAV2NONTP=no
USELDAP=yes
USECRACKLIB=yes
USEIPAV2=no
USEWINBINDAUTH=no
USESMARTCARD=no
USELOCAUTHORIZE=yes
USENIS=no
USEKERBEROS=no
USESYSNETAUTH=no
USESSSD=no
USEPASSWDQC=no
Моя конфигурация samba была перенесена из системы RHEL4.x в CentOS 6.3. Теперь вместо беспорядочного мэшапа nss, pam и неизвестно чего CentOS 6.x использует довольно простой и удобный sssd.
Мой /etc/sssd/sssd.conf выглядит так:
[domain/default]
cache_credentials = True
#cache_credentials = False
ldap_search_base = dc=mydomain,dc=com
krb5_realm = EXAMPLE.COM
krb5_server = kerberos.example.com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://dir.mydomain.com/
ldap_tls_cacertdir = /etc/openldap/cacerts
#ldap_tls_reqcert = allow
entry_cache_timeout = 5
debug_level = 31
[sssd]
config_file_version = 2
services = nss, pam
# SSSD will not start if you do not configure any domains.
# Add new domain configurations as [domain/<NAME>] sections, and
# then add the list of domains (in the order you want them to be
# queried) to the "domains" attribute below and uncomment it.
# domains = LDAP
domains = default
#debug_level = 31
[nss]
[pam]
debug_level = 31
Спасибо за помощь. Если я смогу заставить мою локальную аутентификацию и аутентификацию samba-ldap работать независимо, я буду в восторге.
ОБНОВЛЕНИЕ: хотя ниже приведено несколько разумно достаточных обходных путей, вот краткий обзор совета, который я получил от экспертов из списка sssd_users: «Да, он мог работать в более ранних версиях ОС с использованием nss и pam, но это была не лучшая практика. чтобы разрешить общие UID. Новые системы, использующие sssd, предотвращают это ". Хотя мой вариант использования был совершенно допустим, моя система намеренно препятствовала тому, что я хотел сделать.
Однако я так и не нашел способа отключить или отменить какое-либо из многих изменений, которые authconfig внес в мою систему. Так что, если параметры, которые я дал authconfig, были неправильными, пути назад не было.
Ни один из этих двух обходных путей не является оптимальным, но они дают системным администраторам возможность двигаться вперед, если они оказываются в затруднительной ситуации, когда LDAP и локальный файл passwd блокируют друг друга.
Обходной путь 1: Я создал локального пользователя с другим UID (именем пользователя), чтобы предоставить ssh-доступ человеку, у которого уже была запись LDAP / Samba. Возможно, самое глупое решение для системного администратора, которое я когда-либо делал.
Обходной путь 2: Немного сложнее, но сводится к добавлению локального пользователя с тем же uidNumber, что и в LDAP.
Оба они работают, но ни один из них не решает основную проблему, позволяющую аутентификации использовать LDAP исключительно для Samba auth и / etc / passwd для локальной аутентификации. Но в случае отсутствия другого решения этого придется делать.
Мой последний ответ был плохим, не обращайте на это внимания.
Я считаю, что ваш единственный вариант - редактировать вручную /etc/passwd
(vipw
предпочтительнее, потому что это избавляет вас от ваших собственных ошибок). В -o
опция позволяет вам создавать несколько имен для одного UID, но нет эквивалентной опции для указания passwd
игнорировать уже существующее имя при выполнении поиска NSS.
getent passwd
покажет вам, как uids каскадируются после добавления пользователя; первая запись побеждает. Убедитесь, что uid идентичен, чтобы избежать проблем с изменением разрешений. (ваши примеры не включали -u
синтаксис)