<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Guys,<div class=""><br class=""></div><div class="">I've done a small scale demo of using FreeIPA instead of an Open Directory Server to serve Apple OS X clients. This is based on my experiences from one year ago (Ticket #4813). I've also attached some screenshots.</div><div class=""><br class=""></div><div class=""><b class="">Here's what works:</b></div><div class=""><ul class="MailOutline"><li class="">Host sees the IPA Server</li><li class="">Host is able to register to the IPA server</li><li class="">Host creates a computer account (needs a bit of help here)</li><li class="">Host sets it's own random password (including kerberosPrincipalKey and kerberosExtraData)</li><li class="">Host can see the users and other computers in the LDAP</li><li class="">Host can use TLS registration with FreeIPA's own root certificate as found in cn=CACert,cn=ipa,cn=etc</li><li class="">Host can use just Kerberos for authentication and doesn't need an Apple Password Server</li></ul><div class=""><br class=""></div><div class=""><b class="">Here's what needs to be done to get there:</b></div></div><div class=""><ul class="MailOutline"><li class="">Create a cn=config,$baseDN entry (attached example ldif). This can be created automatically based on a template.</li><li class="">Create and ACI that gives anonymous read access to cn=config,$baseDN (SNIP #3)</li><li class="">Modify an existing ACI to give altSecurityIdentities and description to anonymous/public consumption (SNIP #4)</li><li class="">Extend the schema to include apple-configuration (SNIP #1)</li><li class="">Extend the schema to include apple-user (should be renamed to apple-account since it applies also to hosts) (SNIP #2)</li><li class="">Add PLAIN to the supported SASL mechanisms (I don't know why it's missing anyway because it's restricted to TLS by default). For me, without further investigation of the reasons, I had to also disable CRAM-MD5 and DIGEST-MD5 on the 389 DS.</li><li class="">Make sure (if you upgraded from a v3) that you have OCSP and/or CRL working</li><li class="">Add an _ldap._tcp entry in avahi and/or server the LDAP server via DHCP and/or serve the search domain via DHCP and make the DNS-SD service entries for it.</li></ul><div class=""><br class=""></div><div class=""><b class="">Here's what's missing from FreeIPA:</b></div><div class=""><br class=""></div><div class="">A 389 Directory Server plugin that generates altSecurityIdentities and AuthAuthority values automatically for an objectClass=apple-account.</div></div><div class="">This would automatically present the following entries (user admin used as an example):</div><div class="">--</div><div class=""><font face="Courier" class="">altSecurityIdentitites: Kerberos:admin@<a href="http://example.org" class="">EXAMPLE.ORG</a><br class="">AuthAuthority: ;Kerberosv5;;<a href="mailto:admin@example.org" class="">admin@EXAMPLE.ORG</a>;<a href="http://example.org" class="">EXAMPLE.ORG</a>;</font></div><div class="">--</div><div class="">AuthAuthority is interesting because it supports not only basic LDAP authentication, but also Kerberos, Netlogon and Apple Password Server and you can specify multiple authentication authorities (including an Active Directory).</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">A better way to specify homes for users. Not everyone uses automount and automount maps (although OS X can use them). We need to be able to specify not the assumably mounted home directory, but the protocol (afp, nfs, cifs, etc.), server and share/directory. Furthermore, most Mac Admins will have a heart-attack if they see an auto-mounted /home/$username instead of the usual /Users/$username.</div><div class=""><br class=""></div><div class=""><b class="">Here's what's missing from OS X:</b></div><div class="">A way to request OS X to do GSS-TSIG registration to the DNS. We may have an MCX method to do that, but I haven't investigated. NSUpdate is available and has support for gss-tsig. I think that for Active Directory it does this automatically, and if so, we should be able to reproduce it.</div><div class=""><br class=""></div><div class="">A way to specify that the fqdn argument should actually be an FQDN. We might have to write a 389 DS plugin to take the CN without the final "$" and add the domain name after it.</div><div class=""><br class=""></div><div class="">SUDO Map support. Currently, the only way to specify if an account has sudo rights is to make it an admin. This makes it clear that without Password Server support (partly implemented in the LPWS project), the usage scenarios are limited to normal users and SSO to servers. OTOH, OS X only knows admin and non-admin accounts, so it's not that bad.</div><div class=""><br class=""></div><div class=""><b class="">Steps to produce my demo install before the patches below:</b></div><div class=""><font face="Courier" class="">ipa-server-install -r <a href="http://example.org" class="">EXAMPLE.ORG</a> -n <a href="http://example.org" class="">example.org</a> -p deadbeef -a deadbeef -P deadbeef --hostname=<a href="http://ipa.example.org" class="">ipa.example.org</a> --ip-address=172.16.23.138 --ssh-trust-dns -U --setup-dns --no-forwarders</font><br class=""></div><div class=""><br class=""></div><div class="">Is anyone from Red Hat willing to pick this up? It would be a nice addition. If so, I am offering to do the testing and fine-tuning for all post-Tiger releases. I can also share virtual machines for server and client configuration.</div><div class="">The Apple schemas are included in Apple's GPL code-drops for OpenLDAP if anyone is wondering about licensing. We don't need the full schemas because we can map most stuff to our own schema and it works brilliantly.</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">Răzvan</div><div class=""><br class=""></div><div class="">-------- SNIP #1----------</div><div class=""><font face="Courier" class="">dn: cn=schema<br class="">changetype: modify<br class="">add: attributeTypes<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.12.3 NAME 'apple-config-realname' DESC 'config real name' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.12.7 NAME 'apple-kdc-authkey' DESC 'KDC master key RSA encrypted with realm public key' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.12.8 NAME 'apple-kdc-configdata' DESC 'Contents of the kdc.conf file' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.1.19 NAME 'apple-keyword' DESC 'keywords' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.12.5 NAME 'apple-ldap-replica' DESC 'LDAP replication list' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.12.6 NAME 'apple-ldap-writable-replica' DESC 'LDAP writable replication list' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.12.4 NAME 'apple-password-server-list' DESC 'password server replication plist' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.12.1 NAME 'apple-password-server-location' DESC 'password server location' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )<br class="">attributeTypes: (1.3.6.1.4.1.250.1.60 NAME 'ttl' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )<br class="">attributeTypes: (1.3.6.1.4.1.63.1000.1.1.1.17.1 NAME 'apple-xmlplist' DESC 'XML plist data' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )<br class="">-<br class="">add: objectclasses<br class="">objectClasses: (1.3.6.1.4.1.63.1000.1.1.2.12 NAME 'apple-configuration' DESC 'configuration' SUP top STRUCTURAL MAY ( cn $ apple-config-realname $ modifyTimestamp $ apple-password-server-location $ apple-password-server-list $ apple-ldap-replica $ apple-ldap-writable-replica $ apple-keyword $ apple-kdc-authkey $ apple-kdc-configdata $ apple-xmlplist $ ttl ) )</font><br class=""></div><div class="">-------- END of SNIP #1-------</div><div class=""><br class=""></div><div class=""><div class="">-------- SNIP #2----------</div><div class=""><font face="Courier" class="">cn=schema:</font></div><div class=""><font face="Courier" class="">changetype: modify<br class="">add: attributeTypes<br class="">attributesTypes: ( 1.2.840.113556.1.4.867 NAME 'altSecurityIdentities' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )<br class="">attributesTypes: ( 1.3.6.1.4.1.63.1000.1.1.2.16.2 NAME ( 'authAuthority' 'authAuthority2' ) DESC 'password server authentication authority' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )</font></div><div class=""><font face="Courier" class="">-</font></div><div class=""><font face="Courier" class="">add: objectclasses<br class="">objectclasses: ( 1.3.6.1.4.1.63.1000.1.1.2.1 NAME 'apple-user' SUP top AUXILIARY DESC 'apple user account'  MAY ( authAuthority $ sambaAcctFlags $ sambaPwdLastSet $ sambaLogonTime $ sambaLogoffTime $ sambaKickoffTime $ sambaHomeDrive $ sambaLogonScript $ sambaProfilePath $ sambaUserWorkstations $ sambaHomePath $ sambaSID $ sambaPrimaryGroupSID $ userCertificate $ userPKCS12 $ jpegPhoto $ altSecurityIdentities ) )</font></div><div class="">-------- END of SNIP #2-------</div></div><div class=""><br class=""></div><div class="">-------- SNIP #3 ----------</div><div class=""><font face="Courier" class="">targetattr = "description || cn || objectclass || ou || apple-xmlplist")(targetfilter ="(objectclass=apple-configuration)")(version 3.0;acl "permission:System: Read Mac Profile";allow (compare,read,search) userdn = "<a href="ldap:///anyone" class="">ldap:///anyone</a>";)</font></div><div class="">-------- END of SNIP #3-------</div><div class=""><br class=""></div><div class="">-------- SNIP #4 ----------</div><div class=""><font face="Courier" class="">(targetattr = "altSecurityIdentities || cn || createtimestamp || description || displayname || entryusn || gecos || gidnumber || givenname || homedirectory || initials || ipantsecurityidentifier || loginshell || manager || modifytimestamp || objectclass || sn || title || uid || uidnumber")(targetfilter = "(objectclass=posixaccount)")(version 3.0;acl "permission:System: Read User Standard Attributes";allow (compare,read,search) userdn = "<a href="ldap:///anyone" class="">ldap:///anyone</a>";)</font></div><div class="">--------- END of SNIP #4------</div><div class=""></div></body></html>