Chapter 6. Security
In this chapter, security
means allowing people to see what you want them to see and preventing
them from seeing what you don't want them to see.
Additionally, there are the issues of what measures you need to take
on your server in order to restrict access via
non-Web means. This chapter illustrates the precautions you need to
take to protect your server from malicious access and modification of
your web site.
The most common questions ask how to protect documents and restrict
access. Unfortunately, due to the complexity of the subject and the
nature of the web architecture, these questions tend to also have the
most complex answers or often no convenient answers at all.
Normal security nomenclature and methodology separate the process of
applying access controls into two discrete steps; in the case of the
Web, they may be thought of as the server asking itself these
questions:
These steps are called
authentication and
authorization,
respectively. Here's a real-world example: a flight
attendant checks your photo identification (authentication) and your
ticket (authorization) before permitting you to board an airplane.
Authentication can be broken down into what might be called
weak and strong. Weak
authentication is based on the correctness of credentials that the
end user supplies (which therefore may have been stolen from the real
owner—hence the name "weak"),
whereas strong authentication is based on attributes of the request
over which the end user has little or no control, and it cannot
change from request to request—such as the IP address of his
system.
Although checking authentication and authorization are clearly
separate activities, their application gets a bit blurred in the
context of the Apache web server modules. Even though the main
difference between the many security modules is how they store the
credentials (in a file, a database, an LDAP directory,
etc.), they nevertheless have to provide the
code to retrieve the credentials from the store, validate those
supplied by the client, and check to see if the authenticated user is
authorized to access the resource. In other words,
there's a lot of functionality duplicated from
module to module, and although there are frequently similarities
between their behavior and directives, the lack of shared code means
that sometimes they're not quite as similar as
you'd hope. This overloading of functionality has
been somewhat addressed in the next version of the web server after
2.0 (still in development at the time of this writing).
In addition to the matter of requiring a password to access certain
content from the web server, there is the larger issue of securing
your server from attacks. As with any software, Apache has, at
various times in its history, been susceptible to conditions that
would allow an attacker to gain inappropriate control of the hosting
server. For example, they may have been able to access, or modify,
files that the site administrator had not intended to give access to,
or they may have been able to execute commands on the target server.
Thus, it is important that you know what measures need to be taken to
ensure that your server is not susceptible to these attacks.
The most important measure that you can take is to keep apprised of
new releases, and read the CHANGES file to determine if the new
version fixes a security hole to which you may be subject. Running
the latest version of the Apache server is usually a good measure in
the fight against security vulnerabilities.
Recipes in this chapter show you how to implement some of the
frequently requested password scenarios, as well as giving you the
tools necessary to protect your server from external attacks.
When checking for access to
restricted documents, there are
actually two different operations involved: checking to see who you
are and checking to see if you're allowed to see the
document.
The first part, checking to see who you are, is called
authentication. The web server
doesn't know who you are, so you need to provide
some proof of your identity, such as a username and matching
password. When the server successfully compares these bits of
information (called
credentials)
with those in its databases, the server will proceed, but if
you're not in the list, or the information
doesn't match, the server will turn you away with an
error status.
Once you have convinced the server you are who you say you are, it
will look at the list of people allowed to access the document and
see if you're on it; this is called
authorization. If you are on the list, access
proceed normally; otherwise, the server returns an error status and
denies access.
The two different operations do not differentiate in the errors they
return; it is always a 401 (unauthorized) code, even if the
failure was in authentication. This is to prevent would-be attackers
from being able to tell when they have valid credentials.
|
|