Security – need Pre-Windows 2000 Compatible Access to enumerate group membership

active-directoryldapSecurity

I am trying to lock down security including removing the leaked password hashes that the UNIX addon creates. I removed Authenticated Users from the Pre-Windows 2000 Compatible Access group. However after doing this, a small portion of users could not log into various non-Windows things like Redmine, Subversion, our VPN etc. These services authenticate with a ldapbind user account and then use SSL LDAP to authenticate against AD and check group membership. We also use Linux machines running SSSD that authenticate via Kerberos and check group membership with LDAP.

The problem I found is that group membership could not be enumerated for a small amount of users. They can be authenticated but not authorized. For example if I log onto a Linux box and do "id user" nothing would be found for these users. However "id user" would return the information for most of the users. I can't think of any difference between the user accounts that work and those that don't. What could be going on?

Best Answer

You removed Authenticated Users from Pre-Windows 2000 Compatible Access in order to prevent users from reading each others UNIX password hashes. Pre-Windows 2000 Compatible Access has rights to read almost all properties of most objects and is how most non-admin security principals read object properties. Group membership is determined for a user by reading the memberOf attribute and, like unixUserPassword, the ability to read it by most of your users is now removed. The reason users who ARE in protected groups are NOT broken but users who are NOT in protected groups ARE broken is because, oddly-enough, the AdminSDHolder grants more permissive rights to read properties of protected objects than unprotected objects.

There's no "correct" answer to fix your issue since it's generally not a good idea to store confidential data in AD in the first place (this is exactly the reason why). You might look into setting the confidentiality bit. I've never done it but this KB article goes into detail: How to mark an attribute as confidential in Windows Server 2003 Service Pack 1