標籤:
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安全配置