nginx防止webshell窥探任意目录

webshell作为一种服务器端解析脚本,它的破坏力极为惊人。服务器在设置不当的情况下非常容易被提权,从而拿到服务器权限。回想十多年前老徐作为一名脚本小子,也曾拿下过不少站点服务器权限,所以在信息安全这一块老徐尤为谨慎。本篇主要介绍一下我是如何设置nginx从而防止webshell窥探任意目录。

nginx配置

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/:/proc/";

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

重点关注这一行fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";

这行语句表示当前站点的PHP脚本只能够访问$document_root 、/tmp/ 、/proc/ ,这三个目录。

$document_root变量表示我们nginx配置中server块root指令定义的目录。

建议

如果你正在搭建一个php服务器环境,不防从github找一个webshell放在web根目录,利用webshell功能来调优web服务器的安全性,直到webshell什么都干不了。

最后

如果你是一名运维工程师或者是站长,那么你应该将服务器的安全放在首要位置,不要让自己的努力瞬间化为灰烬。