工作表保护(工作表保护后看不到里面的内容)
670
2022-05-30
如果您是系统管理员,则应遵循本文中提到的 10 个提示来保护您的 Apache Web 服务器。
1.禁用不必要的模块
如果您打算从源代码安装 apache,则应禁用以下模块。如果您执行 ./configure –help,您将看到所有可以禁用/启用的可用模块。
userdir – 将请求映射到用户特定的目录。即 URL 中的 ~username 将被翻译到服务器中的目录
autoindex – 不存在 index.html 文件时显示目录列表
status – 显示服务器统计信息
env – 清除/设置 ENV 变量
setenvif – 将 ENV 变量放在标题上
cgi – CGI 脚本
actions - 请求触发的动作
negotiation——内容协商
alias——将请求映射到不同的文件系统部分
include——服务器端包括
filter – 智能过滤请求
version – 使用 IfVersion 处理配置文件中的版本信息
as-is - 原样文件类型
执行 ./configure 时禁用所有上述模块,如下所示
./configure \ --enable-ssl \ --enable-so \ --disable-userdir \ --disable-autoindex \ --disable-status \ --disable-env \ --disable-setenvif \ --disable-cgi \ --disable-actions \ --disable-negotiation \ --disable-alias \ --disable-include \ --disable-filter \ --disable-version \ --disable-asis
如果启用 ssl 并禁用 mod_setenv,您将收到以下错误。
错误:/usr/local/apache2/conf/extra/httpd-ssl.conf 第 223 行的语法错误:无效命令“BrowserMatch”,可能拼写错误或由服务器配置中未包含的模块定义
解决方案:如果您使用 ssl,请不要禁用 setenvif。或者,如果禁用 mod_setenvif,请在 httpd-ssl.conf 中注释掉 BrowserMatch。
安装后,当您执行httpd -l时,您将看到所有已安装的模块。
# /usr/local/apache2/bin/httpd -l Compiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_log_config.c mod_ssl.c prefork.c http_core.c mod_mime.c mod_dir.c mod_so.c
在此示例中,我们安装了以下 apache 模块。
core.c – Apache 核心模块
mod_auth* – 用于各种认证模块
mod_log_config.c – 记录客户端请求。提供额外的日志灵活性。
mod_ssl.c – 用于 SSL
prefork.c – 用于 MPM(多处理模块)模块
httpd_core.c – Apache 核心模块
mod_mime.c – 用于设置文档 MIME 类型
mod_dir.c – 用于目录路径上的斜杠重定向。如果您指定 url/test/,它会转到 url/test/index.html
mod_so.c - 用于在启动或重启期间加载模块
2. 以单独的用户和组运行 Apache
默认情况下,apache 可能会作为无人值守或守护进程运行。最好在自己的非特权帐户中运行 apache。例如:阿帕奇。
创建 apache 组和用户。
groupadd apache useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache
修改httpd.conf,适当设置User和Group。
# vi httpd.conf User apache Group apache
在此之后,如果你重新启动 apache,然后执行 ps -ef,你会看到 apache 以“apache”的身份运行(除了第一个 httpd 进程,它总是以 root 身份运行)。
# ps -ef | grep -i http | awk '{print }' root apache apache apache apache apache
3.限制对根目录的访问(使用允许和拒绝)
通过在httpd.conf中设置以下内容来保护根目录
在上面:
Options None- 将此设置为无,这将不会启用任何可选的额外功能。
Order deny,allow – 这是处理“拒绝”和“允许”指令的顺序。这首先处理“拒绝”,然后处理“允许”。
Deny from all – 这会拒绝所有人对根目录的请求。根目录没有 Allow 指令。所以,没有人可以访问它。
4.为conf和bin目录设置适当的权限
bin 和 conf 目录只能由授权用户查看。最好创建一个组,并将所有允许查看/修改 apache 配置文件的用户添加到该组。
让我们称这个组为:apacheadmin
创建组。
groupadd apacheadmin
允许访问此组的 bin 目录。
chown -R root:apacheadmin /usr/local/apache2/bin chmod -R 770 /usr/local/apache2/bin
允许访问该组的 conf 目录。
chown -R root:apacheadmin /usr/local/apache2/conf chmod -R 770 /usr/local/apache2/conf
向该组添加适当的成员。在这个例子中,ramesh 和 john 都是 apacheadmin 的一部分
# vi /etc/group apacheadmin:x:1121:ramesh,john
5.禁用目录浏览
如果您不这样做,用户将能够看到您的根目录(或任何子目录)下的所有文件(和目录)。
例如,如果他们访问 http://{your-ip}/images/ 并且如果您在图像下没有 index.html,他们将看到列出的所有图像文件(和子目录)浏览器(就像 ls -1 输出)。从这里,他们可以单击单个图像文件进行查看,或单击子目录查看其内容。
要禁用目录浏览,您可以将Options 指令的值设置为“None”或“-Indexes”。A - 在选项名称前面会将其从为该目录强制执行的当前选项列表中删除。
索引将在浏览器的目录中显示可用文件和子目录的列表(仅当该文件夹中不存在 index.html 时)。因此,不应允许索引。
6. 不允许.htaccess
在 htdocs (或任何外部)下的特定子目录中使用 .htaccess 文件,用户可以覆盖默认的 apache 指令。在某些情况下,这是不好的,应该避免。您应该禁用此功能。
您不应允许用户使用 .htaccess 文件并覆盖 apache 指令。为此,请在根目录中设置“ AllowOverride None ”。
7.禁用其他选项
以下是 Options 指令的可用值:
Options All- 启用所有选项(多视图除外)。如果您不指定 Options 指令,则这是默认值。
Options ExecCGI – 执行 CGI 脚本(使用 mod_cgi)
Options FollowSymLinks – 如果您在此目录中有符号链接,它将被跟踪。
Options Includes- 允许服务器端包括(使用 mod_include)
Options IncludesNOEXEC – 允许服务器端包含但不能执行命令或 cgi。
Options Indexes- 禁用目录列表
Options MultiViews - 允许内容协商的多视图(使用 mod_negotiation)
Options SymLinksIfOwnerMatch – 类似于 FollowSymLinks。但是,只有当链接和链接到的原始目录之间的所有者相同时,才会出现这种情况。
永远不要指定“全部选项”。始终指定一个(或多个)上述选项。您可以在一行中组合多个选项,如下所示。
Options Includes FollowSymLinks
当您有嵌套的目录并希望覆盖父目录指令中的选项时,选项值前面的 + 和 – 很有帮助。
在此示例中,对于 /site 目录,它同时具有包含和索引:
对于 /site/en 目录,如果您只需要来自 /site 的索引(而不是包含),并且如果您只想跟随符号链接到此目录,请执行以下操作。
/site 将具有包含和索引
/site/en 将有索引和 FollowSymLink
8.删除不需要的DSO模块
如果您已将任何动态共享对象模块加载到 apache,它们将出现在 httpd.conf 中的“LoadModule”指令下。
请注意,静态编译的 apache 模块不会被列为“LoadModule”指令。
在 httpd.conf 中注释掉任何不需要的“LoadModules”
grep LoadModule /usr/local/apache2/conf/httpd.conf
9. 限制对特定网络(或 IP 地址)的访问
如果您希望您的站点只能由特定的 IP 地址或网络查看,请执行以下操作:
要允许特定网络访问您的站点,请在 Allow 指令中提供网络地址。
要允许特定 ip-address 访问您的站点,请在 Allow 指令中提供 ip-address。
10.不显示或发送Apache版本(设置ServerTokens)
默认情况下,服务器 HTTP 响应标头将包含 apache 和 php 版本。类似于以下内容。这是有害的,因为我们不希望攻击者知道具体的版本号。
Server: Apache/2.2.17 (Unix) PHP/5.3.5
为避免这种情况,请在 httpd.conf 中将 ServerTokens 设置为 Prod。这将显示“Server: Apache”,没有任何版本信息。
# vi httpd.conf ServerTokens Prod
以下是可能的 ServerTokens 值:
ServerTokens Prod displays “Server: Apache”
ServerTokens Major displays “Server: Apache/2”
ServerTokens Minor displays “Server: Apache/2.2”
ServerTokens Min displays “Server: Apache/2.2.17”
ServerTokens OS displays “Server: Apache/2.2.17 (Unix)”
ServerTokens Full displays “Server: Apache/2.2.17 (Unix) PHP/5.3.5” (如果您未指定任何 ServerTokens 值,则为默认值)
除了以上 10 条提示之外,请确保保护您的 linux 操作系统。如果您的操作系统不安全,那么保护您的 apache 毫无意义。此外,始终保持您的 apache 版本是最新的。最新版本的 apache 包含所有已知安全问题的修复程序。确保经常查看您的 apache 日志文件。
Apache Linux web前端
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。