酷!學園
2009-07-04 08:50 *
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?

請輸入帳號, 密碼以及預計登入時間
新聞:
強烈建議,新手請先閱讀:致提問者的一些建議再致提問者
 
   首頁 | Study-Area | 鳥園 | 鳥哥的Linux私房菜   說明 搜尋 日曆 登入 註冊  
頁: [1] 2
  列印  
作者 主題: 有關權限問題  (閱讀 5941 次)
0 會員 以及 1 訪客 正在閱讀本篇主題.
satan32
憂鬱的高中生
***
文章: 98


檢視個人資料
« 於: 2008-07-16 18:41 »

請問,

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



檢視個人資料 個人網站
« 回覆文章 #1 於: 2008-07-16 18:58 »

老實說...看不懂你的問題在哪裡  轉眼


上稿?? 上傳檔案嗎?

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

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



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

satan32
憂鬱的高中生
***
文章: 98


檢視個人資料
« 回覆文章 #2 於: 2008-07-16 19:05 »

老實說...看不懂你的問題在哪裡  轉眼


上稿?? 上傳檔案嗎?

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

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



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


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


GM 值勤中...


檢視個人資料 個人網站
« 回覆文章 #3 於: 2008-07-16 20:42 »

把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。
已記錄



線上測驗平台
受人與魚,不如授人與漁
micmic3
俺是博士!
*****
文章: 1183


檢視個人資料
« 回覆文章 #4 於: 2008-07-17 09:27 »

把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。
說到這個...當檔案在網站目錄之外,
php 可以 include 嗎?apache 可以讀的到嗎?要怎麼做啊...
--
這個部份因為長期在虛擬主機上做事,虛擬主機很多東西都不能改
所以想知道(把檔案上傳到網站目錄之外)這部份要怎麼做...不然給個 key word 吧 奸笑
已記錄
hoyo
榮譽博士
俺是博士!
*****
文章: 3372


GM 值勤中...


檢視個人資料 個人網站
« 回覆文章 #5 於: 2008-07-17 09:41 »

說到這個...當檔案在網站目錄之外,
php 可以 include 嗎?apache 可以讀的到嗎?要怎麼做啊...
--
這個部份因為長期在虛擬主機上做事,虛擬主機很多東西都不能改
所以想知道(把檔案上傳到網站目錄之外)這部份要怎麼做...不然給個 key word 吧 奸笑

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

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

程式碼:
<?php
include( 'a.php' ); // 相對路徑
include( '../bbb/a.php' ); // 相對路徑
include( '/var/www/aaa/a.php' ); // 絕對路徑
?>

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

程式碼:
<?php
        $fd
= fopen( 'c:/eis_file/document_'.$sid, "rb");

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

        
sleep(1);

        
ob_flush();
        
flush();

        while(!
feof($fd)) {

           
$buffer = fread($fd, 4096);
           print
$buffer;
        }

        
fclose ($fd);
?>


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

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

程式碼:
       sleep(1);
        ob_flush();
        flush();

這三行,如果你嚐試過你就會知道我想說什麼了
« 最後編輯時間: 2008-07-17 09:44 由 hoyo » 已記錄



線上測驗平台
受人與魚,不如授人與漁
yamaka
俺是博士!
*****
文章: 3160



檢視個人資料 個人網站
« 回覆文章 #6 於: 2008-07-17 09:54 »

如果我沒會錯意的話, 樓主的目的是要在產生出 html 檔之後

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

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


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

例如:

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

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

hoyo
榮譽博士
俺是博士!
*****
文章: 3372


GM 值勤中...


檢視個人資料 個人網站
« 回覆文章 #7 於: 2008-07-17 09:57 »

其實我根本不在意「被入侵修改」的問題,
因為入侵後絕對不是拿到 www 的權限 (誰不是以 root 為目標?)
所以這個需求基本上「我覺得」很無趣...
有了 root 權限,有什麼不能改的?
已記錄



線上測驗平台
受人與魚,不如授人與漁
micmic3
俺是博士!
*****
文章: 1183


檢視個人資料
« 回覆文章 #8 於: 2008-07-17 10:51 »

程式碼:
<?php
 header
('Content-Disposition: attachment; filename="'.$name.'"');
?>


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


檢視個人資料
« 回覆文章 #9 於: 2008-07-17 11:58 »

把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。

痾...
我問的根檔案上傳沒有關係..
已記錄
ricky
區域板主
鑽研的研究生
*****
文章: 520



檢視個人資料 個人網站
« 回覆文章 #10 於: 2008-07-17 12:13 »

可是我看到很多被攻破的原因都是
目錄權限開成777
攻擊手法不外乎
有些人寫的程式允許上傳檔案(翩翩就是沒對php作過濾,或者是把html的檔案也設為php去處理)
攻擊者接著就把檔案上傳上去(故意上傳一個php)
遠端直接執行這個php,利用這個php就可以做出一個簡單的shell (包含執行,檔案的複製存取)
然後再來慢慢的翻整個檔案目錄,找出mysql的密碼
接著就不用說了,看是要mysql清光光還是值入一個程式作廣告信的大跳板嘍,反正目錄都可以存取,有啥作不到的呢?


已記錄
hoyo
榮譽博士
俺是博士!
*****
文章: 3372


GM 值勤中...


檢視個人資料 個人網站
« 回覆文章 #11 於: 2008-07-17 12:27 »

可是我看到很多被攻破的原因都是
目錄權限開成777
攻擊手法不外乎
有些人寫的程式允許上傳檔案(翩翩就是沒對php作過濾,或者是把html的檔案也設為php去處理)
攻擊者接著就把檔案上傳上去(故意上傳一個php)
遠端直接執行這個php,利用這個php就可以做出一個簡單的shell (包含執行,檔案的複製存取)
然後再來慢慢的翻整個檔案目錄,找出mysql的密碼
接著就不用說了,看是要mysql清光光還是值入一個程式作廣告信的大跳板嘍,反正目錄都可以存取,有啥作不到的呢?


只對「可以直接使用 Apache 讀取檔案」才有用吧
把檔案放在網站根目錄之外就沒用了,對吧?
« 最後編輯時間: 2008-07-17 12:32 由 hoyo » 已記錄



線上測驗平台
受人與魚,不如授人與漁
yamaka
俺是博士!
*****
文章: 3160



檢視個人資料 個人網站
« 回覆文章 #12 於: 2008-07-17 13:20 »

所以我建議樓主說明清楚 web 系統環境

這樣討論才有用啊~~
已記錄

hoyo
榮譽博士
俺是博士!
*****
文章: 3372


GM 值勤中...


檢視個人資料 個人網站
« 回覆文章 #13 於: 2008-07-17 13:26 »

把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。

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

沒關係沒有關係 @@

你問你的,我們討論我們的   奸笑
已記錄



線上測驗平台
受人與魚,不如授人與漁
Darkhero
酷!學園 學長們
俺是博士!
*****
會員性別: 男
文章: 3256


我家小貓~


檢視個人資料 個人網站
« 回覆文章 #14 於: 2008-07-17 15:54 »

沒關係沒有關係 @@

你問你的,我們討論我們的   奸笑

怎麼有離題還可以離的這麼認真的..T_T...
已記錄

希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
ricky
區域板主
鑽研的研究生
*****
文章: 520



檢視個人資料 個人網站
« 回覆文章 #15 於: 2008-07-18 09:34 »

只對「可以直接使用 Apache 讀取檔案」才有用吧
把檔案放在網站根目錄之外就沒用了,對吧?
是沒錯...
可是看過不少會把整個目錄都設為777為了方便上傳圖片
後台直接上傳檔案或是html
上傳的檔案apache就可以直接存取
這是我看過某個知名親子網站的RD弄出來的(看的快吐血了)
這還不打緊他還乾脆把web目錄的owner直接改成apache
已記錄
satan32
憂鬱的高中生
***
文章: 98


檢視個人資料
« 回覆文章 #16 於: 2008-07-18 14:39 »

把檔案上傳到網站目錄之外,
這樣就可以維持你所謂的安全 755 權限,
又可以避免被直接讀取檔案。

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

痾...
那當我沒問 你們討論你們的吧  轉眼

沒關係沒有關係 @@

你問你的,我們討論我們的   奸笑
已記錄
廉價勞工
憂鬱的高中生
***
文章: 192


檢視個人資料
« 回覆文章 #17 於: 2008-07-18 15:28 »

我會的比較少
只想到用

1,ACL
2,sudo

不知道可不可行...
已記錄

錢少、事多、離家遠…
位低、權輕、責任重…
appleboy
憂鬱的高中生
***
文章: 187



檢視個人資料 個人網站
« 回覆文章 #18 於: 2008-07-28 14:15 »


[恕刪]

程式碼:
<?php
        $fd
= fopen( 'c:/eis_file/document_'.$sid, "rb");

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

        
sleep(1);

        
ob_flush();
        
flush();

        while(!
feof($fd)) {

           
$buffer = fread($fd, 4096);
           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
俺是博士!
*****
文章: 1183


檢視個人資料
« 回覆文章 #19 於: 2008-07-29 09:36 »

如果一般情況
程式碼:
<?php
sleep
(5); #睡久一點
phpinfo();
?>

會停 5 秒 才會跑出資料
程式碼:
<?php
ob_start
();
phpinfo();
 
ob_flush();
sleep(5); #睡久一點
echo ' weak up';

?>

這不一樣會些吐等 5 秒再 echo
已記錄
ricky
區域板主
鑽研的研究生
*****
文章: 520



檢視個人資料 個人網站
« 回覆文章 #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作輸出

已記錄
appleboy
憂鬱的高中生
***
文章: 187



檢視個人資料 個人網站
« 回覆文章 #21 於: 2008-07-29 21:03 »

不錯 感謝 ricky 大大的解釋

又上了一課~

可否讓我轉貼到我的blog?

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

這一篇
已記錄


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


檢視個人資料
« 回覆文章 #22 於: 2008-07-29 22:09 »

哈哈,對不起,插花一下:

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

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

http://phorum.study-area.org/index.php/topic,50323.0.html
已記錄
appleboy
憂鬱的高中生
***
文章: 187



檢視個人資料 個人網站
« 回覆文章 #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
活潑的大學生
***
文章: 265


檢視個人資料
« 回覆文章 #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,如果是這樣,
用這些緩衝的函式可能不適合拿來跑長途車了,不過不過...以上純猜測,
應該沒我想的那麼單純,希望有高人能指導一下了 伸舌頭
已記錄
ricky
區域板主
鑽研的研究生
*****
文章: 520



檢視個人資料 個人網站
« 回覆文章 #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);
}
?>
已記錄
joeyhsy
活潑的大學生
***
文章: 265


檢視個人資料
« 回覆文章 #26 於: 2008-07-30 14:23 »

原因在於
Javascript只有單執行緒
簡單的說他在執行的時候網頁其他元件也都不能動作了
引用
echo "<script>document.getElementById('test').innerHTML='".$i."';</script>";
這一行又一直將資料用javascript寫入
等於是讓javascript跑一個無窮迴圈
當然慢嘍

這麼說起來...
如果我的目的是要把某一個div一直更換內容,
然而又受限於javascript的單執行緒,那麼就無解了是嗎?
已記錄
fillano
活潑的大學生
***
文章: 299


檢視個人資料
« 回覆文章 #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
活潑的大學生
***
文章: 265


檢視個人資料
« 回覆文章 #28 於: 2008-07-30 17:11 »

既然都用到javascript了,不考慮用ajax做?

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

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


GM 值勤中...


檢視個人資料 個人網站
« 回覆文章 #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 的時間都很短,因為希望可以即時呈現 (圖控系統測試)
已記錄



線上測驗平台
受人與魚,不如授人與漁
頁: [1] 2
  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.9 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
本頁花了 0.117 秒,以及 17 次的資料庫查詢。