apache/php/mysql安全配置

來源:互聯網
上載者:User

標籤:

 Mysql基本安全設定
1.設定或修改Mysql root密碼:

  預設安裝後空密碼,以mysqladmin命令設定密碼:

  mysqladmin -uroot password "password"

  Mysql命令設定密碼:

  mysql> set password for [email protected]=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 [email protected] 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 data2 cd data3 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目錄下,在需要啟動時運行下面命令即可。  

[[email protected] init.d]# /etc/init.d/mysql start   

5、停止  

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

6、自動啟動  察看mysql是否在自動啟動列表中  

[[email protected] local]# /sbin/chkconfig –list   

把MySQL添加到你系統的啟動服務組裡面去  

[[email protected] local]# /sbin/chkconfig – add mysql   

把MySQL從啟動服務組裡面刪除。  

[[email protected] 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)中。

命令如下:  

[[email protected] 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。  

[[email protected] 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 <欄位名>

apache/php/mysql安全配置

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.