[LNMP]Linux的Web环境的安全配置

安全问题是Web开发中非常重要的,本篇文章主要描述Web环境配置时候应该注意的安全问题,避免因web配置的不严谨导致危害进一步扩大(漏洞大部分是由应用程序导致)。

基础环境

centos 6.x
php 5.3

PHP安全配置


/etc/php.ini


display_errors = Off
expose_php = Off
enable_dl = Off
disable_functions= eval,passthru,exec,system,chroot,scandir,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,ini_set,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru

php-fpm 安全配置


/etc/php-fpm.conf或/etc/php-fpm.d/www.conf


php_flag[display_errors] = off

Nginx 安全配置


nginx.conf 里面的http域


server_tokens off;

Linux 运行用户安全建议


每个服务都使用单独的linux 用户组/用户启动,千万不能使用root用户运行,每个服务对应的用户:

  • nginx:nginx
  • php-fpm:nobody
  • mysqld:mysqld
  • memcached:memcached

检查/etc/passwd ,禁止web服务用户使用bash登陆

监听端口配置


如非必要,所有服务的监听ip限定为内网或localhost(若使用socket方式则忽略这一步骤),避免在公网上暴露服务端口。

  1. php-fpm服务:/etc/php-fpm.d/www.conf文件

    listen = 127.0.0.1:9000
    listen.allowed_clients = 127.0.0.1
  2. mysql:
    mysql的服务端口,在配置数据库用户时候设置,一般设置为内网ip
  3. memcached服务:
    memcached的服务端口,一般设置为内网ip

应用程序文件和目录权限


  1. 根据访问和web读写,将程序目录分离开:源码目录(source)、数据目录(data)、静态文件目录(static)等,方便权限和访问控制;
  2. 使用非root用户上传和管理应用程序文件;
  3. 仅将需要web读写的目录和文件设置为 chown -R data/ nobody:nobody;
  4. 仅将需要shell执行的文件,设为指定的shell运行用户并设定为可执行(chmod u+x),举例:chown command.php webManager:webManager

应用程序目录web访问限制


  1. 配置nginx.conf 对于上传(附件、数据)目录无执行权限,并且通过nginx禁止脚本的访问

禁止upload、data、static目录 执行任何脚本

location ~* /(upload|data|static)[/.]*/.*\.(php|php5|asp|aspx|jsp|sh){
deny all;
}

  1. 配置nginx.conf 对程序源码目录(无须直接访问源码的程序架构,通过./index.php 作为入口)无执行权限

禁止源码目录被web访问

location ~* /(protected|source)/{
deny all;
}

整理于2014/05

你可能感兴趣的:([LNMP]Linux的Web环境的安全配置)