中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

linux虛擬主機(jī)安全性設(shè)置

2014-09-22    來源:

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

眾所周知,虛擬主機(jī)的安全不好做,特別是防止跨目錄成為了重點(diǎn)。apache+php服務(wù)器防止跨目錄的方式比較簡單,網(wǎng)上的所有成熟虛擬主機(jī)解決方案都是基于apache的,如directadmin、cpanel。

但如今已然不是apache的時(shí)代了,在linux+nginx+mysql+php下怎么防止不同虛擬主機(jī)進(jìn)行跨站?

首先我們要清楚明白Nginx是怎么運(yùn)行的,再考慮怎么具體操作吧。

nginx實(shí)際上只是一個(gè)反向代理服務(wù)器,它接收到請(qǐng)求以后會(huì)看當(dāng)前請(qǐng)求是否是.php文件,如果是則轉(zhuǎn)交給php-fpm來處理,獲得結(jié)果后再發(fā)給用戶。所以有兩個(gè)權(quán)限需要考慮:第一是nginx的權(quán)限,第二是php-fpm的權(quán)限。如下圖,nginx和php-fpm都要讀取這個(gè)文件,所以權(quán)限分配是要考慮的重要一項(xiàng)。

2014082402315954182.png

防御跨站要防御的有三點(diǎn),第一是防止其他用戶列網(wǎng)站目錄,防止自己的一些敏感文件名被看到及訪問;第二是防止其他用戶讀取自己的文件,防止配置信息泄露;第三就是防止其他用戶寫shell在自己目錄。

php顯然也考慮到了這個(gè)問題,其配置文件中的open_basedir,是一個(gè)目錄列表,只允許php訪問其中給出的目錄。通過設(shè)置這個(gè)open_basedir我們就可以防御php讀寫web目錄以外的文件,比如/etc/passwd之類的。

但現(xiàn)在的問題是,open_basedir是寫在php.ini中的一個(gè)配置文件,而所有虛擬主機(jī)使用的php是同一個(gè)php,我們可以防止php訪問web目錄以外的文件,但是沒法防止“虛擬主機(jī)1”訪問“虛擬主機(jī)2”的文件,因?yàn)槎叨荚趙eb目錄內(nèi)。甚至還有一個(gè)更大的問題是,很多版本php的open_basedir并不靠譜,能被很容易地繞過。

這是現(xiàn)在遇到的問題。解決方法就是:讓每個(gè)虛擬主機(jī)用不同用戶來單獨(dú)啟動(dòng)php-fpm。

為了實(shí)現(xiàn)上面方法,我們需要對(duì)安裝好的lnmp做些修改。(我使用的就是國內(nèi)用的比較廣的"lnmp一鍵安裝包")。

0x01 lNMP加固


比如我們服務(wù)器上有兩個(gè)虛擬主機(jī)game01.com和game02.com,其目錄分別是 /home/wwwroot/game01/和/home/wwwroot/game02/。

這里說一下,新版的lnmp一鍵安裝包有自帶的防跨站功能,是因?yàn)閜hp 5.3.3以后,可以在php.ini末尾加上類似如下語句:

[HOST=www.vpser.net] 
open_basedir=/home/wwwroot/www.vpser.net/:/tmp/ 
[PATH=/home/wwwroot/www.vpser.net] 
open_basedir=/home/wwwroot/www.vpser.net/:/tmp/

就可以給不同HOST賦予不同open_basedir。但是我們這里不用這個(gè)方法,第一其限制php版本在5.3.3以上,第二open_basedir也是有局限與漏洞的,不能完全依靠這個(gè)玩意。所以,虛擬主機(jī)創(chuàng)建好以后,來到/usr/local/php/etc/php.ini把這些內(nèi)容注釋掉。(注釋符;)

首先,讓不同虛擬機(jī)用不同php-fpm運(yùn)行:

一、為每個(gè)站點(diǎn)創(chuàng)建php-fpm.pid文件

cd /usr/local/php5/var/run
touch php-fpm-game01.pid
touch php-fpm-game02.pid

二、為每個(gè)站點(diǎn)創(chuàng)建php-fpm.conf文件

cd /usr/local/php5/etc/ 
cp php-fpm.conf php-fpm-game01.conf 
cp php-fpm.conf php-fpm-game02.conf

三、為每個(gè)站點(diǎn)建立php-cgi.sock文件

touch /tmp/php-cgi-game01.sock #建立php-cgi.sock文件 
chown www.www /tmp/php-cgi-game01.sock #設(shè)置文件所有者為www(必須與nginx的用戶一致) 
touch /tmp/php-cgi-game02.sock 
chown www.www /tmp/php-cgi-game02.sock

四、修改相關(guān)文件

vi /usr/local/php5/etc/php-fpm-game01.conf 
pid = run/php-fpm-game01.pid 
listen =/tmp/php-cgi-game01.sock; 

vi /usr/local/php5/etc/php-fpm-game02.conf
pid = run/php-fpm-game02.pid
listen =/tmp/php-cgi-game02.sock; 

vi /etc/init.d/php-fpm 
vhost=$2 
php_fpm_CONF=${prefix}/etc/php-fpm-$vhost.conf 
php_fpm_PID=${prefix}/var/run/php-fpm-$vhost.pid 
php_opts="-d open_basedir=/home/wwwroot/$vhost/:/tmp/ --fpm-config $php_fpm_CONF"

上述最后一行,就是php-fpm執(zhí)行的參數(shù),其中我們將open_basedir設(shè)置成了/home/wwwroot/$vhost/:/tmp/,$vhost就是我們運(yùn)行時(shí)傳入的第二個(gè)參數(shù)$2(game01或game02)。

繼續(xù)修改

vi /usr/local/nginx/conf/vhost/game01.com.conf # 配置文件名可能不一樣,要根據(jù)實(shí)際情況改變
fastcgi_pass unix:/tmp/php-cgi-game01.sock;
vi /usr/local/nginx/conf/vhost/game02.com.conf 
fastcgi_pass unix:/tmp/php-cgi-game02.sock;

五.增加開機(jī)啟動(dòng)項(xiàng)

vi /home/start.sh
# !/bin/bash
auto=$1 /bin/bash /etc/rc.d/init.d/php-fpm $auto game01 /bin/bash /etc/rc.d/init.d/php-fpm $auto game02
chmod +x /home/start.sh

然后編輯/etc/rc.local 將start.sh加入啟動(dòng)項(xiàng)。 到此,不同虛擬主機(jī)就會(huì)以運(yùn)行不同的php-fpm。我們還需要用不同的用戶身份來運(yùn)行。

groupadd game01 groupadd game02 
useradd game01 -M -s /sbin/nologin -g game01 
useradd game02 -M -s /sbin/nologin -g game02

添加了game01.game01和game02.game02兩個(gè)用戶。 修改/usr/local/php/etc/php-fpm-game01.conf:

listen.owner = game01
listen.group = game01 
user=game01 
group=game01

game02同理修改。這樣我們就讓php-fpm以不同用戶來運(yùn)行了。

再來到/home/wwwroot/:

cd /home/wwwroot/ 
chown game01.game01 -R game01 
chown game02.game02 -R game02

將game01和game02文件夾分別給予用戶game01和game02。

再有,我們的nginx是默認(rèn)以www用戶運(yùn)行的,所以是不能讀取game01、game02用戶文件的,如果把文件權(quán)限設(shè)置成777,又不能防止game01讀取game02的文件。

所以,我們應(yīng)該將www用戶加入game01、game02組,再把game01、game02的文件設(shè)置成750權(quán)限,這樣就可以允許www來讀取game01/game02的文件(因?yàn)樵谕M,而組權(quán)限是5,5就夠了),又能防止game01讀取game02的文件。

linux中允許把一個(gè)用戶加入多個(gè)組,所以操作如下:

usermod -aG game01 www 
usermod -aG game02 www

這時(shí)候。我們的防御其實(shí)有兩層。

01.不同php-fpm運(yùn)行兩個(gè)虛擬主機(jī)的php程序,他們擁有自己的open_basedir,使之不能跨目錄。

02.即使open_basedir被繞過了,以game01用戶身份運(yùn)行的php-fpm也無法寫入、讀取game02的文件,因?yàn)間ame02的所有文件權(quán)限都是750。其他用戶沒有任何權(quán)限(0)。

一切設(shè)置好以后,說一下使用方法了。

0x02 使用方法


先kill掉已有的php-fpm,再重啟一下nginx,再/home/start.sh啟動(dòng)新的php-fpm即可。

/etc/init.d/php-fpm start game01 單獨(dú)啟動(dòng)game01
/etc/init.d/php-fpm start game02 單獨(dú)啟動(dòng)game02
/etc/init.d/php-fpm stop game01 單獨(dú)啟動(dòng)game01
/etc/init.d/php-fpm stop game02 單獨(dú)啟動(dòng)game02

以上是我拼湊的一點(diǎn)方法,可能并不是最佳方法(我對(duì)nginx機(jī)制也是不熟悉,也許有更簡單的方法可以解決這個(gè)問題),所以也希望各大牛能分享自己運(yùn)維的方法,指出我的不足

0x03 參考:


http://drops.wooyun.org/tips/1323

http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0819/8389.html

http://yzs.me/2198.html


標(biāo)簽: linux Mysql vps 安全 代理服務(wù)器 服務(wù)器 漏洞 權(quán)限 網(wǎng)站 問題 虛擬主機(jī) 虛擬主機(jī)使用 用戶

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:美國千余商店收銀系統(tǒng)遭攻擊:泄露交易數(shù)據(jù)

下一篇:皮尤研究:2025年前可能發(fā)生致命網(wǎng)絡(luò)攻擊