apache/php/mysql安全配置

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

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

  mysqladmin -uroot password "password"

  Mysql命令设置密码:

  mysql> set password for root@localhost=password(‘password);

  更改密码:

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

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

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

3. 更改默认root账号名称:

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

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
操作步骤:
1、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服务器
2、访问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
 

1、连接本机MySQL

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

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

2、连接远程MySQL

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

        mysql -h110.110.110.110 -uroot -pabcd123

        (注:u与root可以不用加空格,其它也一样)


3、修改登录密码  

   

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

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

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

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

5、停止  

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

6、自动启动  

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

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

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

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

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

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

7、更改MySQL目录  

 

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

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

7.1、home目录下建立data目录  

cd /home   mkdir data   

7.2、把MySQL服务进程停掉:   

mysqladmin -u root -p shutdown   

7.3、把/var/lib/mysql整个目录移到/home/data   

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

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

7.4、找到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.5、编辑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.6、修改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.7、重新启动MySQL服务  

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

或用reboot命令重启Linux   

如果工作正常移动就成功了,否则对照前面的7步再检查一下。  

 

八、MySQL的常用操作  

 

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

8.1、MySQL常用操作命令 

8.1.1、显示数据库列表:

        show databases;

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

8.1.2、显示库中的数据表:

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

        show tables;

8.1.3、显示数据表的结构:

        describe 表名;

8.1.4、建库:

        create database 库名;

8.1.5、建表:

        use 库名;

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

8.1.6、删库和删表:

        drop database 库名;

        drop table 表名;

8.1.7、将表中记录清空:

        delete from 表名;

8.1.8、显示表中的记录:

        select * from 表名;

8.1.9、增加记录  

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

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

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

可用select命令来验证结果。  

mysql> select * from name;    

8.1.10、修改纪录  

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

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

8.1.11、删除纪录  

例如:删除张三的纪录。  

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

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

        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.1、字段操作

9.1.1、增加字段

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

9.1.2、修改字段

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

9.1.3、删除字段

alter table dbname drop column <字段名>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。