apache/php/mysql安全配置

 Mysql基本安全设置
1.设置或修改Mysql root密码:

  默认安装后空密码,以mysqladmin命令设置密码:php

  mysqladmin -uroot password "password"html

  Mysql命令设置密码:mysql

  mysql> set password for root@localhost=password('password);程序员

  更改密码:web

  update mysql.user set password=password('password') where user='root';flush privileges;sql

2.删除默认的数据库和用户shell

  drop database test;use mysql;delete from db;delete from user where not(host="localhost" and user="root");flush privileges;数据库

3. 更改默认root帐号名称:apache

   update mysql.user set user="admin" where user="root";flush privileges;centos

4. 本地文件安全:

   set-variable=local-infile=0

5. 禁止远程链接mysql,远程管理可经过phpmyadmin,编辑my.cnf在[mysqld]添加:

   skip-networking

6.最小权限用户:

   create database db1;grant select,insert,update,delete,create,drop privileges on database.* to user@localhost identified by 'passwd';

7. 限制普通用户浏览其它数据库,编辑my.cnf在[mysqld]添加:

   --skip-show-database

8.快速修复MySQL数据库
   修复数据库

  mysqlcheck -A -o -r -p

  修复指定的数据库

  mysqlcheck -o -r database -p

9.跟据内存的大小选择MySQL的配置文件:

  my-small.cnf # > my-medium.cnf # 32M - 64Mmy-large.cnf # memory = 512Mmy-huge.cnf # 1G-2G 
my-innodb-heavy-4G.cnf # 4GB 
----------------------------------------------------------------------------
 更改Apache默认网站目录

建立目录
在根目录下
1 mkdir data
2 cd data
3 mkdir website
操做步骤:
一、vi /etc/httpd/conf/httpd.conf
找到 DocumentRoot “/var/www/html” 这一段 #apache的根目录
把/var/www/html 这个目录改成/data/website
再找到 #定义apache /var/www/html这个区域
把 /var/www/html改为/data/website
这样咱们就把apahce的默认路径改掉了
1 service httpd restart #重启Apache服务器
二、访问localhost的时候,会发现访问拒绝,这是为何呢?
 
主要是由于你的/home/wwwroot/web1/htdocs的权限是750,apache这个用户没有权限访问,你须要更改掉权限,能够这样改
1 chmod -R 755 /data/website
而后去访问 发现正常运行了(apache的用户:apache 运行apache的组:apache)
至此,Apache默认网站目录更改为功。

而后把你的项目移到配置好的目录下便可。
---------------------------------------------------------------------------------------------------------
 Apache安全配置

1. 隐藏banner信息

ServerTokens OS  修改成:ServerTokens Prod (在出现错误页的时候不显示服务器操做系统的名称)

ServerSignature On 修改成:ServerSignature Off(不回显apache版本信息)

2. 删除默认网站及页面

删除默认的页面,防止泄露服务器信息

3. 可修改banner信息

4. 配置httpd.conf禁止目录浏览

将Options Indexes FollowSymLinks改成Options -Indexes FollowSymLinks

5. 配置httpd.conf设置默认文档

DirectoryIndex index.html

6. 合理配置apache的运行帐户

为apache单独创建一个运行帐户及帐户组,并在httpd.conf配置

User apacheGroup apache

9. 合理控制apache运行帐户对磁盘的写入,执行权限

取消apache运行帐户对网站目录的写入权限,上传目录除外,其余非网站目录尽可能不给权限

10. 合理控制apache运行帐户对sh等的执行权限

取消掉了运行帐户对sh等的执行权限后可以防止webshell经过默认的sh执行命令

11. 配置httpd.conf取消对上传目录的php执行权限

<Directory "/var/www/html/aaa">         <FilesMatch ".(php|php5)$">             Deny from all         </FilesMatch> </Directory>

12. 配置httpd.conf限制禁止访问的文件夹,例如后台目录

<Directory "/var/www/html/aaa">             Deny from all     </Directory>

13. 配置httpd.conf限制一些特殊目录的特定ip访问,如内部接口等。

<Directory "/var/www/html/aaa">         Order Deny,Allow    Deny from all    Allow from 192.168.1.111    </Directory>

14. 配置httpd.conf限制一些文件类型的访问,如txt的日志

<Files ~ ".txt$">     Order allow,deny     Deny from all </Files>

15.配置httpd.conf修改修改监听端口来防止一些内部系统被扫描

这样能够防止一些直接扫描80端口的黑客

Listen 12345

16. 关闭对.htaccess的支持

AllowOverride All改成AllowOverride None
------------------------------------------------------------------------------------------------------------------------
 php.ini的安全优化

(1) 打开php的安全模式
  php的安全模式是个很是重要的内嵌的安全机制,可以控制一些php中的函数,好比system(),
  同时把不少文件操做函数进行了权限控制,也不容许对某些关键文件的文件,好比/etc/passwd,
  可是默认的php.ini是没有打开安全模式的,咱们把它打开:
  safe_mode = on
 
(2) 用户组安全
  当safe_mode打开时,safe_mode_gid被关闭,那么php脚本可以对文件进行访问,并且相同
  组的用户也可以对文件进行访问。
  建议设置为:
  safe_mode_gid = off
  若是不进行设置,可能咱们没法对咱们服务器网站目录下的文件进行操做了,好比咱们须要
  对文件进行操做的时候。
 
(3) 安全模式下执行程序主目录
  若是安全模式打开了,可是倒是要执行某些程序的时候,能够指定要执行程序的主目录:
  safe_mode_exec_dir = D:/usr/bin
  通常状况下是不须要执行什么程序的,因此推荐不要执行系统程序目录,能够指向一个目录,
  而后把须要执行的程序拷贝过去,好比:
  safe_mode_exec_dir = D:/tmp/cmd
  可是,我更推荐不要执行任何程序,那么就能够指向咱们网页目录:
  safe_mode_exec_dir = D:/usr/www
 
(4) 安全模式下包含文件
  若是要在安全模式下包含某些公共文件,那么就修改一下选项:
  safe_mode_include_dir = D:/usr/www/include/
  其实通常php脚本中包含文件都是在程序本身已经写好了,这个能够根据具体须要设置。
 
(5) 控制php脚本能访问的目录
  使用open_basedir选项可以控制PHP脚本只能访问指定的目录,这样可以避免PHP脚本访问
  不该该访问的文件,必定程度上限制了phpshell的危害,咱们通常能够设置为只能访问网站目录:
  open_basedir = D:/usr/www
 
(6) 关闭危险函数
  若是打开了安全模式,那么函数禁止是能够不须要的,可是咱们为了安全仍是考虑进去。好比,
  咱们以为不但愿执行包括system()等在那的可以执行命令的php函数,或者可以查看php信息的
  phpinfo()等函数,那么咱们就能够禁止它们:
  disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
  若是你要禁止任何文件和目录的操做,那么能够关闭不少文件操做
  disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,   rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
  以上只是列了部分不叫经常使用的文件处理函数,你也能够把上面执行命令函数和这个函数结合,
  就可以抵制大部分的phpshell了。
 
(7) 关闭PHP版本信息在http头中的泄漏
  咱们为了防止黑客获取服务器中php版本的信息,能够关闭该信息斜路在http头中:
  expose_php = Off
  好比黑客在 telnet www.12345.com 80 的时候,那么将没法看到PHP的信息。
 
(8) 关闭注册全局变量
  在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,可以直接访问,
  这是对服务器很是不安全的,因此咱们不能让它注册为全局变量,就把注册全局变量选项关闭:
  register_globals = Off
  固然,若是这样设置了,那么获取对应变量的时候就要采用合理方式,好比获取GET提交的变量var,
  那么就要用$_GET[‘var’]来进行获取,这个php程序员要注意。
 
(9) 打开magic_quotes_gpc来防止SQL注入
  SQL注入是很是危险的问题,小则网站后台被入侵,重则整个服务器沦陷,
  因此必定要当心。php.ini中有一个设置:
  magic_quotes_gpc = Off
  这个默认是关闭的,若是它打开后将自动把用户提交对sql的查询进行转换,
  好比把 ‘ 转为 \’等,这对防止sql注射有重大做用。因此咱们推荐设置为:
  magic_quotes_gpc = On
 
(10) 错误信息控制
  通常php在没有链接到数据库或者其余状况下会有提示错误,通常错误信息中会包含php脚本当
  前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,因此通常服务器建议禁止错误提示:
  display_errors = Off
  若是你倒是是要显示错误信息,必定要设置显示错误的级别,好比只显示警告以上的信息:
  error_reporting = E_WARNING & E_ERROR固然,我仍是建议关闭错误提示。 
 详细: http://www.centoscn.com/CentOS/Intermediate/2013/1126/2147.html
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Mysql
 

一、链接本机MySQL

    例1:链接到本机上的MYSQL。

        首先在打开DOS窗口,而后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,若是刚安装好MYSQL,超级用户root是没有密码的,故直接回车便可进入到MYSQL中了,MYSQL的提示符 是:mysql>。

二、链接远程MySQL

    例2:链接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入如下命令:

        mysql -h110.110.110.110 -uroot -pabcd123

        (注:u与root能够不用加空格,其它也同样)


三、修改登陆密码  

   

    MySQL默认没有密码,安装完毕增长密码的重要性是不言而喻的。

格式:mysqladmin -u用户名 -p旧密码 password 新密码  

四、启动  
 MySQL安装完成后启动文件mysql在/etc/init.d目录下,在须要启动时运行下面命令便可。  

[root@test1 init.d]# /etc/init.d/mysql start   

五、中止  

/usr/bin/mysqladmin -u root -p shutdown   

六、自动启动  

察看mysql是否在自动启动列表中  

[root@test1 local]# /sbin/chkconfig –list   

把MySQL添加到你系统的启动服务组里面去  

[root@test1 local]# /sbin/chkconfig – add mysql   

把MySQL从启动服务组里面删除。  

[root@test1 local]# /sbin/chkconfig – del mysql 

七、更改MySQL目录  

 

    MySQL默认的数据文件存储目录为/var/lib/mysql。

假如要把目录移到/home/data下须要进行下面几步:  

7.一、home目录下创建data目录  

cd /home   mkdir data   

7.二、把MySQL服务进程停掉:   

mysqladmin -u root -p shutdown   

7.三、把/var/lib/mysql整个目录移到/home/data   

mv /var/lib/mysql /home/data/   

这样就把MySQL的数据文件移动到了/home/data/mysql下  

7.四、找到my.cnf配置文件  

若是/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并更名为my.cnf)中。

命令以下:  

[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf   

7.五、编辑MySQL的配置文件/etc/my.cnf   

为保证MySQL可以正常工做,须要指明mysql.sock文件的产生位置。

修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。

操做以下:  

vi  my.cnf   

(用vi工具编辑my.cnf文件,找到下列数据修改之)   

# The MySQL server     [mysqld]    

port   = 3306    

#socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)   

socket  = /home/data/mysql/mysql.sock   (加上此行)  

7.六、修改MySQL启动脚本/etc/rc.d/init.d/mysql   

最后,须要修改MySQL启动脚本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改为你如今的实际存放路径:home/data/mysql。  

[root@test1 etc]# vi /etc/rc.d/init.d/mysql   

#datadir=/var/lib/mysql    (注释此行)  

datadir=/home/data/mysql   (加上此行)  

7.七、从新启动MySQL服务  

/etc/rc.d/init.d/mysql start   

或用reboot命令重启Linux   

若是工做正常移动就成功了,不然对照前面的7步再检查一下。  

 

8、MySQL的经常使用操做  

 

注意:MySQL中每一个命令后都要以分号;结尾。 

8.一、MySQL经常使用操做命令 

8.1.一、显示数据库列表:

        show databases;

        刚开始时才两个数据库:mysql和test。MySQL库很重要它里面有MYSQL的系统信息,咱们改密码和新增用户,实际上就是用这个库进行操做。

8.1.二、显示库中的数据表:

        use mysql; //打开库,学过FOXBASE的必定不会陌生吧

        show tables;

8.1.三、显示数据表的结构:

        describe 表名;

8.1.四、建库:

        create database 库名;

8.1.五、建表:

        use 库名;

        create table 表名 (字段设定列表);

8.1.六、删库和删表:

        drop database 库名;

        drop table 表名;

8.1.七、将表中记录清空:

        delete from 表名;

8.1.八、显示表中的记录:

        select * from 表名;

8.1.九、增长记录  

例如:增长几条相关纪录。  

mysql> insert into name values('','张三','男','1971-10-01');   

mysql> insert into name values('','白云','女','1972-05-20');   

可用select命令来验证结果。  

mysql> select * from name;    

8.1.十、修改纪录  

例如:将张三的出生年月改成1971-01-10   

mysql> update name set csny='1971-01-10' where xm='张三';   

8.1.十一、删除纪录  

例如:删除张三的纪录。  

mysql> delete from name where xm='张三';   

8.二、一个建库和建表以及插入数据的实例

        drop database if exists school; //若是存在SCHOOL则删除

        create database school; //创建库SCHOOL

        use school; //打开库SCHOOL

        create table teacher //创建表TEACHER

        (

        id int(3) auto_increment not null primary key,

        name char(10) not null,

        address varchar(50) default ’深圳’,

        year date

        ); //建表结束

        //如下为插入字段

        insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’);

        insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’);  

 

九 、修改数据库结构

 

9.一、字段操做

9.1.一、增长字段

alter table dbname add column <字段名><字段选项>

9.1.二、修改字段

alter table dbname change <旧字段名> <新字段名><选项>

9.1.三、删除字段

alter table dbname drop column <字段名>

相关文章
相关标签/搜索