| 白狐狸 回复于:2003-03-05 10:11:47 |
| 啊,这个问题真没想到过,不过一般也没谁会这么无聊啊,但总是个令人当心的问题啊,我也想知道 |
| HonestQiao 回复于:2003-03-05 22:01:15 |
| 但是万一客户的保密性的东西被别人读取了,那可怎么是好啊。
这个问题目前积求求接啊 |
| 红袖添香 回复于:2003-03-06 01:01:34 |
| [quote:f90823da96="HonestQiao"]但是万一客户的保密性的东西被别人读取了,那可怎么是好啊。
这个问题目前积求求接啊[/quote:f90823da96] 用户空间对外开放,外界能够读取的条件是,权限至少是 目录:0755 文件:0644 跟你的要求正好是矛盾的~ |
| aKen 回复于:2003-03-06 16:13:56 |
| 你可以通过在<virtualhost>内设置用户和组以及设置每个用户的主目录权限来试一个,方法是在每一个的virtualhost内添加user username group groupname,主目录如open_basedir/username设置为0700 |
| iloveyoufreebsd 回复于:2003-03-07 11:40:59 |
| [quote:c27f60424d="aKen"]你可以通过在<virtualhost>内设置用户和组以及设置每个用户的主目录权限来试一个,方法是在每一个的virtualhost内添加user username group groupname,主目录如open_basedir/username设置为0700[/quote:c27f60424d]
是的我用过的。 不过得使 apache 支持 suexec 。 每个用户就可以设置权限为 700 运行了。 |
| HonestQiao 回复于:2003-04-03 19:39:07 |
| 但是这样子又出现了一个问题:
因为是提供免费空间服务,所以可能100各用户都在通一台服务器上面。 这不会要我建立一百个实际用户把,我的用户都是虚拟用户阿 |
| jasf 回复于:2003-04-04 13:25:57 |
| [quote:7babce789d="aKen"]你可以通过在<virtualhost>内设置用户和组以及设置每个用户的主目录权限来试一个,方法是在每一个的virtualhost内添加user username group groupname,主目录如open_basedir/username设置为0700[/quote:7babce789d]
这方法我也用过,相对安全性高点。但是,当里面用户多的时候容易出现资源不足。对于一些用户自行修改目录权项的仍会引起一些问题。 |
| wesnet 回复于:2003-04-14 17:47:37 |
| UP
这就是我这个月烦的事情罗 :( 随便补充一个,怎么能控制PHP写文件或上传文件不能超出虚拟主机的磁盘限制?(没办法用系统的QUOTA,因为都是虚拟用户) |
| proftpd 回复于:2003-04-15 13:00:01 |
| upup 楼上的更难哦。 |
| wesnet 回复于:2003-04-15 17:13:32 |
| 呵呵。。。是呀。。。好麻烦D
希望能快点有人出来为我们解决难题 :) |
| haohaoo 回复于:2003-04-15 18:57:38 |
| [quote:881736f591="iloveyoufreebsd"]
是的我用过的。 不过得使 apache 支持 suexec 。 每个用户就可以设置权限为 700 运行了。[/quote:881736f591] suexec要怎么安装? 能介绍一下? |
| wesnet 回复于:2003-04-25 10:32:06 |
| 顶....... :twisted: |
| ique 回复于:2003-04-29 09:25:53 |
| 在hostqiao的问题中说道:
[quote][/如果用户数目只有几十个,那还可以一个个特别设置 quote] linux的一个好处就配置的修改仅仅需要对文件进行修改,也就是说这些都可以通过程序来实现。 用户的开通通过一个某一个具有特许权限的cgi或者php程序来实现(特许权限--是指这个程序可以完成开通,具体设计就要靠自己了,我是新手),这样子就和定制是一样的效果。。 不知道是不是这样子? |
| wesnet 回复于:2003-04-29 09:29:26 |
| [quote:1cf763cfb5="ique"]??恐挥屑甘?觯?腔箍梢砸桓龈鎏乇鹕柚?quote]
linux的一个好处就配置的修改仅仅需要对文件进行修改,也就是说这些都可以通过程序来实现。 用户的开通通过一个某一个具有特许权限的cgi或者php程序来实现(..........[/quote:1cf763cfb5] 别想得太简单。。。我试过啦。。。对PHP进行大量用户的控制。。必须修改PHP的源码。。。好复杂的哦。。。但我已经 :D :) :o 搞好啦。。咿嘻嘻 |
| leaper 回复于:2003-04-29 10:17:33 |
| Apache 用戶目錄存取支援 - suEXEC
甚麼是suEXEC? suEXEC自Apache 1.2版本開始引入,負責處理CGI和SSI程式的請求,確保網頁使用者能以該目錄或程式的用戶ID來執行遠端程式。在正常情況下,所有CGI或SSI程式都必需由程式擁有者,透過Apache執行。 在suEXEC使用正確的情況下,使用CGI/SSI程式的用戶ID來執行程式,能強制阻止其他用戶胡亂執行,從而提高網絡的安全性。相反,假若網管人員未能正確設定suEXEC,suEXEC將會為你帶來多個無可預知的系統保安漏洞,若你不熟識控制及設定ID的程式及其安全問題,我們強烈建議你不使用suEXEC。 用前準備 在閱讀正式說明文件前,請細看及留意Apache Group的要求及假設。 第一,Apache Group假定你的作業系統為任何一種UNIX系統,並擁有setuid及setgid功能,所有suEXEC設置例子都需在這大前提下才能正常運作。而在其他支援suEXEC的作業平台中,suEXEC的設置亦有可能和UNIX不同。 第二,你必需有系統保安及管理的基本概念,這些概念包括setuid/setgid的運作原理及其對系統的衝擊,和清楚知道這些運作所產生的保安漏洞。 第三,在你沒有更改suEXEC程式碼的情況下,Apache Group才能保證suEXEC的風險已減到最低,suEXEC的程式碼經開發者及測試者審慎測試,已加入預防錯誤的程式碼以保證suEXEC不會產生錯誤,更改原有程式碼會引起無法預知的系統漏洞。除非你已精通系統安全編程,及你願意和Apache Group分享你的開發成果,不則我們絕不建議更改suEXEC的程式碼。 第四,在Apache Group考慮過後,suEXEC已豁出Apache的預設安裝之外。因此,網管人員在安裝suEXEC時需特別注意suEXEC的細節,幾經考慮了suEXEC的各項設置後,網管人員可從預設的安裝方法嵌入suEXEC至Apache中,suEXEC的設置參數必需謹慎決定。由於suEXEC需網管人員有周密的計劃,故Apache Group謹希望審慎及細心的網管人員使用。 suEXEC安全模型 在設定及安裝suEXEC之前,我們先討論suEXEC的安全模型,這樣你可詳細地了解suEXEC的運作狀況及其系統保安措施。 suEXEC是Apache的「包裝程式」,這包裝程式有setuid權限,當有CGI或SSI執行請求時,suEXEC就會把執行用戶更改為程式的擁有者後才執行。 包裝程式其後會根據以下步驟檢查「包裝過程」是否正常,若以下有其中一個檢查失敗,suEXEC會把錯誤寫入記錄,並拒絕執行請求: 傳入包裝程式的參數不足 。包裝程式只會在傳入足夠參數時才會執行,而這些參數必需乎合Apache的內部格式,如果包裝程式接收不到足夠的參數,那代表suEXEC被人破壞,或你suEXEC的Binary版本出現問題。 執行包裝程式的是否合法用戶? 這檢查確保執行程式的用戶是系統中合法的用戶。 執行用戶有沒有權使用包裝程式?只有唯一一個用戶(Apache用戶)可執行這個程式。 被執行的程式有不安全的相對目錄參照字元?所有程式檔名開頭含有「/」或「..」都不獲處理,程式需存在Apache分配的目錄中。 執行用戶是否合法用戶? 執行用戶必需是系統中已存在用戶。 執行工作組是否合法工作組?執行工作組必需是系統中已存在工作組。 執行用戶是否超級用戶? 目前Apache仍不允許「root」執行CGI/SSI程式。 CGI/SSI programs. 執行用戶ID是否低於Apache的最低容許ID? 最低允許ID值在設定檔中找到,用來控制哪個值以上的ID才可執行包裝程式,這功能可過濾系統內設用戶。 程式所屬的工作組是否超級用戶工作組? 目前suEXEC仍不允許「root」工作組執行CGI/SSI程式 程式工作組是否低於Apache最低容許ID? 最低允許ID值在設定檔中找到,用來控制哪個值以上的GID才可執行包裝程式,這功能可過濾系統內設工作組。 包裝程式可否更改執行用戶及其工作組? 成功與否在於將CGI/SSI程式SETUID及SETGID的過程,工作組使用列表 載有該程式的目錄是否存在? 若果該目錄並不存在,要執行的程式也不會存在。 載有程式的目錄是否在Apache所設置的網頁空間內? 若執行請求發生於Apache常規部分,該目錄應在Apache的根目錄;若請求發生於一般UserDir,該目錄應在用戶的Document Root中。 載有程式的目錄是否拒絕任何人寫入? 其他用戶不能存取這個目錄,只有目錄擁有者才能更改目錄裏的內容。 要執行的程式存在嗎? 不可能執行不存在的程式。 程式是否不能被更改或更新? 除了程式擁有者外,任何人都沒有權限更改該程式。 你的程式是否setuid或setgid程式? suEXEC不會處理會更改現時UID/GID的程式。 程式擁有者是否就是suEXEC所包裝的用戶? 只有把請求包裝成程式擁有者權限才能執行該程式。 可否清除程序環境以確保程式能順利行? suEXEC利用安全執行目錄來清除程序環境,所有頁面傳遞變數均會清除(在設置suEXEC時已設定)。 我們能否成為被執行的程式? execute? suEXEC已完了,是被執行的程式的開始。 以上就是suEXEC包裝程式的標準運作安全模型,這嚴謹的模型引入了CGI/SSI程式的限制及程式設計指導,但設計時當然要在腦海中一步步實行。 如欲獲取更多關於安全模型如何限制伺服器的設定,以及知道如何避免suEXEC所產生的系統漏洞,請參看Beware the Jabberwock。 設定及安裝suEXEC 我們正式開始把suEXEC嵌入Apache中,如果你正使用Apache 1.2或是Apache 1.3的src/Configure的話,你需修改suEXEC的頭檔(Header File)及人手安裝Binary版本至正確位置,安裝過程可在suEXEC附加文件找到。以下幾節將會描述Apache 1.3,透過AutoConf-Style Interface(APACI)的設定及安裝過程。 suEXEC APACI設定選項 --enable-suexec 代表安裝suEXEC至Apache中,加入這選項後,必需額外設置最少有一個 --suexec-xxxxx 選項,讓APACI知道suEXEC該如何設定。 --suexec-caller=UID 在Apache能呼叫suEXEC的用戶名稱,這是執行Apache子程序的用戶,只有這個用戶才可呼叫suEXEC。 --suexec-docroot=DIR 設定網頁文件存放位置,只有這目錄及其子目錄內的程式才可使用suEXEC,預設的目錄為 --datadir 加上「/htdocs」,例如你將datadir設為--datadir=/home/apache,那麼「/home/apache/htdocs」就是允許使用suEXEC包裝程式的目錄。 --suexec-logfile=FILE 設定記錄檔的檔案名稱,所有suEXEC的執行記錄及錯誤均會記入此檔(方便檢查及除錯),預設值為「suexec_log」,而預設目錄設在--logfiledir中。 --suexec-userdir=DIR 設定用戶存放網頁的目錄,所有suEXEC包裝都必需在這個目錄內進行,以確定這個程式是用戶親自允許執行的,若你只簡單地鍵入絕對路徑(i.e. 沒有萬用字元「*」),那麼UserDir和允許使用suEXEC的地方就應設定為同一個目錄,若suEXEC的UserDir並不包括用戶存放網頁的目錄,那麼這些網頁就因不乎合密碼檔的記錄而不能使用suEXEC。UserDir的預設值為「public_html」,若你設定Virtual Host時其UserDir在suEXEC目錄之外,那麼你就需要把suEXEC的UserDir設定為這堆目錄的父目錄。若你不正確設定UserDir,所有「~userdir」的CGI請求均會失敗。 --suexec-uidmin=UID 設定使用suEXEC的最大允許用戶ID,預設值為100,一般系統是500或者100。 --suexec-gidmin=GID 設定使用suEXEC的最大允許用戶組ID,預設值為100。 --suexec-safepath=PATH 設定suEXEC的安全目錄,這安全目錄允許執行CGI程式,預設值為「/usr/local/bin:/usr/bin:/bin」。 檢查suEXEC的設定 在編譯及安裝suEXEC包裝程式之前,你可利用--layout選項檢查你目前各設定選項: 輸出例子: suEXEC setup: suexec binary: /usr/local/apache/sbin/suexec document root: /usr/local/apache/share/htdocs userdir suffix: public_html logfile: /usr/local/apache/var/log/suexec_log safe path: /usr/local/bin:/usr/bin:/bin caller ID: www minimum user ID: 100 minimum group ID: 100 編譯及安裝suEXEC包裝程式 若你透過--enable-suexec選項,在Binary版本中決定使用suEXEC的話,按「make」後就會自動把suEXEC嵌入Apache中。 執行「make install」安裝所有Apache元件後,suEXEC會放置在由--sbindir選項決定的目錄中,預設目錄為「/usr/local/apache/sbin/suexec」。請留意,你需要成為超級用戶方可完成安裝過程,為了讓suEXEC有setuid的權力,你必需把suEXEC擁有者轉為「root」及加入setuid權限至suEXEC程式。 啟動及關閉suEXEC 在啟動Apache之前,Apache主程式會尋找「sbin」裡的「suexec」程式檔(預設值為「/usr/local/apache/sbin/suexec」,若Apache能找到正確的suexec檔,Apache將會把suEXEC啟動記錄寫入錯誤日誌中: [notice] suEXEC mechanism enabled (wrapper: /path/to/suexec) 若在Apache啟動後在錯誤日誌中找不到以上訊息,即代表Apache伺服器找不到包裝程式,又或者該包裝程式檔沒有setuid權限。 你不可以中途加入suEXEC至運行中的Apache,你必先關閉並重新啟動Apache伺服器,純粹使用「HUP」或「USR1」是沒效的;若你想關掉suEXEC,你亦需同樣把Apache伺服器關閉並重開,但在重開之前你需移除suexec程式檔 使用suEXEC 虛擬主機: 透過User和Group可讓虛擬主機自設suEXEC的用戶及用戶組,設定後所有CGI請求都會依照User和Group的設定值來執行,若在宣告虛擬主機時沒有設定User和Group,Apache會使用主服器的用戶及用戶組 使用者目錄: suEXEC包裝程式亦會接受以個別設定的用戶權限來執行CGI程式,只要把「~」加在用戶ID之前把主伺服器目錄導向至用戶之網頁目錄即可,所有乎合suEXEC安全模型的CGI程式及請求都可用這個方法以特定用戶執行CGI程式。 suEXEC除錯 所有suEXEC的執行過程都會寫入日誌檔案,日誌檔案名稱可於--suexec-logfile選項中設定,若你已確定自己設置無誤,但仍有不明的suEXEC錯誤的話,可參看suEXEC的error_log。 suEXEC注意事項 目錄階層限制 在系統安全及效率的大前提下,所有在虛擬主機的網頁及個別用戶的suEXEC請求都必需在根目錄裏執行,例如你設定了四個虛擬主機,你必需把這些虛擬主機的根目錄歸納在一個Apache主文件目錄中,以乎合suEXEC需要在特定安全目錄下執行這個條件。 執行環境中的suEXEC路徑 更改suEXEC執行目錄有可能產生系統保安漏洞,請確定suEXEC的執行目錄為可信任的目錄,讓不可靠的目錄設定為suEXEC的執行目錄有可能被任何人以木馬程式攻擊電腦系統。 更改suEXEC的程式碼 若你不清楚suEXEC程式碼的意義就自行更改其內容,可引起龐大的程式錯誤,請盡量不要更改suEXEC的程式碼。 |
| ralind 回复于:2003-04-30 12:05:35 |
| ... |
| hew 回复于:2003-04-30 16:27:09 |
| 大家一起找资料去,我也想知道 |
| hwin 回复于:2003-05-01 12:59:03 |
| 如果php_admin_value能支持apache的 这样的语句就好了
php_admin_value open_basedir /home2/%2+ <VirtualHost 111.111.111.111> ServerAdmin [email protected] ServerName www.vhost-u1.xxxx.com CustomLog /home/logs/vhost-u1-aclearcase/" target="_blank" >ccess_log combined ErrorLog /home/logs/vhost-u1-error_log VirtualDocumentRoot /home/vhosts/%2+/%1 VirtualScriptAlias /home/vhosts/%2+/cgi-bin [b:370e32ad2c]php_admin_value open_basedir /home2/%2+[/b:370e32ad2c] </VirtualHost> |