歡迎光臨, 訪客. 請先 登入註冊一個帳號.
五月 03, 2024, 02:09:26 上午
19595 文章 在 3865 主題 由 4580 會員
最新註冊會員: aa123aa1
LifeType 中文開發論壇  |  支援  |  安裝與設定  |  在PHP的safe_mode下安装plog问题多多 « 上篇主題 下篇主題 »
頁: [1]
作者 主題: 在PHP的safe_mode下安装plog问题多多  (閱讀 20207 次)
zj6812
訪客
« 於: 六月 18, 2005, 03:19:41 下午 »

我的系统是redhat9.0,PHP由于安全虽然已经设成了safe_mode,我安装plog时问题多多,虽然我通过把tmp,gallery目录改成777,plog也能安装成功,但每注册一个plog用户,就要到tmp,gallery目录为为他们建一个形如1、2、3等的目录供他们使用,而且在安装插件时,也需要在tmp中为他们建一些目录,并改权限为777,总之我觉的在safe-mod中使用PLOG很不方便,不知其它用户中有没有系统也是safe-mode的,你们是如何解决这些问题的?
已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #1 於: 六月 19, 2005, 10:56:20 下午 »

引用自: zj6812
我的系统是redhat9.0,PHP由于安全虽然已经设成了safe_mode,我安装plog时问题多多,虽然我通过把tmp,gallery目录改成777,plog也能安装成功,但每注册一个plog用户,就要到tmp,gallery目录为为他们建一个形如1、2、3等的目录供他们使用,而且在安装插件时,也需要在tmp中为他们建一些目录,并改权限为777,总之我觉的在safe-mod中使用PLOG很不方便,不知其它用户中有没有系统也是safe-mode的,你们是如何解决这些问题的?


這是沒辦法的,除非你解開 safe_mode ... 傷心  ,因為這是安裝 pLog 必須的條件之一。

Mark
已記錄

zj6812
訪客
« 回覆文章 #2 於: 六月 23, 2005, 08:57:09 下午 »

奇怪,你们使用的环境都不是safe_mode的?我是单位的网络管理员,我单位的网络用redhat9组建,是一个多用户系统,建有几百个用户帐号,如果不打开php的safe_mode,那不是其它用户可以很方便地列出别人目录中的内容,并阅读他们的源代码了吗?
已記錄
minstrel
二十四橋明月夜
總版主
一般會員
*****
文章: 106



檢視個人資料 個人網站
« 回覆文章 #3 於: 六月 23, 2005, 10:41:04 下午 »

1. 所有pLog使用者的源碼都是同一套.
2. 所有的個人資料都是放在MySQL中, 這部份跟 safe_mode 與否沒太大關係.

雖然pLog不能在safe_mode下執行, 但基於以上兩大理由, 我個人覺得, 保密性是沒什麼太大問題的.
已記錄

所謂思念
有時只是單純的等待
坐看世界如何一點一點將自己遺忘
月色染白了髮
Anonymous
訪客
« 回覆文章 #4 於: 六月 25, 2005, 05:26:41 上午 »

我的系统中有一套PLOG,但还有几百个帐号,各个帐号中都表他们自己的个人网站。如果把PHP设置为普通模式(不是SAFE_MODE),则各个帐号之间public_html中的内容,不是可以通过简单的编程被别人看到了吗?我说的不安全是指在非safe_mode下,某帐号中的PHP代码,可以查看其它帐号中public_html中的内容。所以我的系统中PHP一直是设为safe_mode的。
已記錄
minstrel
二十四橋明月夜
總版主
一般會員
*****
文章: 106



檢視個人資料 個人網站
« 回覆文章 #5 於: 六月 25, 2005, 11:42:41 上午 »

如果只是給單用戶使用, pLog可以在safe mode下執行.

但是, 多用戶使用時, pLog必須為每個新用戶開啟新的目錄與權限, 這部份就會被safe mode擋掉.

而且, 大概所有給多用戶使用的blog都會有這種問題吧.

解決方法有幾種.

1. 不使用 safe mode. 這是最簡單的解法.
2. 維持 safe mode, 每當有新用戶時, 這時pLog便會產生錯誤, 但可以用手動或使用script自動建立pLog所需產生的新目錄與對應的權限.
3. 維持 safe mode, 並改寫pLog的源碼, 將新目錄的產生與權限設定這部份, 交由系統本身來動作. (Linux上的話, 可以用shell script, perl, python, c等來達成)
已記錄

所謂思念
有時只是單純的等待
坐看世界如何一點一點將自己遺忘
月色染白了髮
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #6 於: 六月 27, 2005, 12:00:43 上午 »

這邊我真的很懷疑耶!我不覺得作虛擬主機一定要把 safe mode 卡死死的吧!

我用過大概將近 5 個虛擬主機,用來安裝 pLog 都沒有 safe mode 的問題,那麼是不適代表我租用的虛擬主機就安全呢!

你可能得找一下你的虛擬主機駔商,問一下能否把 safe mode 打開,或是更改設定。(研究一下 ipower web 怎麼裝的)

我用過的有 ipowerweb, starlogic, 5net, dreamhost, 戰國策。都可以阿!

Mark
已記錄

zj6812
新手見習
*
文章: 3


檢視個人資料
« 回覆文章 #7 於: 六月 27, 2005, 06:53:48 下午 »

我就是网站的系统管理员啊,如果我开放了safe_mode,则我可以放这么一个小程序上去就能看到目录中的文件名
<?
echo "<pre>\n";
echo `ls $dir`;
echo "</pre>\n";
?>

我再放这个程序上去,不是就可以看到其它帐号中的程序源代码了吗?
<html>
<head><title>显示HTML源代码</title></head>
<body>


<?php
$fp=fopen("$file","r") or die("打开文件$file 错");
while(!feof($fp)){
    $lines[]=fgets($fp,1024);

}
echo "共有".count($lines)."行<br><br>";
for($i=0;$i<count($lines);$i++){
    $lines[$i]=ereg_replace("<","&lt;",$lines[$i]);
    $lines[$i]=ereg_replace(">","&gt;",$lines[$i]);
    $lines[$i]=ereg_replace("\"","&quot;",$lines[$i]);
    echo $i.".  ".$lines[$i]."<br>";
}

fclose($fp);
?>
</body>
</html>
已記錄
Neo Lee
新手見習
*
文章: 11


檢視個人資料 個人網站
« 回覆文章 #8 於: 七月 04, 2005, 08:51:33 上午 »

如果你是要擋 fopen ,可以設定 open_basedir ,讓使用者只能開啟自己目錄下的檔案。

其它安全性設定可以參考官方網站對於 Safe Mode 的說明,相信對你會有幫助:
http://tw2.php.net/features.safe-mode

註:
不是大家都有空回文,請勿用 UP 推文,謝謝。
已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #9 於: 七月 05, 2005, 11:24:32 上午 »

neo:

謝謝!這就是為什麼我的虛擬主機沒有設 safe mode ,卻能限制我不能讀取別人檔案的原因了!原來 open_basedir 是這樣用。

大感激。

Mark
已記錄

zj6812
新手見習
*
文章: 3


檢視個人資料
« 回覆文章 #10 於: 七月 06, 2005, 08:54:50 下午 »

感谢neoli的回复,但我认为safe_mode与open_basedir还是有很大区别的。
不错,当open_basedir=. 时。确实用fopen()无法打开自己帐号以外的文件了。但在php程序中,``命令还是可以被使用,所以我通过以下程序
<?
echo "<pre>\n";
echo `cat /etc/passwd`;
echo "</pre>\n";
?>

还是可以很方便的得到系统中所有用户的帐号,如果改成`cat $_GET[file]`还是可以看到别人帐号中的文件内容的。

不设置safe_mode 的LINUX系统管理员,不知是如何处理这种安全问题的?
已記錄
Neo Lee
新手見習
*
文章: 11


檢視個人資料 個人網站
« 回覆文章 #11 於: 七月 06, 2005, 10:13:48 下午 »

要禁止使用者用 backquotes ,只要在 php.ini 裡面設定:

disable_functions = shell_exec

這樣就可以了。

Safe Mode 禁止使用的函數可以參考:
http://php.nctu.edu.tw/manual/en/features.safe-mode.functions.php

註: disable_functions 要禁用多個指令時,可以用逗點隔開
disable_functions = shell_exec, system, exec, passthru, show_source
已記錄
zj6812
新手見習
*
文章: 3


檢視個人資料
« 回覆文章 #12 於: 七月 09, 2005, 01:54:37 下午 »

小结及提问

小结一下:
  我以前一直不敢把safe_mode  off,主要是因为有二个怕:
一怕被其它用户用fopen()打开其它用户的文件。这个问题现在可以通过在PHP.INI中设置open_basedir=. 得到解决。
二怕Linux上的用户在PHP程序中通过``执行script脚本。这个问题现在可以通过在PHP.INI中设置disable_functions = shell_exec, system, exec, passthru, show_source得到解决。


提问:
  那么我就又不太明白了,如果把safe_mode设为on与设置open_basedir=.和disable_functions=shell_exec, system, exec, passthru, show_source还有什么不同呢,safe_mode还有其它什么安全性吗,我看safe_mode的主要功能就是上面提到的二个啊。
已記錄
Neo Lee
新手見習
*
文章: 11


檢視個人資料 個人網站
« 回覆文章 #13 於: 七月 12, 2005, 10:01:47 下午 »

safe mode 當然有其它的安全性限制呀。像 exec() 可以透過 safe_mode_exec_dir 來限制使用者執行的程式。

之前回覆的官方網址上面都有很明白的說明,有空可以仔細閱讀一下。

註:
disable_functions=shell_exec, system, exec, passthru, show_source 只是舉例 disable_functions 的用法,不是說這樣就等於把 safe mode 取消掉了。
已記錄
頁: [1]
LifeType 中文開發論壇  |  支援  |  安裝與設定  |  在PHP的safe_mode下安装plog问题多多 « 上篇主題 下篇主題 »
    前往: