Здравствуйте.
Пытаюсь найти, как отключить нахрен starttls и заставить samba подключаться к openldap, используя указанные сертификаты и только их.
Сперва цитатка с сайта самбы http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html#LDAPSSL :
This option is used to define whether or not Samba should use SSL when connecting to the ldap server This is NOT related to Samba's previous SSL support which was enabled by specifying the --with-ssl option to the configure script.
LDAP connections should be secured where possible. This may be done setting either this parameter to Start_tls or by specifying ldaps:// in the URL argument of passdb backend.
The ldap ssl can be set to one of two values:
Off = Never use SSL when querying the directory.
start tls = Use the LDAPv3 StartTLS extended operation (RFC2830) for communicating with the directory server.
Please note that this parameter does only affect rpc methods. To enable the LDAPv3 StartTLS extended operation (RFC2830) for ads, set ldap ssl = yes and ldap ssl ads = yes. See smb.conf(5) for more information on ldap ssl ads.
Default: ldap ssl = start tls
Как написано здесь, самба не умеет работать ни с чем, кроме starttls.
Ок, не вопрос. Указываем.
# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_DOMAIN_BDC
Press enter to see a dump of your service definitions
Сам openldap-сервер находится на другой машине. На машине с самбой — только клиентская часть.
Где-то проскакивала информация, что samba использует /etc/openldap/ldap.conf:
BASE dc=test,dc=local
URI ldaps://ldaps.test.local ldaps://ldapm.test.local
DEREF never
TLS_CACERT /etc/openldap/ssl/test-cacert.pem
TLS_CERT /etc/openldap/ssl/sampdc-cl.test.local-cert.pem
TLS_KEY /etc/openldap/ssl/sampdc-cl.test.local-key.pem
TLS_REQCERT hard
В качестве теста, указанные сертификаты с ключом доступны на чтение всем. На сервере, соответственно, обязательно требуются сертификаты.
Шифрование, разумеется, работает прекрасно, pam_ldap и nss_ldap в соответствующем конфиге настроенные аналогично, соединяются с любым из указанных серверов, используя указанные сертификаты, если подложить левый, не подписанный нужным CA, то соединение отбивается.
Так вот, пробуем самбу, получаем отлуп, в логах:
2011-06-18T01:32:00+04:00 ldaps slapd[3589] conn=1279 fd=27 ACCEPT from IP=192.168.1.216:57716 (IP=0.0.0.0:636)
2011-06-18T01:32:00+04:00 ldaps slapd[3589] conn=1279 fd=27 closed (TLS negotiation failure)
2011-06-18T01:32:25+04:00 sampdc smbd[5537] [2011/06/18 01:32:25.640160, 0] lib/smbldap.c:731(smb_ldap_start_tls)
2011-06-18T01:32:25+04:00 sampdc smbd[5537] Failed to issue the StartTLS instruction: Can't contact LDAP server
Если же на сервере openldap смягчить требования в параметре olcTLSVerifyClient с hard на allow, то сервер перестаёт ругаться, а вот самба — продолжает. Если поставить параметру ldap ssl значение yes, то оно игнорируется как неверное.
Итак, вопрос: умеет ли самба, как прочие нормальные программы, соединяться с openldap по шифрованному каналу на 636 порт, с использованием только тех сертификатов и ключа, которые указывает администратор?