2010-06-14 80 views
1

我有一個SMB安裝目錄: /卷/ myshare的雪豹安裝目錄更改權限零星

這是通過查找安裝 「連接到服務器...」 與SMB:// myservername/myshare的

迄今爲止一切都很好。

但是,當我嘗試通過PHP訪問目錄(在Apache下運行)時,它會失敗,並且約有10%的時間被拒絕。我的意思是,重複訪問我的頁面有時會導致失敗。我的PHP頁面看起來像:

 

<?php 
    $cmd = "ls -la /Volumes/ 2>&1"; 
    exec($cmd, $execOut, $exitCode); 
    echo "<PRE>EXIT CODE = $exitCode<BR/>"; 
    foreach($execOut as $line) { 
    echo "$line <BR/>"; 
    } 
    echo "</PRE>"; 
?> 
 

當它成功,它看起來像:

 

EXIT CODE = 0 
total 40 
[email protected] 4 root admin 136 Jun 14 12:34 . 
drwxrwxr-t 30 root admin 1088 Jun 4 13:09 .. 
drwx------ 1 galen staff 16384 Jun 14 09:28 myshare 
lrwxr-xr-x 1 root admin  1 Jun 11 16:05 galenhd ->/
 

當它失敗時,它看起來像:


EXIT CODE = 1 
ls: myshare: Permission denied 
total 8 
[email protected] 4 root admin 136 Jun 14 12:34 . 
drwxrwxr-t 30 root admin 1088 Jun 4 13:09 .. 
lrwxr-xr-x 1 root admin  1 Jun 11 16:05 galenhd ->/
 

其它信息:

我與PHP(5.3.1)一起工作,以及與Snow Leopard一起發佈的Apache服務器。另外,如果我編寫一個循環並重試命令行中的「ls -la ..」的PHP腳本,它似乎並不會失敗。

代碼和/或文件系統在成功和失敗之間沒有任何變化,所以這似乎是一個真正的間歇性故障。

這讓我瘋狂。任何人都知道可能會發生什麼?

感謝, 蓋倫

回答

0

您能查看該SMB服務器的日誌?它看起來像一個SMB錯誤,不是你的。

1

我的感覺是,它可能與SMB服務器無關,因爲我無法在從命令行手動運行時進行復制。換句話說,它似乎只在通過網頁運行時失敗(即當打到apache頁面時)。

因此,它看起來對我來說,這是有點「不準」的Apache或「在Apache PHP」蟲......

現在我看到的頁面被陷在狀態。換句話說,它在第一次失敗後會一直失敗。我還發現了一系列的措施來重現,並走出拒絕「權限」狀態:直到它失敗(它會留下「失敗」失敗後)

1)多次襲擊了PHP頁面

2)一旦失敗,在命令行上執行ls /Volumes將失敗。

3)做一個sudo ls /Volumes確實有效(即root可以看到目錄)。嘗試ls爲普通用戶仍然失敗,但...

4)然而(這是做在實際維修安裝一個sudo ls -l /Volumes有趣的部分)。換句話說,在這個命令之後,PHP和命令行都像普通用戶一樣再次開始工作。

結論?

因此,它似乎通過PHP/apache訪問掛載點(請參閱上面的代碼)會中斷掛載,更改將用戶鎖定的權限。 然後root可以通過發佈sudo ls -l /Volumes來恢復權限!

這裏發生了什麼事情。這是非常基本的代碼。當然有人見過這個...



也許這是有關? https://superuser.com/questions/100746/osx-10-6-give-apache2-readwrite-access-to-mounted-windows-share/152473#152473


更新:2010-06-15:更新我的機器到10.6.4,聲稱與SMB幫助安裝的問題。但是,這並沒有解決我所看到的問題。看起來越來越像一個Apache問題...


更新:2010-06-16: 如果代碼被更改爲:
$cmd = "ls -a /Volumes/ 2>&1";
(刪除-l選項),它不失敗。換句話說, 「-l」 標誌導致發生故障...


UPDATE2:2010-06-16:(?在Mac) 因爲它看起來像一個Apache的問題,我已發佈到Apache論壇: http://forums.digitalpoint.com/showthread.php?t=1839935

0

我同意我的IT人員,我幾乎肯定這不是SMB問題。我知道這是因爲當我運行tcpdump時,在故障期間沒有網絡通信。換句話說,發生了什麼事情是:

1)Apache以不良的方式更改文件系統的權限(即更改mount dir的權限)。

2)即使在訪問SMB之前,將來在OS /文件系統級別嘗試訪問安裝失敗。

3)通過sudo ls -la /Volumes技巧可以恢復文件系統權限。

-1

也許不是答案,而是更多的數據。在研究類似問題時,我到達了這個頁面。當我以用戶身份登錄時,我的Mac會運行Automator腳本以在/捲上安裝NAS卷(FileShare)。我試圖將FileShare符號鏈接到/ Library/WebServer/Documents中,並且在啓用後,由於權限(403錯誤),WebSharing無法瀏覽它。權限看起來很好(755)。

做了一些研究,發現httpd進程是以_www用戶(ps -ef從終端)運行的。嘗試將我的符號鏈接導演視爲_www(sudo -i -u_www ls FileShare),表明_www用戶收到了權限被拒絕。我不想修復權限(似乎沒有任何工作),而是去了/ etc/apache2並修改了httpd.conf,讓httpd服務器以用戶(員工)的身份運行,而不是_www(_www)(Under用戶/組設置)。

停止並重新啓動Web服務器使其現在以用戶身份運行而不是_www - 現在可以導航到符號鏈接的目錄...