From: Erik Abele Date: Fri, 23 Aug 2002 21:02:16 +0000 (+0000) Subject: New XML. X-Git-Tag: AGB_BEFORE_AAA_CHANGES~179 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a7273e37bded9b8b709f8b24bf41d94075755df4;p=apache New XML. Submitted by: David Shane Holden git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@96505 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/docs/manual/misc/security_tips.html b/docs/manual/misc/security_tips.html deleted file mode 100644 index 1223afcb11..0000000000 --- a/docs/manual/misc/security_tips.html +++ /dev/null @@ -1,350 +0,0 @@ - - - - - - Apache HTTP Server: Security Tips - - - - - - -

Security Tips for Server Configuration

- - -
- -

Some hints and tips on security issues in setting up a web - server. Some of the suggestions will be general, others - specific to Apache.

-
- -

Permissions on - ServerRoot Directories

- -

In typical operation, Apache is started by the root user, - and it switches to the user defined by the User - directive to serve hits. As is the case with any command that - root executes, you must take care that it is protected from - modification by non-root users. Not only must the files - themselves be writeable only by root, but so must the - directories, and parents of all directories. For example, if - you choose to place ServerRoot in - /usr/local/apache then it is suggested that you create - that directory as root, with commands like these:

- -
-
-    mkdir /usr/local/apache
-    cd /usr/local/apache
-    mkdir bin conf logs
-    chown 0 . bin conf logs
-    chgrp 0 . bin conf logs
-    chmod 755 . bin conf logs
-
-
- It is assumed that /, /usr, and /usr/local are only modifiable - by root. When you install the httpd executable, you should - ensure that it is similarly protected: - -
-
-    cp httpd /usr/local/apache/bin
-    chown 0 /usr/local/apache/bin/httpd
-    chgrp 0 /usr/local/apache/bin/httpd
-    chmod 511 /usr/local/apache/bin/httpd
-
-
- -

You can create an htdocs subdirectory which is modifiable by - other users -- since root never executes any files out of - there, and shouldn't be creating files in there.

- -

If you allow non-root users to modify any files that root - either executes or writes on then you open your system to root - compromises. For example, someone could replace the httpd - binary so that the next time you start it, it will execute some - arbitrary code. If the logs directory is writeable (by a - non-root user), someone could replace a log file with a symlink - to some other system file, and then root might overwrite that - file with arbitrary data. If the log files themselves are - writeable (by a non-root user), then someone may be able to - overwrite the log itself with bogus data.

-
- -

Server Side Includes

- -

Server Side Includes (SSI) present a server administrator with - several potential security risks.

- -

- The first risk is the increased load on the server. All SSI-enabled - files have to be parsed by Apache, whether or not there are any SSI - directives included within the files. While this load increase is - minor, in a shared server environment it can become significant.

- -

- SSI files also pose the same risks that are associated with CGI - scripts in general. Using the "exec cmd" element, SSI-enabled - files can execute any CGI script or program under the permissions - of the user and group Apache runs as, as configured in httpd.conf. - That should definitely give server administrators pause.

- -

- There are ways to enhance the security of SSI files while still taking - advantage of the benefits they provide.

- -

To isolate the damage a wayward SSI file can cause, a server - administrator can enable suexec as described in the CGI in General - section.

- -

- Enabling SSI for files with .html or .htm extensions can be - dangerous. This is especially true in a shared, or high traffic, - server environment. SSI-enabled files should have a separate - extension, such as the conventional .shtml. This helps keep - server load at a minimum and allows for easier management of - risk.

- - -

Another solution is to disable the ability to run scripts and - programs from SSI pages. To do this replace Includes - with IncludesNOEXEC in the Options directive. Note that - users may still use <--#include virtual="..." --> to execute - CGI scripts if these scripts are in directories desginated by a ScriptAlias - directive.

- -
- -

CGI in General

- -

First of all, you always have to remember that you must trust - the writers of the CGI scripts/programs or your ability to spot - potential security holes in CGI, whether they were deliberate or - accidental. CGI scripts can run essentially arbitrary commands - on your system with the permissions of the web server user and can - therefore be extremely dangerous if they are not carefully - checked.

- -

All the CGI scripts will run as the same user, so they have - potential to conflict (accidentally or deliberately) with other - scripts e.g. User A hates User B, so he writes a - script to trash User B's CGI database. One program which can be - used to allow scripts to run as different users is suEXEC which is included with Apache - as of 1.2 and is called from special hooks in the Apache server - code. Another popular way of doing this is with CGIWrap.

- -

-
- -

Non Script Aliased - CGI

- -

Allowing users to execute CGI scripts in - any directory should only be considered if;

- -
    -
  1. You trust your users not to write scripts which will - deliberately or accidentally expose your system to an - attack.
  2. - -
  3. You consider security at your site to be so feeble in - other areas, as to make one more potential hole - irrelevant.
  4. - -
  5. You have no users, and nobody ever visits your - server.
  6. -
-
- -

Script Aliased - CGI

- -

Limiting CGI to special directories gives - the admin control over what goes into those directories. This - is inevitably more secure than non script aliased CGI, but - only if users with write access to the directories are - trusted or the admin is willing to test each new CGI - script/program for potential security holes.

- -

Most sites choose this option over the non script aliased - CGI approach.

- -

-
- -

Protecting - System Settings

- -

To run a really tight ship, you'll want to stop users from - setting up .htaccess files which can override - security features you've configured. Here's one way to do - it.

- -

In the server configuration file, put

- -
- <Directory />
- AllowOverride None
- </Directory>
-
-
- -

This prevents the use of .htaccess files in all - directories apart from those specifically enabled.

-
- -

- Protect Server Files by Default

- -

One aspect of Apache which is occasionally misunderstood is - the feature of default access. That is, unless you take steps - to change it, if the server can find its way to a file through - normal URL mapping rules, it can serve it to clients.

- -

For instance, consider the following example:

- -
    -
  1. # cd /; ln -s / public_html
  2. - -
  3. Accessing http://localhost/~root/
  4. -
- -

This would allow clients to walk through the entire - filesystem. To work around this, add the following block to - your server's configuration:

-
- <Directory />
-     Order Deny,Allow
-     Deny from all
- </Directory>
-
- -

This will forbid default access to filesystem locations. Add - appropriate - <Directory> blocks to allow access only in - those areas you wish. For example,

-
- <Directory /usr/users/*/public_html>
-     Order Deny,Allow
-     Allow from all
- </Directory>
- <Directory /usr/local/httpd>
-     Order Deny,Allow
-     Allow from all
- </Directory>
-
- -

Pay particular attention to the interactions of - <Location> and - <Directory> directives; for instance, even if - <Directory /> denies access, a - <Location /> directive might overturn it.

- -

Also be wary of playing games with the UserDir directive; - setting it to something like "./" would have the - same effect, for root, as the first example above. If you are - using Apache 1.3 or above, we strongly recommend that you - include the following line in your server configuration - files:

- -
-
UserDir disabled root
-
- -

-
- -

- Watching Your Logs

- -

To keep up-to-date with what is actually going on against your - server you have to check the Log Files. - Even though the log files only reports what has already happend, - they will give you some understanding of what attacks is thrown - against the server and allows you to check if the necessary level - of security is present.

- -

A couple of examples:

-
    -
  1. grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" - access_log
  2. grep "client denied" error_log | - tail -n 10
  3. -
- -

The first example will list the number of attacks trying to - exploit the Apache Tomcat - Source.JSP Malformed Request Information Disclosure - Vulnerability, the second example will list the ten last denied - clients, for example:

- -
-
[Thu Jul 11 17:18:39 2002] [error] [client foo.bar.com] - client denied by server configuration: - /usr/local/apache/htdocs/.htpasswd
-
- -

As you can see, the log files only report what already has - happend, so if the client had been able to access the - .htpasswd file you would have seen something similar - to foo.bar.com - - [12/Jul/2002:01:59:13 +0200] "GET - /.htpasswd HTTP/1.1" in your Access Log. This means you - probably commented out the following in your server configuration - file:

- -
-   <Files ~ "^\.ht">
-    Order allow,deny
-    Deny from all
-   </Files>
-   
- -
- -

Please send any other useful security tips to The Apache - Group by filling out a - problem report. If you are confident you have found a - security bug in the Apache source code itself, please let us - know.

- - - - - - - diff --git a/docs/manual/misc/security_tips.html.en b/docs/manual/misc/security_tips.html.en new file mode 100644 index 0000000000..abc898f7f8 --- /dev/null +++ b/docs/manual/misc/security_tips.html.en @@ -0,0 +1,261 @@ +Security Tips - Apache HTTP Server
[APACHE DOCUMENTATION]

Apache HTTP Server Version 2.0

Security Tips

+

Some hints and tips on security issues in setting up a web server. + Some of the suggestions will be general, others specific to Apache.

+

Permissions on ServerRoot Directories

+ + + +

In typical operation, Apache is started by the root user, and it + switches to the user defined by the User directive to serve hits. As is the + case with any command that root executes, you must take care that it is + protected from modification by non-root users. Not only must the files + themselves be writeable only by root, but so must the directories, and + parents of all directories. For example, if you choose to place + ServerRoot in /usr/local/apache then it is suggested that you create + that directory as root, with commands like these:

+ +
+ mkdir /usr/local/apache
+ cd /usr/local/apache
+ mkdir bin conf logs
+ chown 0 . bin conf logs
+ chgrp 0 . bin conf logs
+ chmod 755 . bin conf logs +
+ +

It is assumed that /, /usr, and /usr/local are only modifiable by + root. When you install the httpd executable, you should ensure that + it is similarly protected:

+ +
+ cp httpd /usr/local/apache/bin
+ chown 0 /usr/local/apache/bin/httpd
+ chgrp 0 /usr/local/apache/bin/httpd
+ chmod 511 /usr/local/apache/bin/httpd +
+ +

You can create an htdocs subdirectory which is modifiable by other + users -- since root never executes any files out of there, and shouldn't + be creating files in there.

+ +

If you allow non-root users to modify any files that root either + executes or writes on then you open your system to root compromises. + For example, someone could replace the httpd binary so that the next + time you start it, it will execute some arbitrary code. If the logs + directory is writeable (by a non-root user), someone could replace + a log file with a symlink to some other system file, and then root + might overwrite that file with arbitrary data. If the log files + themselves are writeable (by a non-root user), then someone may be + able to overwrite the log itself with bogus data.

+ +

Server Side Includes

+ + + +

Server Side Includes (SSI) present a server administrator with + several potential security risks.

+ +

The first risk is the increased load on the server. All + SSI-enabled files have to be parsed by Apache, whether or not + there are any SSI directives included within the files. While this + load increase is minor, in a shared server environment it can become + significant.

+ +

SSI files also pose the same risks that are associated with CGI + scripts in general. Using the "exec cmd" element, SSI-enabled files + can execute any CGI script or program under the permissions of the + user and group Apache runs as, as configured in httpd.conf.

+ +

There are ways to enhance the security of SSI files while still + taking advantage of the benefits they provide.

+ +

To isolate the damage a wayward SSI file can cause, a server + administrator can enable suexec as + described in the CGI in General section

+ +

Enabling SSI for files with .html or .htm extensions can be + dangerous. This is especially true in a shared, or high traffic, + server environment. SSI-enabled files should have a separate extension, + such as the conventional .shtml. This helps keep server load at a + minimum and allows for easier management of risk.

+ +

Another solution is to disable the ability to run scripts and + programs from SSI pages. To do this replace Includes + with IncludesNOEXEC in the Options directive. Note that users may + still use >--#include virtual="..." --< to execute CGI scripts if + these scripts are in directories desginated by a ScriptAlias directive.

+ +

CGI in General

+ + + +

First of all, you always have to remember that you must trust the + writers of the CGI scripts/programs or your ability to spot potential + security holes in CGI, whether they were deliberate or accidental. CGI + scripts can run essentially arbitrary commands on your system with the + permissions of the web server user and can therefore be extremely + dangerous if they are not carefully checked.

+ +

All the CGI scripts will run as the same user, so they have potential + to conflict (accidentally or deliberately) with other scripts e.g. User + A hates User B, so he writes a script to trash User B's CGI database. One + program which can be used to allow scripts to run as different users is + suEXEC which is included with Apache as of + 1.2 and is called from special hooks in the Apache server code. Another + popular way of doing this is with + CGIWrap.

+ +

Non Script Aliased CGI

+ + + +

Allowing users to execute CGI scripts in any directory should only be + considered if;

+ +
    +
  • You trust your users not to write scripts which will deliberately + or accidentally expose your system to an attack.
  • +
  • You consider security at your site to be so feeble in other areas, + as to make one more potential hole irrelevant.
  • +
  • You have no users, and nobody ever visits your server.
  • +
+ +

Script Aliased CGI

+ + + +

Limiting CGI to special directories gives the admin control over what + goes into those directories. This is inevitably more secure than non + script aliased CGI, but only if users with write access to the + directories are trusted or the admin is willing to test each + new CGI script/program for potential security holes.

+ +

Most sites choose this option over the non script aliased CGI + approach.

+ +

Protecting System Settings

+ + + +

To run a really tight ship, you'll want to stop users from setting + up .htaccess files which can override security features + you've configured. Here's one way to do it.

+ +

In the server configuration file, put

+ +
+ <Directory />
+ AllowOverride None
+ </Directory> +
+ +

This prevents the use of .htaccess files in all + directories apart from those specifically enabled.

+ +

Protect Server Files by Default

+ + + +

One aspect of Apache which is occasionally misunderstood is the + feature of default access. That is, unless you take steps to change it, + if the server can find its way to a file through normal URL mapping + rules, it can serve it to clients.

+ +

For instance, consider the following example:

+ +
+ # cd /; ln -s / public_html
+ Accessing http://localhost/~root/ +
+ +

This would allow clients to walk through the entire filesystem. To + work around this, add the following block to your server's + configuration:

+ +
+ <Directory />
+ Order Deny,Allow
+ Deny from all
+ </Directory> +
+ +

This will forbid default access to filesystem locations. Add + appropriate Directory blocks to + allow access only in those areas you wish. For example,

+ +
+ <Directory /usr/users/*/public_html>
+ Order Deny,Allow
+ Allow from all
+ </Directory>
+ <Directory /usr/local/httpd>
+ Order Deny,Allow
+ Allow from all
+ </Directory> +
+ +

Pay particular attention to the interactions of Location and Directory directives; for instance, even + if <Directory /> denies access, a + <Location /> directive might overturn it

+ +

Also be wary of playing games with the UserDir directive; setting it to + something like "./" would have the same effect, for root, as the first + example above. If you are using Apache 1.3 or above, we strongly + recommend that you include the following line in your server + configuration files:

+ +
+ UserDir disabled root +
+ +

Watching Your Logs

+ + + +

To keep up-to-date with what is actually going on against your server + you have to check the Log Files. Even though + the log files only reports what has already happend, they will give you + some understanding of what attacks is thrown against the server and + allows you to check if the necessary level of security is present.

+ +

A couple of examples:

+ +
+ grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log
+ grep "client denied" error_log | tail -n 10 +
+ +

The first example will list the number of attacks trying to exploit the + Apache Tomcat + Source.JSP Malformed Request Information Disclosure Vulnerability, + the second example will list the ten last denied clients, for example:

+ +
+ [Thu Jul 11 17:18:39 2002] [error] [client foo.bar.com] client denied + by server configuration: /usr/local/apache/htdocs/.htpasswd +
+ +

As you can see, the log files only report what already has happend, so + if the client had been able to access the .htpasswd file you + would have seen something similar to:

+ +
+ foo.bar.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1" +
+ +

in your Access Log. This means + you probably commented out the following in your server configuration + file:

+ +
+ <Files ~ "^\.ht">
+ Order allow,deny
+ Deny from all
+ <Files> +
+ +

Apache HTTP Server Version 2.0

IndexHome \ No newline at end of file diff --git a/docs/manual/misc/security_tips.xml b/docs/manual/misc/security_tips.xml new file mode 100644 index 0000000000..ddc690c0ad --- /dev/null +++ b/docs/manual/misc/security_tips.xml @@ -0,0 +1,290 @@ + + + + + + + + Security Tips + + +

Some hints and tips on security issues in setting up a web server. + Some of the suggestions will be general, others specific to Apache.

+
+ +
+ + Permissions on ServerRoot Directories + +

In typical operation, Apache is started by the root user, and it + switches to the user defined by the User directive to serve hits. As is the + case with any command that root executes, you must take care that it is + protected from modification by non-root users. Not only must the files + themselves be writeable only by root, but so must the directories, and + parents of all directories. For example, if you choose to place + ServerRoot in /usr/local/apache then it is suggested that you create + that directory as root, with commands like these:

+ + + mkdir /usr/local/apache
+ cd /usr/local/apache
+ mkdir bin conf logs
+ chown 0 . bin conf logs
+ chgrp 0 . bin conf logs
+ chmod 755 . bin conf logs +
+ +

It is assumed that /, /usr, and /usr/local are only modifiable by + root. When you install the httpd executable, you should ensure that + it is similarly protected:

+ + + cp httpd /usr/local/apache/bin
+ chown 0 /usr/local/apache/bin/httpd
+ chgrp 0 /usr/local/apache/bin/httpd
+ chmod 511 /usr/local/apache/bin/httpd +
+ +

You can create an htdocs subdirectory which is modifiable by other + users -- since root never executes any files out of there, and shouldn't + be creating files in there.

+ +

If you allow non-root users to modify any files that root either + executes or writes on then you open your system to root compromises. + For example, someone could replace the httpd binary so that the next + time you start it, it will execute some arbitrary code. If the logs + directory is writeable (by a non-root user), someone could replace + a log file with a symlink to some other system file, and then root + might overwrite that file with arbitrary data. If the log files + themselves are writeable (by a non-root user), then someone may be + able to overwrite the log itself with bogus data.

+ +
+ +
+ + Server Side Includes + +

Server Side Includes (SSI) present a server administrator with + several potential security risks.

+ +

The first risk is the increased load on the server. All + SSI-enabled files have to be parsed by Apache, whether or not + there are any SSI directives included within the files. While this + load increase is minor, in a shared server environment it can become + significant.

+ +

SSI files also pose the same risks that are associated with CGI + scripts in general. Using the "exec cmd" element, SSI-enabled files + can execute any CGI script or program under the permissions of the + user and group Apache runs as, as configured in httpd.conf.

+ +

There are ways to enhance the security of SSI files while still + taking advantage of the benefits they provide.

+ +

To isolate the damage a wayward SSI file can cause, a server + administrator can enable suexec as + described in the CGI in General section

+ +

Enabling SSI for files with .html or .htm extensions can be + dangerous. This is especially true in a shared, or high traffic, + server environment. SSI-enabled files should have a separate extension, + such as the conventional .shtml. This helps keep server load at a + minimum and allows for easier management of risk.

+ +

Another solution is to disable the ability to run scripts and + programs from SSI pages. To do this replace Includes + with IncludesNOEXEC in the Options directive. Note that users may + still use >--#include virtual="..." --< to execute CGI scripts if + these scripts are in directories desginated by a ScriptAlias directive.

+ +
+ +
+ + CGI in General + +

First of all, you always have to remember that you must trust the + writers of the CGI scripts/programs or your ability to spot potential + security holes in CGI, whether they were deliberate or accidental. CGI + scripts can run essentially arbitrary commands on your system with the + permissions of the web server user and can therefore be extremely + dangerous if they are not carefully checked.

+ +

All the CGI scripts will run as the same user, so they have potential + to conflict (accidentally or deliberately) with other scripts e.g. User + A hates User B, so he writes a script to trash User B's CGI database. One + program which can be used to allow scripts to run as different users is + suEXEC which is included with Apache as of + 1.2 and is called from special hooks in the Apache server code. Another + popular way of doing this is with + CGIWrap.

+ +
+ +
+ + Non Script Aliased CGI + +

Allowing users to execute CGI scripts in any directory should only be + considered if;

+ +
    +
  • You trust your users not to write scripts which will deliberately + or accidentally expose your system to an attack.
  • +
  • You consider security at your site to be so feeble in other areas, + as to make one more potential hole irrelevant.
  • +
  • You have no users, and nobody ever visits your server.
  • +
+ +
+ +
+ + Script Aliased CGI + +

Limiting CGI to special directories gives the admin control over what + goes into those directories. This is inevitably more secure than non + script aliased CGI, but only if users with write access to the + directories are trusted or the admin is willing to test each + new CGI script/program for potential security holes.

+ +

Most sites choose this option over the non script aliased CGI + approach.

+ +
+ +
+ + Protecting System Settings + +

To run a really tight ship, you'll want to stop users from setting + up .htaccess files which can override security features + you've configured. Here's one way to do it.

+ +

In the server configuration file, put

+ + + <Directory />
+ AllowOverride None
+ </Directory> +
+ +

This prevents the use of .htaccess files in all + directories apart from those specifically enabled.

+ +
+ +
+ + Protect Server Files by Default + +

One aspect of Apache which is occasionally misunderstood is the + feature of default access. That is, unless you take steps to change it, + if the server can find its way to a file through normal URL mapping + rules, it can serve it to clients.

+ +

For instance, consider the following example:

+ + + # cd /; ln -s / public_html
+ Accessing http://localhost/~root/ +
+ +

This would allow clients to walk through the entire filesystem. To + work around this, add the following block to your server's + configuration:

+ + + <Directory />
+ Order Deny,Allow
+ Deny from all
+ </Directory> +
+ +

This will forbid default access to filesystem locations. Add + appropriate Directory blocks to + allow access only in those areas you wish. For example,

+ + + <Directory /usr/users/*/public_html>
+ Order Deny,Allow
+ Allow from all
+ </Directory>
+ <Directory /usr/local/httpd>
+ Order Deny,Allow
+ Allow from all
+ </Directory> +
+ +

Pay particular attention to the interactions of Location and Directory directives; for instance, even + if <Directory /> denies access, a + <Location /> directive might overturn it

+ +

Also be wary of playing games with the UserDir directive; setting it to + something like "./" would have the same effect, for root, as the first + example above. If you are using Apache 1.3 or above, we strongly + recommend that you include the following line in your server + configuration files:

+ + + UserDir disabled root + + +
+ +
+ + Watching Your Logs + +

To keep up-to-date with what is actually going on against your server + you have to check the Log Files. Even though + the log files only reports what has already happend, they will give you + some understanding of what attacks is thrown against the server and + allows you to check if the necessary level of security is present.

+ +

A couple of examples:

+ + + grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log
+ grep "client denied" error_log | tail -n 10 +
+ +

The first example will list the number of attacks trying to exploit the + Apache Tomcat + Source.JSP Malformed Request Information Disclosure Vulnerability, + the second example will list the ten last denied clients, for example:

+ + + [Thu Jul 11 17:18:39 2002] [error] [client foo.bar.com] client denied + by server configuration: /usr/local/apache/htdocs/.htpasswd + + +

As you can see, the log files only report what already has happend, so + if the client had been able to access the .htpasswd file you + would have seen something similar to:

+ + + foo.bar.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1" + + +

in your Access Log. This means + you probably commented out the following in your server configuration + file:

+ + + <Files ~ "^\.ht">
+ Order allow,deny
+ Deny from all
+ <Files> +
+ +
+ +