当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Linux下PHP+Apache的26个必知的安全设置(4)

    栏目:Linux/apache问题 时间:2020-01-14 17:15

    第12个设置项:禁用危险的PHP函数

    PHP有许多函数,如果使用不当,它们可以用来闯入你的服务器。你可以使用disable_functions命令,在/etc/php.d/security.ini中禁用一系列函数:

    disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
    
    

    第13个设置项:PHP Fastcgi/CGI - cgi.force_redirect命令

    PHP可与FastCGI协同工作。 Fascgi减少了Web服务器占用的内存资源,但是仍为你提供了整个PHP语言具有的速度和功能。你可以配置Apache2+PHP+FastCGI或cgi,如这里描述的那样。配置命令cgi.force_redirect可以防止任何人使用http://www.cyberciti.biz/cgi-bin/php/hackerdir/backdoor.php这样的地址,直接调用PHP。出于安全原因,应启用cgi.force_redirect。编辑/etc/php.d/security.ini,执行以下命令:

    出于安全原因,在典型的*Apache+PHP-CGI/FastCGI*环境中,启用cgi.force_redirect

    cgi.force_redirect=On

    第14个设置项:PHP用户和用户组ID

    mod_fastcgi是面向Apache Web服务器的cgi模块。它可以连接至外部的FASTCGI服务器。你要确保PHP以非根目录用户的身份来运行。如果PHP以根目录或100以下UID的身份来运行,它可以访问及/或处理系统文件。你必须使用Apache的suEXEC或mod_suPHP,以非特权用户的身份来执行PHP CGI。suEXEC功能让Apache用户们能够以有别于调用Web服务器的用户ID的用户ID来运行CGI程序。在该示例中,我的php-cgi以phpcgi用户的身份来运行,Apache以apache用户的身份来运行:

    #psaux |grepphp-cgi

    示例输出:

    phpcgi   6012 0.0 0.4 225036 60140 ?    S  Nov22 0:12 /usr/bin/php-cgi
    phpcgi   6054 0.0 0.5 229928 62820 ?    S  Nov22 0:11 /usr/bin/php-cgi
    phpcgi   6055 0.1 0.4 224944 53260 ?    S  Nov22 0:18 /usr/bin/php-cgi
    phpcgi   6085 0.0 0.4 224680 56948 ?    S  Nov22 0:11 /usr/bin/php-cgi
    phpcgi   6103 0.0 0.4 224564 57956 ?    S  Nov22 0:11 /usr/bin/php-cgi
    phpcgi   6815 0.4 0.5 228556 61220 ?    S  00:52 0:19 /usr/bin/php-cgi
    phpcgi   6821 0.3 0.5 228008 61252 ?    S  00:55 0:12 /usr/bin/php-cgi
    phpcgi   6823 0.3 0.4 225536 58536 ?    S  00:57 0:13 /usr/bin/php-cgi

    你可以使用spawn-fcgi等工具,以phpcgi用户的身份(先要为系统添加phpcgi用户)来创建远程和本地FastCGI进程:

    # spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgi

    现在,你可以配置Apache、Lighttpd和Nginx web服务器了,使用在127.0.0.1ip地址处端口9000上运行的php FastCGI。

    第15个设置项:限制PHP对文件系统的访问

    open_basedir命令设置了允许PHP使用fopen()和其他函数来访问哪些目录的文件。如果文件在open_basdir定义的路径外面,PHP就拒绝打开该文件。你无法使用符号链接作为变通办法。比如说,只允许访问/var/www/html目录、不允许访问/var/www、/tmp或/etc目录:

    限制PHP进程访问/var/www/html/等专门指定的目录外面的文件

    ; Limits the PHP process from accessing files outside; of specifically designated directories suchas/var/www/html/open_basedir="/var/www/html/"; ------------------------------------; Multipledirsexample; open_basedir="/home/httpd/vhost/cyberciti.biz/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/"; ------------------------------------