I'm making progress with ldapclient.  By narrowing the group lookup to only
the OU we use for assigning file permissions lookups are now a reasonable
speed.

However, nested groups might be the real dead end with this approach.  From
the ldapclient man page for attributeMap: "Note that nested groups are not
currently supported, and unexpected results may be obtained if they are
used."
----
I was able to join the system to the domain with smbadm.  It's not clear
how to get uid & gid resolution with this.  It seems more focused on
serving to Windows via SMB.

In the past, I have used compiled samba to join the AD domain with winbind
to server our Windows desktop users.   Kind of messy to maintain.

I was hoping to utilize something that I don't have an additional stack to
maintain.   It appears that out-of-the-box Illumos is not suited to handle
our environment.
----
Right now I'm considering any direct join of the domain a dead end.   I'm
focusing now on looking at OpenLDAP and OpenDJ as a way to consolidate the
LDAP directory to only the users and groups we are concerned with on our
ZFS storage systems.

Thanks, everyone for your input!

-Chip




On Wed, Mar 23, 2022 at 7:02 PM Ian Kaufman <ikauf...@eng.ucsd.edu> wrote:

> Have you tried filtering on more than one object? It came in very handy
> when I did searches against AD
>
> On Wed, Mar 23, 2022, 11:06 AM Schweiss, Chip <c...@innovates.com> wrote:
>
>> My problem is that I have no control over our institution's AD
>> environment.  There are a couple of dozen AD servers scattered around 3
>> campuses.  There is a ldap proxy on each campus that I've been given SSL
>> certs for all the way to the public root.  This is where I started testing
>> by putting all those certs in the database.  I can do ldapseach against any
>> AD server or the proxy with SSL.
>>
>> I did just manage to find one AD server still allowing unencrypted LDAP
>> and got ldapclient to connect to it.   That won't last as it will get
>> decommissioned or upgraded soon.  However, I can do other tests to see if
>> it is even feasible.
>>
>> Now I'm thinking I may be at a dead end with Illumos here.  Our AD has
>> over 500K users in the database.   That makes group lookups horribly slow
>> unless some optimizations can be applied.  I managed to find a group lookup
>> mode in SSSd on our Linux systems that works reasonably well with local
>> caching.
>>
>> Looking up my own ID on Illumos it takes over 4 minutes to look up groups
>> and faults on ID lookup.  I'm also missing nested group memberships.
>> Nested memberships blow up really bad using the Microsoft
>> prescribed (member:1.2.840.113556.1.4.1941:=%{UserDN}) search.  That will
>> almost always timeout on our domain.
>>
>> # time id lschweiss
>> uid=1068768(lschweiss) gid=1000070 groups=1000070Segmentation Fault (core
>> dumped)
>>
>> real    0m3.637s
>> user    0m0.007s
>> sys     0m0.015s
>>
>> # time groups lschweiss
>> lschweiss : groups: cannot find name for group ID 1000070
>> 1000070 nrg-group-ib wuitglobal require mfa WUSTL-EpicPlayground
>> SN_DSO_WUIT WUSTL-EpicProduction WUIT-SL-Matlab MIR_MDM_Users NRG Desktop
>> Support nrg NRG-IT-ADMIN AD-Groups-NRG root root Proxy-Faculty-Staff-WK
>> Proxy-Students-WK NRG-HCPi-FS MIR All Users
>> storage-uk-biobank-UKB_Genetics-ro NRG-MIRRIR-UKB-cardiac
>> NRG-MIRRIR-UKB-pheno
>>
>> real    4m14.335s
>> user    0m0.578s
>> sys     0m0.784s
>>
>> Ultimately I want NFS to handle more than 16 groups.  For this to happen
>> the server needs to know what groups a user is in.
>> ----
>> I guess I'll try SMB next.   I couldn't find an SSSd port to Illumos.
>>  That would be great.
>>
>> -Chip
>>
>>
>>
>> On Wed, Mar 23, 2022 at 11:35 AM Brian Bennett <brian.benn...@joyent.com>
>> wrote:
>>
>>> You're probably missing the issuer (intermediate) and/or the trust
>>> anchor (root). Most servers do not provide the root, instead relying on the
>>> client to already have a list of trusted roots (i.e., the trust anchor).
>>>
>>> The illumos LDAP client has no trust anchor at all, so you need to use
>>> certutil to add the certs all the way up to and including the root
>>> self-signed certificate. If you're using a public issuer, you can probably
>>> just dig the root out of the curl or mozilla-certificates root list and add
>>> that. If you're using Let's Encrypt, you can use the list at the bottom of
>>> this message.
>>>
>>> For example, here's mine (these are all Let's Encrypt, by the way):
>>>
>>> # p certutil -d /var/ldap -L
>>>
>>> Certificate Nickname                                         Trust
>>> Attributes
>>>
>>>  SSL,S/MIME,JAR/XPI
>>>
>>> E1                                                           C,,
>>> R3                                                           C,,
>>> Let's Encrypt Authority X4                                   C,,
>>> ISRG Root X2                                                 C,,
>>> ISRG Root X1                                                 C,,
>>> E2                                                           C,,
>>> R4                                                           C,,
>>> Let's Encrypt Authority X3                                   C,,
>>> Let's Encrypt Authority X4                                   C,,
>>> Let's Encrypt Authority X1                                   C,,
>>> Let's Encrypt Authority X2                                   C,,
>>> Let's Encrypt Authority X3                                   C,,
>>>
>>> Without the root in the trust database you'll get an error about certs
>>> issued by an unknown authority.
>>>
>>> For each PEM file you're adding, run this:
>>>
>>> openssl x509 -noout -subject_hash -issuer_hash -in <file>
>>>
>>> The issuer_hash on the leaf certificate will be the subject_hash on the
>>> next certificate in the chain. You need to keep following the chain until
>>> the subject_hash and issuer_hash are the same, that's the root certificate
>>> which also needs to be in the database. If you've got a broken chain, the
>>> certs won't be considered valid.
>>>
>>> If you're using Let's Encrypt, this is the current list of certs to add
>>> to the trust database:
>>>
>>> https://letsencrypt.org/certs/isrgrootx1.pem
>>> https://letsencrypt.org/certs/isrg-root-x2.pem
>>> https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
>>> https://letsencrypt.org/certs/lets-encrypt-x4-cross-signed.pem
>>> https://letsencrypt.org/certs/lets-encrypt-r3.pem
>>> https://letsencrypt.org/certs/lets-encrypt-e1.pem
>>> https://letsencrypt.org/certs/lets-encrypt-r4.pem
>>> https://letsencrypt.org/certs/lets-encrypt-e2.pem
>>> https://letsencrypt.org/certs/letsencryptauthorityx1.pem
>>> https://letsencrypt.org/certs/letsencryptauthorityx2.pem
>>> https://letsencrypt.org/certs/letsencryptauthorityx3.pem
>>> https://letsencrypt.org/certs/letsencryptauthorityx4.pem
>>>
>>>
>>> --
>>> Brian Bennett
>>> Systems Engineer, Cloud Operations
>>> Joyent, Inc. | www.joyent.com
>>>
>>> On Mar 23, 2022, at 8:22 AM, Schweiss, Chip <c...@innovates.com> wrote:
>>>
>>> I'm still fighting this.  It's really hard to see where it is failing.
>>>  ldapclient times out starting the ldap client service.  I can see from
>>> tcpdump it is trying repeatedly to make the connection but appears to be
>>> failing with the SSL handshake.
>>>
>>> I collected the certificate chain with openssl:
>>>
>>> # openssl s_client -connect accounts14.ad.wustl.edu:636 -showcerts
>>>
>>> It gave me a CA cert and server cert.   I put those both in files and
>>> created the certificate store:
>>>
>>> # certutil -A -n ca-cert -i ~/accounts.ldap-certs/ca.crt -a -t 'C,,' -d
>>> /var/ldap
>>> # certutil -A -n accounts-ldap-cert -i
>>> ~/accounts.ldap-certs/accounts-ldap.crt -a -t 'C,,' -d /var/ldap
>>>
>>> Here's my ldapclient call:
>>>
>>> ldapclient -v manual \
>>>     -a credentialLevel=proxy \
>>>     -a proxyDN="CN=NRG-zfs-proxy,OU=Service
>>> Accounts,DC=accounts,DC=ad,DC=wustl,DC=edu" \
>>>     -a proxyPassword="**{redacted}**" \
>>>     -a authenticationMethod=tls:sasl/DIGEST-MD5 \
>>>     -a defaultSearchBase="DC=accounts,DC=ad,DC=wustl,DC=edu" \
>>>     -a domainName=accounts.ad.wustl.edu \
>>>     -a certificatePath=/var/ldap \
>>>     -a defaultServerList=accounts14.ad.wustl.edu:636 \
>>>     -a followReferrals=false \
>>>     -a defaultSearchScope=sub \
>>>     -a attributeMap=group:userpassword=userPassword \
>>>     -a attributeMap=group:memberuid=memberUid \
>>>     -a attributeMap=group:gidnumber=gidNumber \
>>>     -a attributeMap=passwd:gecos=gecos \
>>>     -a attributeMap=passwd:gidnumber=gidNumber \
>>>     -a attributeMap=passwd:uidnumber=uidNumber \
>>>     -a attributeMap=passwd:uid=sAMAccountName \
>>>     -a attributeMap=passwd:homedirectory=unixHomeDirectory \
>>>     -a attributeMap=passwd:loginshell=loginShell \
>>>     -a attributeMap=shadow:shadowflag=shadowFlag \
>>>     -a attributeMap=shadow:userpassword=userPassword \
>>>     -a attributeMap=shadow:uid=sAMAccountName \
>>>     -a objectClassMap=group:posixGroup=group \
>>>     -a objectClassMap=passwd:posixAccount=user \
>>>     -a objectClassMap=shadow:shadowAccount=user \
>>>     -a
>>> serviceSearchDescriptor=passwd:OU=Current,OU=People,DC=accounts,DC=ad,DC=wustl,DC=edu?sub
>>> \
>>>     -a
>>> serviceSearchDescriptor=group:OU=Groups,DC=accounts,DC=ad,DC=wustl,DC=edu?sub
>>>
>>>
>>> I can use the same credentials to do ldapsearch via the SSL port so I at
>>> least know that it works.   I've tried every documented authentication
>>> method.   It aways times out starting the service.
>>>
>>> Any clue what I'm missing or doing wrong here?
>>>
>>> Thanks again,
>>> -Chip
>>>
>>>
>>>
>>>
>>>
>>> On Sat, Mar 19, 2022 at 2:39 PM Brian Bennett <brian.benn...@joyent.com>
>>> wrote:
>>>
>>>> I can also confirm that LDAPS works. I've been using it for years. The
>>>> only catch is that you need to import your certs into the LDAP trust store.
>>>>
>>>> The syntax, if you need it, is:
>>>>
>>>> certutil -A -d . -i <certificate file> -n <certificate name> -t 'C,,'
>>>>
>>>> You need to import all the way up to the root. There is no pre-existing
>>>> list of trust anchors.
>>>>
>>>>
>>>> --
>>>> Brian Bennett
>>>> Systems Engineer, Cloud Operations
>>>> Joyent, Inc. | www.joyent.com
>>>>
>>>> On Mar 18, 2022, at 12:44 PM, Jason King <jason.brian.k...@gmail.com>
>>>> wrote:
>>>>
>>>> A bit of clarification ‘ldaps’ is running ldap over TLS on port 636
>>>> (similar to http port 80 and https port 443).
>>>>
>>>> This is different from StartTLS which connects in plaintext on port 389
>>>> then sends a request to switch the existing connection to TLS.
>>>>
>>>> Ldaps should be supported, StartTLS is not.
>>>>
>>>> There’s also a bit of a third option. If you are using smbadm to join
>>>> an illumos system to active directory and use idmap to map SIDs to
>>>> UID/GIDs, it can also use SASL/GSSAPI (basically Kerberos).
>>>>
>>>>
>>>>
>>>> *From: *Ian Kaufman <ikauf...@eng.ucsd.edu>
>>>> *Date: *Friday, March 18, 2022 at 2:36 PM
>>>> *To: *omnios-discuss <omnios-disc...@lists.illumos.org>
>>>> *Cc: *illumos-discuss <discuss@lists.illumos.org>
>>>> *Subject: *[discuss] Re: [OmniOS-discuss] Active Directory LDAP client
>>>> I used to force port 636 comm with my OpenSolaris clients and had my
>>>> LDAP slaves listen and handle both TLS and LDAPS
>>>>
>>>> Ian
>>>>
>>>> On Fri, Mar 18, 2022 at 8:38 AM Schweiss, Chip <c...@innovates.com>
>>>> wrote:
>>>>
>>>> I'm trying to join my OmniOS 038 systems to our AD so that UIDs and
>>>> GIDs resolve and I can get around the NFS 16 group limit.
>>>>
>>>> The problem I'm having is that it appears the LDAP client in Illumos
>>>> has no support for LDAPS which is now a requirement.
>>>>
>>>> From the ldapclient man page:
>>>>
>>>> CAUTION
>>>>        Currently StartTLS is not supported by libldap.so.5, therefore
>>>> the port
>>>>        number provided refers to the port used during a TLS open,
>>>> rather than
>>>>        the port used as part of a StartTLS sequence. To avoid timeout
>>>> delays,
>>>>        mixed use of TLS and non-TLS authentication mechanisms is not
>>>>        recommended.
>>>>
>>>>        For example:
>>>>
>>>>          -h foo:1000 -a authenticationMethod=tls:simple
>>>>
>>>>        ...or:
>>>>
>>>>          defaultServerList= foo:1000
>>>>          authenticationMethod= tls:simple
>>>>
>>>>        The preceding refers to a raw TLS open on host foo port 1000,
>>>> not an
>>>>        open, StartTLS sequence on an unsecured port 1000. If port 1000
>>>> is
>>>>        unsecured the connection will not be made.
>>>>
>>>>        As a second example, the following will incur a significant
>>>> timeout
>>>>        delay while attempting the connection to foo:636 with an
>>>> unsecured
>>>>        bind.
>>>>
>>>>          defaultServerList= foo:636 foo:389
>>>>          authenticationMethod= simple
>>>>
>>>> Has anyone found a way to work around this?
>>>>
>>>> Thanks,
>>>> -Chip
>>>>
>>>>
>>>>
>>>> --
>>>> Ian Kaufman
>>>> Research Systems Administrator
>>>> UC San Diego, Jacobs School of Engineering ikaufman AT ucsd DOT edu
>>>>
>>>> *UC San Diego is working thoughtfully and strategically to consider our
>>>> return to campus, with safety as the top priority.  Stay informed about UC
>>>> San Diego developments and updates in response to COVID-19 at *
>>>> *https://returntolearn.ucsd.edu* <https://returntolearn.ucsd.edu/>
>>>>
>>>>
>>>>
>>> *illumos <https://illumos.topicbox.com/latest>* / omnios-discuss / see
> discussions <https://illumos.topicbox.com/groups/omnios-discuss> +
> participants <https://illumos.topicbox.com/groups/omnios-discuss/members>
> + delivery options
> <https://illumos.topicbox.com/groups/omnios-discuss/subscription>
> Permalink
> <https://illumos.topicbox.com/groups/omnios-discuss/Tb99e88b61c690e04-M52d936aa4bf9a3bfa78a209a>
>

------------------------------------------
illumos: illumos-discuss
Permalink: 
https://illumos.topicbox.com/groups/discuss/Tb99e88b61c690e04-Md5f737553a700c69e3406dbb
Delivery options: https://illumos.topicbox.com/groups/discuss/subscription

Reply via email to