Objective
To harden an Apache web server.
Solution
Edit your Apache configuration file/etc/apache2/httpd.conf and add the following in the root level Directory directive:
<Directory />
AllowOverride None
AllowOverrideList None
Options None
Require all denied
</Directory>
Reload Apache
[root@nowherelan]# systemctl reload httpd.service
When the AllowOverride directive is set to None and AllowOverrideList is set to None, .htaccess files are completely ignored. In this case, the server will not even attempt to read .htaccess files in the filesystem.
The Options directive controls which server features are available in a particular directory. Options can be set to None, in which case none of the extra features are enabled.
The Require directive tests whether an authenticated user is authorized according to a particular authorization provider and the specified restrictions. WithRequire all denied, access is denied unconditionally.
You will then want to enable certain abilities on a per-directory basis:
<Directory /var/www/html>
Options +SymLinksIfOwnerMatch
Require all granted
</Directory>
WithOptions +SymLinksIfOwnerMatch, the server will only follow symbolic links for which the target file or directory is owned by the same user id as the link.
WithRequire all granted, access is allowed unconditionally.
Verify that your web application still functions properly after making these changes.
My System Configuration
- CentOS 7
- Apache 2.4