许多新的系统管理员忘记了应用安全性,配置与Apache,MySQL和PHP生产使用虚拟主机环境的时候。我想包括所有我们必须同时准备生产使用或新系统中的任何现有的LAMP设置被认为是这些安全建议。
文章对于安装LAMP:
如何在CentOS / RHEL 7安装LAMP
如何在CentOS / RHEL 6/5安装LAMP
如何在Ubuntu和Debian的安装LAMP 本文中所有使用的配置更改将在下面的配置文件中按你的操作系统进行更新。在某些情况下,配置文件路径可能改变。因此,请在相应的文件变化。做修改后重新启动相关服务来更改生效。
For Ubuntu, Debian & LinuxMint:
Apache2: /etc/apache2/apache2.conf
PHP5: /etc/php5/apache2/php.ini
MySQL: /etc/mysql/my.cnf
For CentOS, RedHat & Fedora:
Apache: /etc/httpd/conf/httpd.conf
PHP: /etc/php.ini
MySQL: /etc/my.cnf
1.隐藏版本和操作系统标识(Apache)
所述的
ServerTokens指令控制是否服务器响应头字段被发送回客户端。该ServerSignature配置在服务器生成的文档页脚。以下指令如下编辑Apache配置文件和更新。
ServerTokens Prod
ServerSignature Off
2.禁用目录列表(Apache)
如果目录列表在Apache中启用。然后,所有的文件和目录列表将网页上显示,如果没有默认文档存。添加如下配置Apache中禁止目录列表服务器。
<Directory />
Options -Indexes
</Directory>
3.限制文件和目录访问(Apache)
在Apache中限制某些目录,文件,位置访问。
限制目录
要限制用户的目录和文件的访问,这将只允许IP地址是从允许定义。
<Directory "/home/user/public_html">
Order Deny,Allow
Deny from all
Allow from 192.168.1.0/24
Allow from .example.com
</Directory>
限制文件
我们也可以使用文件指令像下面限制特定文件。
<File data.xml>
Order deny,allow
Deny from all
</File>
位置限制
位置指令限制了URL封闭指令的范围。
<Location /admin>
Order Deny,Allow
Deny from all
Allow from 192.168.1.0/24
Allow from .example.com
</Location>
4.禁用服务器端包含和CGI执行(Apache)
我们可以简单地定义目录标记禁用服务器端包含和CGI执行。在Apache的虚拟主机配置文件下添加。
<Directory "/home/user/public_html">
Options -Includes -ExecCGI
</Directory>
5.限制PHP信息泄漏(PHP)
默认情况下PHP安装暴露给全世界已安装了PHP的服务器上,其中包括HTTP头中的PHP版本上(例如:X-Powered-By: PHP/5.4.20)。阅读更多 若要隐藏在下面的指令为Off, 编辑php.ini并更新这个值
expose_php = Off
6.禁用远程执行代码(PHP)
如果allow_url_fopen选项您的设置被启用,它允许ILE功能,如file_get_contents()函数和include请求,可以从HTTP检索数据或FTP远程位置,并执行其代码语句。
allow_url_fopen=Off
allow_url_include=Off
7.禁用危险的PHP函数(PHP)
我们可以使用disable_functions选项在PHP配置文件中禁用任何PHP函数。禁用其可以是有害的,并在应用中不使用所有的功能。
disable_functions =exec,shell_exec,passthru,system,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,proc_open,pcntl_exec
8.限制PHP访问文件系统(PHP)
该open_basedir的指令集从PHP允许访问文件的目录
open_basedir="/home/user/public_html"
9.禁用不使用的PHP模块(PHP)
PHP支持“Dynamic Extensions”,在PHP环境加载。我们可以禁用任何未使用的模块,通过更改配置文件名,降低系统负载
# cd /etc/php.d/
# mv oci8.ini oci8.ini.disable
10.启用PHP限制(PHP)
为了让用户上传下面的配置价值最大尺寸,更新的文件。
upload_max_filesize = 2M # Maximum 2M of file user can upload
每个脚本的最大执行时间
max_execution_time = 30 # seconds
最长时间每个脚本可能会花费解析请求数据
max_input_time = 60 # seconds
11.限制远程MySQL访问(MySQL)
如果远程访问数据库的应用程序环境没有要求,那么禁用数据库服务器的所有远程连接。更简单的方法来做到这一点迫使MySQL服务器只监听127.0.0.1(本地主机)。 编辑下面的值MySQL配置文件和更新。
bind-address=127.0.0.1
12.禁止使用本地INFILE(MySQL)
启用本地INFILE可能是危险的对您系统的安全性。如果LOCAL INFILE是在服务器启用,用户可以将任何文件(如/etc/passwd, /etc/shadow 文件)加载到一个表很容易。 要禁用此编辑MySQL配置文件,并添加以下下的[mysqld]部分的值。
[mysqld]
local-infile=0
13.在MySQL中创建应用程序特定用户(MySQL)
不要使用MySQL“root”用户通过应用程序访问数据库。它可以是危险的,你的系统。因此,确保创建和使用应用程序特定用户对唯一的应用程序的数据库有限。要创建MySQL账户使用下面的命令。
root@youcl.com:~# mysql -u root -p
mysql> CREATE USER 'myusr'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO 'myusr'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
14. 改善mysql_secure_installation安全(MySQL)
安装MySQL mysql_secure_installation命令后是为确保MySQL服务器非常有用的。该命令也将启用超级用户密码保护。
root@youcl.com:~# mysql_secure_installation
"Only required output is showing below. In actual you will see more output on-screen"
Change the root password? [Y/n] y
New password: **********
Re-enter new password: **********
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
15.写保护配置文件(Apache / MySQL / PHP)
在本节中,我们在保护的LAMP使用,所以比任何人都无法更改这些文件我们所有的服务器配置文件。
# chattr +i /etc/php.ini
# chattr +i /etc/php.d/*
# chattr +i /etc/my.cnf
# chattr +i /etc/httpd/conf/httpd.conf
记住不是启用写保护没有用户包括root用户可以更新这些文件之后。如果你需要首先使用下面的命令来更新任何文件禁用写保护。
# chattr -i filename
我们将不断更新有用的LAMP安全提示这篇文章。我们还请您通过添加赞扬他们提出建议。