Limitations of Classic NT Security
The first questions you may ask when hunkering down to study Active Directory is, "What is it?" and "Why have it?" This section answers the second question. The remainder of the chapter answers the first.
Account administration in a classic NT network is hampered by many limitations. The most important of these limitations are the following:
Restricted SAM size
Multiple logon IDs
Single point of failure at the primary domain controller
Poor operational performance
Poor replication performance
Lack of management granularity
The fact that security databases differ between servers and domain controllers
Nontransitive trust relationships
I'm going to discuss each of these limitations to show exactly how they hinder classic NT operations. This also helps to understand why certain decisions were made in the design of Active Directory.
Restricted Account Database Size
Security accounts in classic NT are stored in the Security Account Manager database, called the SAM for short. The SAM is a flat-file database consisting of a set of Groups and a set of Users. Computer accounts are also included in the SAM as a special form of user account.
Ordinarily, you cannot view the contents of the SAM database because the Registry only permits access by the System account. If you want to take a peek inside, you can set the Registry permissions to give your account or the Administrators group Read access. Actual data is encrypted and stored in binary format, but you can view the structure. Figure 6.1 shows an example.
Figure 6.1. SAM database viewed by the Registry Editor after changing security permissions.
The total number of users, computers, and groups in classic NT is limited because the SAM cannot grow above a certain size. This is due to restrictions on overall Registry size called the Registry size limit (RSL). The RSL permits the Registry to grow to a maximum of 80 percent of paged pool memory. Paged pool memory has a ceiling of 192MB in NT and 470MB in Windows 2000 and Windows Server 2003.
Memory used by the kernel in all Windows server products is divided between non-paged pool memory and paged pool memory. You can view settings for the memory pools in the following Registry key:
HKLM | System | CurrentControlSet | Control | Session Manager |
The default values are zero, indicating that the system calculates them dynamically. You should not change any values without specific direction from Microsoft Product Support Services.
In modern Windows, the RSL is adjusted automatically when the Registry is about to exceed the current RSL setting. The RSL can also be adjusted from the User Interface (UI) using the Computer Management console as follows:
Launch the Computer Management console by entering COMPMGMT.MSC from the Run window.
Right-click the Computer Management icon and select PROPERTIES from the flyout menu.
Select the Advanced tab.
Click Performance Options.
Under Virtual Memory, click Change. This opens the Virtual Memory window.
Put a new value in the Maximum Registry Size field.
The SAM is only one component of the Registry, so its size is restricted still further. A classic SAM has enough room for about 40,000 users if you count the groups you'll need to manage them. Practical limits on replication and user management reduces this number considerably, although I know of at least one company that has in excess of 60,000 users in a single classic NT domain.
Single Point of Failure
The PDC is the only server that has read/write access to the SAM in a classic NT domain. If the PDC crashes or the telecommunications link to it goes down, you cannot make any changes to the domain constituents. You cannot add new users to a group. You cannot join computers to the domain. Users can still log on via a backup domain controller (BDC) but they cannot change their passwords.
To correct this problem, an administrator must promote a BDC to PDC somewhere in the domain. If the promoted BDC doesn't have the horsepower of the original PDC, worldwide performance suffers. A worse situation occurs if the WAN connection that connects the PDC to the rest of the domain goes down. In this situation, you don't dare promote a BDC because when the WAN connection returns, you'll have two PDCs with slightly different security database contents. This forces you to make a Solomon-like decision to keep one PDC and kill the other. In short, you have the makings of a real disaster.
Poor Operational Performance
The single PDC in a classic NT domain also imposes practical limits on daily operations. Assume, for example, that you are an administrator of a global NT network with 30,000 users. You are stationed in Omaha but the PDC for the master security domain is in Boston. You open User Manager for Domains to add a new user. User Manager pulls the account database from the SAM on the PDC, not a local BDC. Depending on the speed of the intervening WAN links, it can take a long, long time to scan through a big SAM. Administrators in large NT domains learn to use command-line utilities to avoid this irritation.
Poor Replication Performance
The hub-and-spoke replication model of classic NT imposes operational limits beyond the problem with limited SAM size. A large network with many BDCs imposes a great deal of load on the PDC to keep the databases replicated. By default, replication occurs when 200 updates accumulate every seven minutes or at a random interval between one and seven minutes. If you don't want to wait for replication to carry an update to a remote BDC, you must use Server Manager to force replication. This means opening still another tool and waiting another period of time.
SAM Database Differs Between Servers and Domain Controllers
The SAM database has a different structure on a classic domain controller than on a regular server. For this reason, a classic NT server cannot be promoted directly to domain controller or demoted from a domain controller down to a server. You must reinstall the operating system completely to change the server's security role.
Lack of Management Granularity
A major weakness in the flat-file SAM structure is its inability to support hierarchical management. Administrators wield supreme power in a domain. A few BuiltIn groups such as Account Admins and Server Operators have specially tailored privileges, but there is no provision for localizing admin rights or creating new groups with a different set of limited rights. Third-party tools are available to overcome this lack of management granularity, but they carry their own replication and management baggage along with a hefty price tag.
Nontransitive Trust Relationships
Of all the limitations in classic NT, the ugliest is the inability to link domains together seamlessly while maintaining separate administrative roles.
Classic domains are linked by trust relationships. Domain controllers in trust-ing domains perform pass-through authentications to check the credentials of users from trust-ed domains. These trust relationships are based on entries in the NT Security database called LSA Secrets. (LSA stands for Local Security Authority.) A pair of LSA Secrets, one in each SAM database, links the two domains together.
Classic trust relationships can only operate in one direction. You can add complementary pairs of trusts to get the appearance of two-way authentication, but the two trusts operate independently.
Worse yet, classic trusts cannot extend beyond the two domains that form the trust endpoints. For instance, if Domain A trusts Domain B and Domain B trusts Domain C, then Domain A does not trust Domain C, or vice versa. This forces large NT systems to have many interlocking trusts. You know when you walk into the operations center of a big NT shop because there's butcher paper on the walls with circles and arrows going everywhere.
Multiple Logon IDs
In an ideal universe, a single network logon account would provide access to all server-based applications. In the past, application designers have been reluctant to base their authentication services on the classic NT logon mechanism. Part of this reluctance was due to the inscrutable set of security APIs that Microsoft provided. Designers were also put off by the inflexible nature of the SAM.
This means trying to achieve true single sign-on under NT has been very difficult. This forces users to memorize passwords for many different applications as well as their network logon. Because users often select the same password for different applications, the entire security system becomes as secure as the most vulnerable interface.
Improvements Made by Active Directory
Now that I've listed the litany of sins in classic NT, let's take a quick look at what Active Directory does to resolve them:
The Active Directory account database in Windows Server 2003 can hold a billion objects. This resolves scalability concerns.
Multiple domain controllers can host read/write copies of Active Directory, eliminating the problems with a single point of failure and poor operational performance.
The Active Directory replication engine can be tuned to make best use of available bandwidth. This reduces WAN traffic.
A modern Windows server (Windows 2000 or Windows Server 2003) can be promoted to a domain controller and demoted back to a member server without the need to reinstall the operating system.
Active Directory can be configured with as many branches as needed to localize and compartmentalize administrative functions.
Active Directory domains still use "trusts" as an operational model but the trusts now give full, two-way access to resources and are fully transitive between domains.
The presence of a truly world-class directory service in Windows has sparked renewed interest among application developers in achieving single sign-on. Microsoft has helped encourage this interest by simplifying the security access methods and greatly expanding the access interfaces.
So, now we know what we're leaving behind. Let's move on to see what we're getting. The next section describes what goes into a directory service.