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 <字段名>

相關文章
相關標籤/搜索