作者 主題: 有關權限問題  (閱讀 21536 次)

0 會員 與 1 訪客 正在閱讀本文。

satan32

  • 憂鬱的高中生
  • ***
  • 文章數: 110
    • 檢視個人資料
有關權限問題
« 於: 2008-07-16 18:41 »
請問,

我製作了一個網站
他有個後台會做一些上稿動作
並且更新某些頁面
但我又需要限定權限
目前整個目錄我都是開777
但我想要針對 除了upload的以外
其他都開成類似775或是755權限 (目前使用者:群組 是 root:wheel)
請問有什麼辦法做到
讓她除了後檯上稿動作可以更新頁面
又可以鎖定權限??

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 有關權限問題
« 回覆 #1 於: 2008-07-16 18:58 »
老實說...看不懂你的問題在哪裡  ::)


上稿?? 上傳檔案嗎?

如果是用 php 要上傳檔案, 跟你說的權限沒啥關係啊..

只要上傳後能寫入硬碟就好.



還是 ftp 上傳, 那跟 php 無關嚕~~

satan32

  • 憂鬱的高中生
  • ***
  • 文章數: 110
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #2 於: 2008-07-16 19:05 »
老實說...看不懂你的問題在哪裡  ::)


上稿?? 上傳檔案嗎?

如果是用 php 要上傳檔案, 跟你說的權限沒啥關係啊..

只要上傳後能寫入硬碟就好.



還是 ftp 上傳, 那跟 php 無關嚕~~


....
是這樣的
主要的頁面 都是生成html
靜態的頁面 不是動態 竟量避免sql loading
所以 製作一個後台去做發布消息上稿的動作
送出後 程式會去執行生成這些html 例如index等頁面
那勢必會更新到那些頁面
 php後台登入後上稿 送出執行都適用www身分去做
但是我們又必須鎖定檔案的權限 (避免遭到入侵)

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4047
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: 有關權限問題
« 回覆 #3 於: 2008-07-16 20:42 »
把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #4 於: 2008-07-17 09:27 »
把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。
說到這個...當檔案在網站目錄之外,
php 可以 include 嗎?apache 可以讀的到嗎?要怎麼做啊...
--
這個部份因為長期在虛擬主機上做事,虛擬主機很多東西都不能改
所以想知道(把檔案上傳到網站目錄之外)這部份要怎麼做...不然給個 key word 吧 ;D

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4047
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: 有關權限問題
« 回覆 #5 於: 2008-07-17 09:41 »
說到這個...當檔案在網站目錄之外,
php 可以 include 嗎?apache 可以讀的到嗎?要怎麼做啊...
--
這個部份因為長期在虛擬主機上做事,虛擬主機很多東西都不能改
所以想知道(把檔案上傳到網站目錄之外)這部份要怎麼做...不然給個 key word 吧 ;D

上傳到其他目錄應該不是大問題
move_uploaded_file(), exec()+mv .... 都可以達到目的,只要目錄權限可以讓 www 讀取、寫入

問題是怎麼讀取?
include() 很簡單,因為 include 可以指定「絕對路徑」,

代碼: [選擇]
<?php
include( &#39;a.php&#39; ); // 相對路徑
include( &#39;../bbb/a.php&#39; ); // 相對路徑
include( &#39;/var/www/aaa/a.php&#39; ); // 絕對路徑
?>

問題是如果需要「直接」讀取時,該怎麼辦?
所以必須寫一隻程式來「控制讀取」,
大概就長得像這樣子:

代碼: [選擇]
<?php
        $fd 
fopen( &#39;c:/eis_file/document_&#39;.$sid, "rb");

        
header("Content-Type: ".$type );
        
header("Content-Length: ".$size );
        if ( 
$mode == &#39;download&#39; ) header(&#39;Content-Disposition: attachment; filename="&#39;.$name.&#39;"&#39;);

        
sleep(1);

        
ob_flush();
        
flush();

        while(!
feof($fd)) {

           
$buffer fread($fd4096);
           print 
$buffer;
        }

        
fclose ($fd);
?>


我有很多系統都使用這套概念,
起因是因為我需要控制讀取,可是資料庫「塞」不進去 (有興趣可以爬爬文)

這段 code 是從 www.php.net 抄來的,他的重點是

代碼: [選擇]
       sleep(1);
        ob_flush();
        flush();

這三行,如果你嚐試過你就會知道我想說什麼了
« 上次編輯: 2008-07-17 09:44 由 hoyo »
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 有關權限問題
« 回覆 #6 於: 2008-07-17 09:54 »
如果我沒會錯意的話, 樓主的目的是要在產生出 html 檔之後

鎖住這些 html 檔的權限, 避免被入侵修改這些檔案內容

如果其他目錄 www 身分也都能讀寫的話, 那似乎就無效了...


建議樓主先將你的網站環境說明一下

例如:

是用虛擬主機, 還是獨立主機, 作業系統又是何種,

你能控制的權限又能到何程度??

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4047
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: 有關權限問題
« 回覆 #7 於: 2008-07-17 09:57 »
其實我根本不在意「被入侵修改」的問題,
因為入侵後絕對不是拿到 www 的權限 (誰不是以 root 為目標?)
所以這個需求基本上「我覺得」很無趣...
有了 root 權限,有什麼不能改的?
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #8 於: 2008-07-17 10:51 »
代碼: [選擇]
<?php
 header
(&#39;Content-Disposition: attachment; filename="&#39;.$name.&#39;"&#39;);
?>


不過如果是樓主的 html 要能夠被瀏覽的話 header 要改一下
--
其實我的想法大概也是這樣,不過還沒實做...
有人做完分享真不錯 ;D謝啦!
不過這部份主要是不要讓別人直接看到你的 php ,或是檔案 跟入侵 比較沒關係...
就像 hoyo 說的...都被入侵了...要的當然是 root啊

satan32

  • 憂鬱的高中生
  • ***
  • 文章數: 110
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #9 於: 2008-07-17 11:58 »
把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。

痾...
我問的根檔案上傳沒有關係..

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
回覆: 有關權限問題
« 回覆 #10 於: 2008-07-17 12:13 »
可是我看到很多被攻破的原因都是
目錄權限開成777
攻擊手法不外乎
有些人寫的程式允許上傳檔案(翩翩就是沒對php作過濾,或者是把html的檔案也設為php去處理)
攻擊者接著就把檔案上傳上去(故意上傳一個php)
遠端直接執行這個php,利用這個php就可以做出一個簡單的shell (包含執行,檔案的複製存取)
然後再來慢慢的翻整個檔案目錄,找出mysql的密碼
接著就不用說了,看是要mysql清光光還是值入一個程式作廣告信的大跳板嘍,反正目錄都可以存取,有啥作不到的呢?


我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4047
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: 有關權限問題
« 回覆 #11 於: 2008-07-17 12:27 »
可是我看到很多被攻破的原因都是
目錄權限開成777
攻擊手法不外乎
有些人寫的程式允許上傳檔案(翩翩就是沒對php作過濾,或者是把html的檔案也設為php去處理)
攻擊者接著就把檔案上傳上去(故意上傳一個php)
遠端直接執行這個php,利用這個php就可以做出一個簡單的shell (包含執行,檔案的複製存取)
然後再來慢慢的翻整個檔案目錄,找出mysql的密碼
接著就不用說了,看是要mysql清光光還是值入一個程式作廣告信的大跳板嘍,反正目錄都可以存取,有啥作不到的呢?


只對「可以直接使用 Apache 讀取檔案」才有用吧
把檔案放在網站根目錄之外就沒用了,對吧?
« 上次編輯: 2008-07-17 12:32 由 hoyo »
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 有關權限問題
« 回覆 #12 於: 2008-07-17 13:20 »
所以我建議樓主說明清楚 web 系統環境

這樣討論才有用啊~~

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4047
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: 有關權限問題
« 回覆 #13 於: 2008-07-17 13:26 »
把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。

痾...
我問的根檔案上傳沒有關係..

沒關係沒有關係 @@

你問你的,我們討論我們的   ;D
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
回覆: 有關權限問題
« 回覆 #14 於: 2008-07-17 15:54 »
沒關係沒有關係 @@

你問你的,我們討論我們的   ;D

怎麼有離題還可以離的這麼認真的..T_T...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
回覆: 有關權限問題
« 回覆 #15 於: 2008-07-18 09:34 »
只對「可以直接使用 Apache 讀取檔案」才有用吧
把檔案放在網站根目錄之外就沒用了,對吧?
是沒錯...
可是看過不少會把整個目錄都設為777為了方便上傳圖片
後台直接上傳檔案或是html
上傳的檔案apache就可以直接存取
這是我看過某個知名親子網站的RD弄出來的(看的快吐血了)
這還不打緊他還乾脆把web目錄的owner直接改成apache
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

satan32

  • 憂鬱的高中生
  • ***
  • 文章數: 110
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #16 於: 2008-07-18 14:39 »
把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。

痾...
我問的根檔案上傳沒有關係..

痾...
那當我沒問 你們討論你們的吧  ::)

沒關係沒有關係 @@

你問你的,我們討論我們的   ;D

廉價勞工

  • 活潑的大學生
  • ***
  • 文章數: 213
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #17 於: 2008-07-18 15:28 »
我會的比較少
只想到用

1,ACL
2,sudo

不知道可不可行...
錢少、事多、離家遠…
位低、權輕、責任重…

appleboy

  • 活潑的大學生
  • ***
  • 文章數: 224
    • 檢視個人資料
    • 小惡魔筆記
回覆: 有關權限問題
« 回覆 #18 於: 2008-07-28 14:15 »

[恕刪]

代碼: [選擇]
<?php
        $fd 
fopen( &#39;c:/eis_file/document_&#39;.$sid, "rb");

        
header("Content-Type: ".$type );
        
header("Content-Length: ".$size );
        if ( 
$mode == &#39;download&#39; ) header(&#39;Content-Disposition: attachment; filename="&#39;.$name.&#39;"&#39;);

        
sleep(1);

        
ob_flush();
        
flush();

        while(!
feof($fd)) {

           
$buffer fread($fd4096);
           print 
$buffer;
        }

        
fclose ($fd);
?>


我有很多系統都使用這套概念,
起因是因為我需要控制讀取,可是資料庫「塞」不進去 (有興趣可以爬爬文)

這段 code 是從 www.php.net 抄來的,他的重點是

代碼: [選擇]
       sleep(1);
        ob_flush();
        flush();

這三行,如果你嚐試過你就會知道我想說什麼了

我問一下這個,我去執行一下,好像沒有特殊效果
代碼: [選擇]
        sleep(1);

        ob_flush();
        flush();
這邊在這隻程式裡面是做什麼用的?

緩衝輸出?

我底下有實際跑一個例子:
代碼: [選擇]
<?php

ob_flush
();
echo 
"這是第一行<br />";
flush();
sleep(2);

for (
$i=10$i>0$i--)
{
    echo 
$i "<br />";
    
ob_flush();
    
flush();
    
sleep(1);
}
ob_end_flush();
?>

因為我測試妳那段 code,拿掉那一段跟沒拿掉效果一樣?

http://blog.wu-boy.com/2008/07/28/303/

歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #19 於: 2008-07-29 09:36 »
如果一般情況
代碼: [選擇]
<?php
sleep
(5); #睡久一點
phpinfo();
?>

會停 5 秒 才會跑出資料
代碼: [選擇]
<?php
ob_start
();
phpinfo();
 
ob_flush();
sleep(5); #睡久一點
echo &#39; weak up&#39;;

?>

這不一樣會些吐等 5 秒再 echo

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
回覆: 有關權限問題
« 回覆 #20 於: 2008-07-29 11:46 »
引用
ob_flush();
flush();
用途主要是清空輸出緩衝區
主要的原因如下
HTTP 1.0的協定中,文件的本文輸出之前
web server可以在header中預先指定文件的長度
讓瀏覽器可以預先知道整個文件的長度,顯示下載的進度
但是php的內容是根據程式執行的結果去作輸出(簡單的說就是你無法預知程式會輸出多少byte的資料)
所以php採用了輸出緩衝的機制
將輸出的資料預先丟到緩衝區(這樣php只要統計緩衝區裡的資料長度,再一次吐出)
這樣就可以在瀏覽器取得完整文件之前預先知道文件的長度了
可是遇到大檔案時,這就是個討厭的東西
想想每個檔案都得先丟到緩衝區,統計好長度然後再輸出,這是很沒效率的
要是檔案長度超過緩衝區的上限時
還得將檔案切成好幾部份輸出,這就得動用HTTP 1.1的multi part協定,相容性會有問題(squid對HTTP 1.1支援還在實驗階段)
所以嘍
為了一勞永逸
乾脆把輸出緩衝關閉比較省事些,缺點就是你沒辦法得知檔案的下載進度了。
原本的
引用
ob_flush();
flush();
只是將輸出緩衝區清空(作用是不啟用輸出長度的計數)
資料還是會先丟到緩衝區再輸出
比較乾脆的作法還是
直接呼叫 ob_end_flush()
將緩衝區關閉,資料就直接丟給web server作輸出

我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

appleboy

  • 活潑的大學生
  • ***
  • 文章數: 224
    • 檢視個人資料
    • 小惡魔筆記
回覆: 有關權限問題
« 回覆 #21 於: 2008-07-29 21:03 »
不錯 感謝 ricky 大大的解釋

又上了一課~

可否讓我轉貼到我的blog?

http://blog.wu-boy.com/2008/07/28/303/

這一篇

歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #22 於: 2008-07-29 22:09 »
哈哈,對不起,插花一下:

這個討論串好像有一點像我之前發問的東東,

ricky大知道是什麼原因嗎? (到現在我還是沒解決)

http://phorum.study-area.org/index.php/topic,50323.0.html

appleboy

  • 活潑的大學生
  • ***
  • 文章數: 224
    • 檢視個人資料
    • 小惡魔筆記
回覆: 有關權限問題
« 回覆 #23 於: 2008-07-29 22:30 »
哈哈,對不起,插花一下:

這個討論串好像有一點像我之前發問的東東,

ricky大知道是什麼原因嗎? (到現在我還是沒解決)

http://phorum.study-area.org/index.php/topic,50323.0.html

你的這個問題超怪,其實我也不確定為啥 client 端 CPU 會飆高?

換瀏覽器測看看?

歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #24 於: 2008-07-29 22:53 »
哈哈,對不起,插花一下:

這個討論串好像有一點像我之前發問的東東,

ricky大知道是什麼原因嗎? (到現在我還是沒解決)

http://phorum.study-area.org/index.php/topic,50323.0.html

你的這個問題超怪,其實我也不確定為啥 client 端 CPU 會飆高?

換瀏覽器測看看?

"印象中"好像FF2和IE都是一樣,不過新的FF3沒試過,有空再試一下...

感覺好像client一直在接收卻沒有釋放,導致最後crash,如果是這樣,
用這些緩衝的函式可能不適合拿來跑長途車了,不過不過...以上純猜測,
應該沒我想的那麼單純,希望有高人能指導一下了 :P

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
回覆: 有關權限問題
« 回覆 #25 於: 2008-07-30 09:18 »
原因在於
Javascript只有單執行緒
簡單的說他在執行的時候網頁其他元件也都不能動作了
引用
echo "<script>document.getElementById('test').innerHTML='".$i."';</script>";
這一行又一直將資料用javascript寫入
等於是讓javascript跑一個無窮迴圈
當然慢嘍
建議你,可以直接將結果輸出到網頁
別用javascript去填值
原本的程式可以改成這樣,比較有效率一些
引用
<?
$mtime=100000;
//關閉緩衝區,將資料直接輸出
ob_end_flush();
while (1)
{
   $i++;
   echo "$i<br>";
   usleep($mtime);
}
?>
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #26 於: 2008-07-30 14:23 »
原因在於
Javascript只有單執行緒
簡單的說他在執行的時候網頁其他元件也都不能動作了
引用
echo "<script>document.getElementById('test').innerHTML='".$i."';</script>";
這一行又一直將資料用javascript寫入
等於是讓javascript跑一個無窮迴圈
當然慢嘍

這麼說起來...
如果我的目的是要把某一個div一直更換內容,
然而又受限於javascript的單執行緒,那麼就無解了是嗎?

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #27 於: 2008-07-30 15:14 »
既然都用到javascript了,不考慮用ajax做?
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
回覆: 有關權限問題
« 回覆 #28 於: 2008-07-30 17:11 »
既然都用到javascript了,不考慮用ajax做?

嗯,怎麼說咧....
ajax是不會有這個問題沒錯,可是ajax從client端到server,再從server回到client,前面那一段是我不要的....(大概就知道我想幹嘛)

潰堤的原因大致找出來了,因為server不斷丟東西過來,我看了一下瀏覽器的html碼,被...塞爆了 :-[
不過也因此見識到FF3的威力,我把mtime值調低到5000,IE是幾乎馬上趴倒,FF3撐了快一小時!!
我可能太天真了啦,看來讓server去搞client不是普通人玩的,至少不是現階段能力低下的我玩得起來的啊~

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4047
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: 有關權限問題
« 回覆 #29 於: 2008-07-30 17:29 »
嗯,怎麼說咧....
ajax是不會有這個問題沒錯,可是ajax從client端到server,再從server回到client,前面那一段是我不要的....(大概就知道我想幹嘛)

潰堤的原因大致找出來了,因為server不斷丟東西過來,我看了一下瀏覽器的html碼,被...塞爆了 :-[
不過也因此見識到FF3的威力,我把mtime值調低到5000,IE是幾乎馬上趴倒,FF3撐了快一小時!!
我可能太天真了啦,看來讓server去搞client不是普通人玩的,至少不是現階段能力低下的我玩得起來的啊~

Server PUSH !?

在 IE 跑過,沒遇到你說的問題

甚至 PUSH 心電圖檔也沒當過,當初 sleep 的時間都很短,因為希望可以即時呈現 (圖控系統測試)
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫