In-Depth
.NET Leap of Faith
Release of Windows .NET Server is getting close. Should your company consider moving? Windows Insider Bill Boswell makes a case for the upgrade to Microsoft’s newest operating system.
- By Bill Boswell
- November 01, 2002
After much delay and surprisingly little hoopla, Microsoft is poised
to release the next upgrade to the Windows family of servers, Windows
.NET Server 2003, previously code-named Whistler. The family includes
four products: Standard Server, Enterprise Server, Datacenter Server,
and Web Server, which has a shaved-down feature set designed to support
Web services and not much else. The features in these four products significantly
extend the functionality of Win2K while making your systems more secure,
more scalable, and much simpler to manage.
It may come as a surprise to realize that three years have passed since
the release of NT 5.0 build 2195, dubbed Windows 2000. The rate of adoption
has been slower than many analysts expected for a variety of reasons.
First, a vast amount of money and time was spent on preparing for Y2K
just as Win2K came on the scene. This depleted budgets for at least a
year. Then came the economic downturn as the tech bubble collapsed and
the economy slipped into recession, a situation made much worse following
the events of 9/11. But frankly, I think the real reason for the delay
is that many analysts simply underestimated the complexity of deploying
Active Directory, especially into large and complex environments.
If you’re an administrator in an organization that’s already deployed
Win2K and AD, you may be wondering if another round of upgrades is worth
the effort. If you’re an administrator in an organization that hasn’t
yet moved to Win2K, you’re faced with the end of Microsoft’s direct support
for NT in 2003. If you don’t want to stay with NT until drivers simply
aren’t available for your hardware, you need to begin evaluating an upgrade
path. Your upgrade decisions will take place during a time of historically
slim IT resource allocations. Organizations that once bought new technology
based on a few recommendations from a consultant and a front page write-up
in a trade publication now sharpen their red pencils and demand considerable
evidence of prompt (repeat prompt) return on investment for any purchase.
“Are you certain the rollers on that mouse are worn out?”
So, as you begin to evaluate the new features in .NET, you may find yourself
facing one executive after another who will all ask pretty much the same
basic questions. “What are you going to do with .NET? Is it something
we need to spend our money on right now? Should we really be thinking
about deploying a new Microsoft platform when Win2K is now a proven commodity?”
Your answers will vary depending on your role in an organization. With
this in mind, let’s look at the major new features and upgrades in .NET
Server with an eye toward deciding whether they make a sufficiently compelling
case for an upgrade.
Security Administrators: Rejoice!
If you like going to sleep at night knowing your systems are secure,
you’ll appreciate the new attitude toward security shown in .NET. In December
2001, Bill Gates did a fair imitation of Claude Raines in Casablanca
by issuing a memo stating that he was shocked—shocked!—to discover
security problems in his company’s operating systems and applications.
In February 2002, all production coding came to a stop on the Redmond
campus while the developers performed a detailed search for security vulnerabilities
such as buffer overflows, heap overflows, and other avenues for exploits.
Microsoft has integrated these processes and procedures into an on-going
security effort called the Trustworthy Computing Initiative.
The result? .NET Server represents the most secure operating system Microsoft
has yet produced. Granted, that’s not saying a whole lot from a historical
perspective, but it does represent a significant change in the company’s
attitude. Instead of striving to make Windows “work right out of the box,”
Microsoft is now striving to make Windows “secure right out of the box.”
This new attitude shows in many ways, some large and some small.
For example, the default NTFS security permissions have changed considerably.
The Everyone group now has only Read/Execute permissions by default on
new volumes compared to the Full Control permissions granted by Win2K
and NT. The Domain\Users group (essentially, anyone who has authenticated
at a domain member server or desktop) has Read\Execute, Create\Modify
Folders, and Create\Modify Files permissions. The lockdown is even more
restrictive on the %systemroot% folder, where only Administrators or administrator
equivalents have anything other than Read\Execute permission. Application-mode
terminal server operators will be pleased to note that this helps keep
users from modifying system files and folders.
The default permissions on share points have changed, as well. The Everyone
group is still the only default group on the share ACL, but it has only
Read permissions. This can be a little disconcerting until you get used
to setting the permissions manually. A new /grant switch for the NET SHARE
command permits you to set the share permissions at the command line.
.NET also blocks network access by users with blank passwords.
The default handling of anonymous logons has also changed. Past versions
of NT and Win2K gave credential-less connections (called null session
connections) an access token that included the well-known SID for the
Everyone group. This set the stage for a wide variety of exploits because
the Everyone group historically has been given quite a bit of access.
In .NET, null session connections are assigned only the Anonymous Logon
group SID and thus have minimal permissions. This eliminates the need
for elevated Restrict Anonymous=3 settings and the problems they cause
with classic trust relationships and Exchange. Figure 1 shows side-by-side
results of a NetBIOS service scan using GFI LANguard Network Security
Scanner performed against a standard Win2K domain controller and a standard
.NET DC. The Pre-Win2K Compatible Access group in both domains is empty.
Edition |
Processor
Speed |
RAM
(minimum and maximum) |
Processor
Support |
Standard Server |
550MHz |
256MB to 4GB |
2 |
Enterprise Server |
733MHz |
256MB to 32GB |
4 |
Data Center Server |
733MHz |
1GB to 64GB |
32 |
Web Server |
550MHz |
256MB to 2GB |
2 |
|
|
Figure 1. NetBIOS service scans of .NET and Windows
2000 domain controllers. (Click image to view larger version.) |
Web Server Administrators: No More Apologies
With .NET, we finally get a Web server that we don’t feel we have
to apologize for using. The entire IIS infrastructure in .NET has been
reworked from the ground up. This new infrastructure forms a compelling
reason to upgrade your Web servers to .NET and IIS 6.0 even if you just
recently made the transition to Win2K and IIS 5.0. Here’s why.
By default, Web services in IIS 5.0 run under one or more instances of
Dllhost.dll, which then run under a single instance of Inetinfo.exe, a
user-mode application. This makes Web services somewhat unwieldy because
the Web sites and scripts within them must communicate with each other
either via shared memory or by interprocess communications via the Executive.
Running processes in shared memory means that if one crashes, it takes
the rest down at the same time. Keeping the processes separated inhibits
full functionality by limiting access to shared resources such as ASP
and Common Gateway Interface (CGI) processing engines.
In .NET and IIS 6.0, the underlying Web engine is a kernel-mode driver,
Http.sys, that controls access to all user-mode processes. Figure 2 shows
a process diagram. The driver is light and fast, really nothing more than
an application router. When messages arrive, Http.sys selects a destination
and dispatches the messages accordingly. Http.sys also handles making
and tearing down TCP connections, a computationally expensive proposition
for a user process. This dramatically increases the number of concurrent
hits a Web site can handle. Http.sys is also responsible for logging,
which has long been a weak point for classic IIS because of concurrency
issues. Since only one process owns the log, there’s no possiblity another
process will have the log locked when an important event occurs.
When it comes to scalability, IIS 6.0 also eliminates a critical limitation
in classic IIS, the inability to run more than one CGI application at
a time. The new support for asynchronous CGI means that you can host significantly
larger numbers of sites on the same Web server without worrying about
conflicts or race conditions.
|
Figure 2. The new IIS 6.0 process architecture
makes Web sites faster and more stable. |
Finally, IIS 6.0 sports a faster and more flexible management model with
a text-based Metabase file that uses XML rather than binary data for storing
configuration information. Changes to this XML metabase file take effect
immediately, drastically reducing the instances when a Web server must
be restarted.
Worker
Processes and WAS |
The grunt work of handling Web messages is given over
to a user-mode application called a Worker Process,
which has multiple threads, each capable of hosting
one or more Web applications such as an ISAPI extension
or a piece of CGI code. Worker processes are grouped
into a common security and management structure called
an Application Pool. Each Application Pool runs under
a separate instance of an executable called W3wp.exe.
Application pools provide a boundary so that a misbehaving
worker process in one pool can't disturb or compromise
worker processes in other pools.
At first glance, Application Pools resemble the High
Isolation setting in classic IIS, where each application
is given its own instance of Dllhost.exe. The difference
is in the way the worker processes communicate with
the outside world. In IIS 6.0, each worker process communicates
directly to the Http.sys kernel driver and can be separately
started and stopped. This increases the resilency of
the system. Even better, each Application Pool is individually
monitored for proper operation by a service called the
Web Administration Service, or WAS.
The WAS continually "pings" each worker process to
verify that it's active. If a worker process crashes
or becomes unresponsive, or if all available threads
in the process are blocked, the WAS either stops and
restarts the worker process or it recycles the worker
process, meaning that it starts a new process before
retiring the old one, thus ensuring continuity of service.
The WAS also acts as a kind of psychoanalyst for ISAPI
extensions running in the worker processes. If an ISAPI
extension feels deprived of resources or becomes overworked
and stressed out or simply gets cantankerous, it can
ask the WAS for help and guidance. The WAS can then
restart or recycle the process before it becomes unresponsive.
In addition to imparting stability, the separate worker
processes in the application pools also represent a
big leap forward in Web security because each process
is assigned a separate user account to act as a security
context. .NET has three predefined user accounts: Local
System, Local Service, and Network Service. The first,
Local System, has full privileges and is avoided. The
other two have only the minimum privileges necessary
for operating a Web site. This prevents an attacker
from "getting root" if a Web site is compromised. The
Local Service and Network Service accounts have profiles
and SIDs, so they can be used to support n-tier applications
where a Web server attaches to a back-end database or
some other process.
|
|
|
System Architects: Flexible Functionality
If you’re responsible for designing or implementing AD forests,
you’ll get quite a bit more flexibility with .NET. Most of the new features,
though, require that all DCs be running .NET. Backward compatibility with
NT and Win2K is maintained using a flag called Functional Level. The Win2K
Mixed and Win2K Native Functional Levels mimic the operation of Mixed
and Native Mode in Win2K. When all downlevel DCs in a domain have been
upgraded or decommissioned, the domain can be shifted to the .NET Functional
Level. When all domains in a forest have been shifted, you can then shift
the Functional Level of the forest itself to .NET.
In any Functional Level, the membership of Universal groups can be cached
by non-Global Catalog servers, eliminating the need for placing GC servers
at each site to support authentication in Native mode. The Universal group
cache is updated periodically by replicating changes from a GC server
at a designated site. Figure 3 shows the configuration setting in AD Sites
and Services.
|
Figure 3. The New Universal group caching option
eliminates the need for Global Catalog servers at each site in a Native
mode network. |
Speaking of groups, .NET eliminates a problem that has nagged Win2K administrators
in large enterprises. In Win2K, when a user is added to or removed from
a group, the entire Member attribute is replicated. Not only does this
put quite a bit more replication traffic on the wire, it opens the possibility
for losing data if two administrators add different users to the same
group during the same replication interval. This isn’t a farfetched scenario
when you consider that the default inter-site replication interval is
three hours. .NET resolves the problem by replicating addition or deletion
of individual group members discretely rather than as a unit. This feature
requires the forest to be at .NET Functional Level.
Another useful replication improvement, and one that also requires forest
.NET Functional Level, targets the Knowledge Consistency Checker (KCC),
the service responsible for calculating replication paths for a DC and
creating the required Connection objects. In Win2K, the algorithm used
by the KCC is very complex. For large enterprises with mutiple sites,
the calculation can take too long, leaving some DCs out of the replication
map. The only workaround is to create Connection objects between sites
manually and leave the KCC out of the picture. The topology calculation
algorithm has been streamlined considerably in .NET, reducing the need
to take manual control.
For hard-core command-line junkies, a revamped REPADMIN utility makes
managing AD replication a breeze. You can quickly initiate replication,
check the identity of a bridgehead, list the items in the replication
queue, and display the latency between sites. A new /experthelp switch
displays additional operations that previously required direct AD changes
to implement, including the ability to enable change notification between
sites, override schedules, disable compression on replication traffic
and add or delete Connection objects.
One of the most significant features exposed by shifting a forest to
.NET Functional Level is the ability to create two-way transitive trusts
between forests. This helps to resolve autonomy issues that can arise
when administrators and their managers who don’t trust the OU rights delegation
model within a single domain and don’t like the sweeping powers that forest
root domain administrators wield in a single forest. They then demand
the total autonomy that comes with having a separate forest.
Even administrators perfectly willing to participate in a single domain
or forest often want a more robust boundary when faced with the task of
quickly incorporating a new business unit into their organization or setting
up an extranet with an affiliate or vendor while assuring that security
in their own organization isn’t compromised.
Inter-forest resource sharing is possible in Win2K but uses classic one-way,
non-transitive NT trusts. Using these trusts, resource sharing between
several forests with multiple domains quickly results in a snarl of one-
and two-way trust relationships drawn on big sheets of butcher paper that
hang on the wall of the server room.
.NET helps to resolve this issue by introducing a new trust type called
a Forest Root trust. Using this trust type, you can build a Federation
of forests where the root domains share a two-way, transitive trust that
can be used by clients in a child domain of one forest to get access to
resources in the child domains of another forest. See Figure 4.
|
Figure 4. .NET Server introduces Forest Root
trusts, allowing transitive trusts among forests. |
A Forest Root trust can be configured to select specific domains from
each forest that can participate in the Federation. For example, in the
figure, users from the US.Company.com and Canada.Company.com domain could
be granted access to resources in the England.Subsidiary.com domain but
not the Frankfort.Subsidiary.com domain.
Federations aren’t intended to be the ultimate solution for resource
management within an organization. The domains in the separate forests
don’t share a common Configuration or Schema naming context, so applications
such as Exchange 2000 that rely on shared knowledge in a forest can’t
bridge the gap. Also, trusts between forests are not transitive, so that
if Forest A trusts Forest B, and Forest B trusts Forest C, then Forest
A does not trust Forest C.
There is no “prune and graft” utility for AD, so you can’t restructure
a forest by introducing outside domains or by splitting off existing domains.
That being said, as long as you retain a single forest, .NET does offer
the flexibility of renaming your domains and thereby restructuring the
forest. This is a complex operation that requires quite a bit of planning,
but it’s simpler than creating a new domain and migrating all the user,
group and computer accounts. If you do find yourself needing to do a migration
between domains, the updated version of the AD Migration Tool (ADMT) in
.NET includes the ability to retain user passwords during the migration.
It also simplifies changing the ACLs on a newly migrated server so you
can get rid of SID History as soon as possible.
.NET also resolves an issue for large organizations with decentralized
IT organizations that promote DCs in the field rather than building them
locally and shipping them to a location. If you have a relatively large
AD database and limited bandwidth to the remote site, it can take a considerable
amount of time to finish the initial replication for a new DC. An advanced
feature of Dcpromo in .NET allows you to do the initial load of the AD
database from backup media. You can use this feature to do a system state
backup in one location and burn the result to a CD or DVD that you can
then overnight to the remote location.
Server Administrators: Driver Protection—Finally
It’s happened to me. It’s happened to you. You schedule a short
maintenance interval for a production server to install a new piece of
hardware and just as your time window closes, the machine coughs up a
blue bugcheck screen and becomes a rather expensive and noisy paperweight.
.NET avoids many of these sorts of incidents by taking a lesson from
Barney Fife to “Nip…it...in...the...bud.” A feature called Windows Driver
Protection compares a new hardware driver to a “bad boy” list of drivers
to determine if it’s known to cause problems. The system will refuse to
load any driver on the list. The bad boy list is kept current via Windows
Update. If you update an existing driver and cause a system crash, you
can quickly remove the offending driver and get the system back to status
quo using the Driver Rollback feature.
As a further enhancement to system stability, Microsoft has made it simpler
to write printer drivers that work in user mode rather than kernel mode.
This reversal from the architectural changes made in NT 4.0 is possible
thanks to improvement in the core system architecture. This makes user-mode
printer drivers at least as fast as their kernel-mode counterparts. A
group policy can be used to block installation of kernel-mode printer
drivers on both XP desktops and .NET servers.
Do you want to defrag your servers’ hard drives regularly but not spend
the money on Executive Software’s commercial product? .NET includes a
command-line defragger that you can schedule via the Task Scheduler. The
defragger in .NET is still a subset of Executive Software’s Diskeeper,
but it runs much faster than in Win2K and is capable of defragging the
Master File Table on the fly.
Do you like using unattended scripts for installing servers but don’t
like manually setting up additional partitions after the operating system’s
installed? You’ll appreciate the new DISKPART utility, which can create
any kind of partition and assign it the next available drive letter. You
can even use DISKPART to extend the size of a Basic disk partition as
long as the partition was created using .NET. This is especially handy
for resizing partitions on a hardware RAID array. Just pop a new drive
into the array and extend the partition, and voila!—lots of additional
storage with the same logical drive letter.
A boatload of new commands helps simplify Web server management. There
is IISWEB, which adds and removes virtual Web folders; IISFTP, which adds
and removes virtual ftp folders; IISBACK, which backs up the new XML metabase;
and IISCNFG, which exports the contents of all or part of the metabase
for quick import to another Web server. Cloning Web sites has never been
simpler.
To get a quick view of the system configuration, use the new SYSTEMINFO
command. This uses the Windows Management Interface (WMI) to obtain details
about the condition of the system, its hardware and drivers. To see the
status of services, a new TASKLIST utility lists the running processes
along with their status, process ID, session number and name, the amount
of CPU time allotted since the last restart, the memory used by the process
and any DLLs loaded by the process. If you like this kind of information
and want more, try the WMIC console utility, which lists the entries for
any class of object stored in the WMI information repository.
If you manage enterprise-class application servers and have a few extra
dollars to spend, .NET Enterprise Server supports four-node active-active
clusters and Datacenter Server supports eight-node clusters. For suitably
equipped servers, these versions of .NET support hot-swappable PCI adapters
and memory. But for truly stupendous scalability, look to the latest generation
of servers based on Intel’s Itanium and Itanium 2 processor that run 64-bit
(IA64) versions of .NET Enterprise and Datacenter server. .NET Standard
Server and Web Server don’t have IA64 versions. (See my July 2002 “Windows
Insider” column for more information on Itanium 2.)
DNS Administrators: Evolutionary, not Revolutionary
The DNS improvements in .NET aren’t revolutionary, but they do
improve life considerably for DNS administrators in large organizations.
First, replication for AD-integrated zones has been improved with the
addition of a new naming context, called an Application naming context.
A naming context represents a partition in an LDAP namespace that forms
a separate replication unit. By placing zone records into their own naming
context, you can now target DNS replication solely to DCs that are also
DNS servers. Separate naming contexts are available for domain DNS resource
records and resource records for DCs that host services of forest-wide
interest, such as Global Catalog servers and the PDC Emulator in each
domain.
The Application naming contexts aren’t exposed in the standard AD management
consoles, but you can see them in Replmon and Ntdsutil. If you attempt
to demote a DC that hosts an Application naming context, you’re prompted
to ensure that at least one other replica exists. If one doesn’t, Dcpromo
will refuse to let you demote the DC.
|
Figure 5. Conditional forwarding, shown here,
defines a DNS server as a forwarder for a specific DNS domain. |
Another DNS improvement resolves an issue that can arise if you build
a Federation or if you have extranet connections to subsidiaries or business
partners. For example, let’s say there’s a Forest Root trust between the
Company.com forest and the Widgets.com forest. The DNS servers in Company.com
need to resolve names for DCs in Widgets.com and vice versa. Those records
aren’t likely to be exposed on the Internet DNS servers, so some method
is required to resolve the names using internal DNS servers. This can
be done by defining a DNS server in the opposite domain as a forwarder,
but this is difficult to configure if you already use forwarding to resolve
Internet addresses.
.NET resolves this problem by implementing a feature called conditional
forwarding. Using this feature, you can define one or more DNS servers
as forwarders for a specific DNS domain. When the DNS server gets a request
for a resource record in that target domain, it forwards the request to
the defined name servers for that domain. Figure 5 shows how this is configured
in the DNS management console. (Also see "User
Administrators: More Efficient Management.")
Should You Upgrade?
As with many IT expenditures, the final decision whether or not
to upgrade to .NET boils down to a trust that exists between the administrators
and architects who want to do the upgrade and the executives who sign
the checks. You don’t earn that trust easily and don’t want to jeopardize
it unless you’re sure of the benefits. Here’s a quick summary of the reasons
why you may want to include .NET in your budget for next year:
Web servers. Unless you have a critical application that
simply refuses to run under IIS 6.0, you should certainly consider upgrading
your Web servers to .NET as quickly as possible. This not only moves you
to a more stable, scalable, and easily secured Web environment, it also
prepares your Web infrastructure for the introduction of .NET Framework
products such as ASP.NET and the .NET versions of Perl, Python and Java.
The pricing of .NET Web Server might make it an attractive addition to
your 2003 budget, especially considering that each IIS 6.0 server is capable
of hosting many more sites than its IIS 5.0 counterpart.
Security. The .NET Server products were the first to undergo
the extreme scrutiny of Microsoft’s new Trustworthy Computing Initiative.
If operating system security is a top concern, you should evaluate the
ways you currently use Microsoft-based services and ask yourself if each
operation could be done more securely when hosted on a .NET server. I
would especially call your attention to the improved features supporting
802.1x wireless security, Public Key Infrastructure (PKI), and the changes
to the use of anonymous connections.
Wireless
Security: A Step Up |
Another significant improvement in .NET is the native
support for 802.1x wireless security using both PEAP
(Protected Extensible Authentication Protocol) and EAP-TLS
(Extensible Authentication Protocol-Transport Layer
Security). 802.1x security protects a wireless connection
by forcing the computer (in the case of EAS-TLS) or
the user (in the case of PEAP) to perform a secure authenticate
transaction with a RADIUS server before the wireless
connection is made operative. This protects the initial
authentication and key exchange as well as subsequent
key exchanges, eliminating the vulnerabilities that
plague the current implementation of Wired Equivalent
Privacy (WEP). In other words, goodbye Airsnort and
Airpeek.
Security administration is becoming increasingly synonymous
with certificate administration as many vendors incorporate
public-private key cryptography and digital signatures
into their products. .NET incorporates the Advanced
Encryption Standard (Rijndael) and the Advanced Hashing
Standard (SHA-256, 384, and 512) along with a much more
flexible Certification Authority that can store and
reissue private keys used for file encryption and autoenroll
users along with computers. This greatly simplifies
the deployment of cryptography-based technologies such
as the Encrypting File System (EFS) and 802.1x Wireless
security.
|
|
|
Active Directory. If you have a large enterprise with tens
of thousands of users scattered among dozens or hundreds of sites, then
the upgrade to .NET should be a top priority for 2003. The new replication
features alone make it a compelling upgrade. For smaller organizations
that have recently upgraded to Win2K and AD, look at the specific new
features and improvements to see if they address issues in your operations.
For example, the ability to create Federations of trusted forests is a
highly attractive option for organizations such as universities, secondary
schools and government agencies. If you plan to deploy Exchange 2000,
avoid Federations.
Terminal servers. If you run Citrix MetaFrame, you’ll want
to wait for .NET-compatible versions to appear. However, if you want to
deploy a terminal server solution without add-ons, take a long look at
the RDP improvements in .NET and see if they fulfill your needs. Also,
you may want to include the .NET-compatible version of Canaveral iQ from
New Moon Systems in your evaluation to get the advantages of application
publishing with the new RDP features.
File servers. One of the most significant new features
in .NET is the Volume Shadow Copy service and its support for individual
file restores performed by users rather than by backup admins. This feature
alone might be sufficient to prompt to you to upgrade your file servers
to .NET, but remember that you can only take advantage of it if you have
XP clients. As of this writing, there are no clients for NT or Win2K.
If you’re planning to purchase SAN or NAS equipment, you should also evaluate
the improved support in .NET for alternative storage solutions.
Application servers. If you support large database servers
or have applications that require fault-tolerant solutions, you should
begin evaluating the features in .NET Enterprise and Datacenter Server.
If an IA64 version of your application exists, you should definitely make
it a point to evaluate your application running on an Itanium 2 server.