Ubuntu 上 Apache 的访问控制策略
一 核心机制与模块
二 常用策略与示例
<Directory "/var/www/html/public">
Require all granted
</Directory>
<Directory "/var/www/html/restricted">
Require all denied
</Directory>
<Directory "/var/www/html/admin">
# 允许内网网段与本地
Require ip 192.168.1.0/24 127.0.0.1
# 也可拒绝某个网段
Require not ip 203.0.113.0/24
</Directory>
# 启用模块
sudo a2enmod auth_basic authn_file
# 创建密码文件(首次加 -c,追加用户不要 -c)
sudo htpasswd -c /etc/apache2/.htpasswd alice
# 配置受保护目录
<Directory "/var/www/html/admin">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
<Directory "/var/www/html/admin">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require ip 192.168.1.10
Require user alice
</Directory>
<Files "secret.pdf">
Require ip 192.168.1.0/24
</Files>
<Directory "/var/www/html/office-hours">
Require expr "%{TIME_HOUR} >= 9 && %{TIME_HOUR} <= 18"
</Directory>
<Directory "/var/www/html/legacy">
Order deny,allow
Deny from all
Allow from 192.168.1.0/24
Allow from 127.0.0.1
</Directory>
以上示例覆盖了 IP/CIDR、基本认证、组合策略、按文件类型 与 时间条件 的常见场景。
三 组合策略与评估顺序
<Directory "/var/www/html/admin">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
<RequireAny>
Require ip 192.168.1.0/24 127.0.0.1
Require valid-user
</RequireAny>
</Directory>
四 落地步骤与运维要点
sudo a2enmod auth_basic authn_file authz_host authz_core
sudo apache2ctl configtest
sudo systemctl restart apache2
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type f -exec chmod 644 {} \;
sudo find /var/www/html -type d -exec chmod 755 {} \;