典型共享 Linux Web 主機上的權限

典型共享 Linux Web 主機上的權限

我試圖了解典型的共享 Linux 網站託管帳戶的文件權限。我知道如何為文件或目錄的 OWNER GROUP 和 PUBLIC 實體設定 rwx 權限。我不太清楚的是,存取權限通常會對應到哪裡?我猜測:

使用者權限會影響什麼......呃......這裡不確定
團體權限會影響伺服器上執行的 PHP 或其他腳本可以執行的操作
其他(有時稱為 PUBLIC 或 WORLD?)權限會影響網站訪客的 UA 可以執行的操作

有人可以糾正、確認或擴展我對此的理解嗎?

澄清:

如果我想允許在伺服器上執行的 PHP 腳本寫入檔案的權限,該權限是否在 USER、GROUP 或 OTHER 中指定?如果我想拒絕網站訪客的瀏覽器查看目錄的內容,是否會在目錄的使用者、群組或其他中指定該權限?

答案1

讓我們先指定一些關鍵字。

FTPUSER   = you with your ftp client
WWWDAEMON = program (servers) that's responsible for processing your web pages and scripts 
WWWUSER   = user as which the WWWDAEMON processes your pages
BROWSER   = Someone looking at your website with a browser
FILES     = files that reside in your www/ftp site
yourgroup = group that your FTPUSER belongs to and WWWUSER does not

您可以使用 ftp 程式以 FTPUSER 身分存取您的文件

-rwxr-xr-x  2 FTPUSER yourgroup   72 2012-01-18 13:56 somescript.php

現在..因為 WWWDAEMON 使用者 WWWUSER 不是您 (FTPUSER),所以當它嘗試read您的腳本時,它會尊重其他權限。 (有些託管網站以您的 FTPUSER 身分執行您的腳本)。刪除其他讀取和執行權限將阻止使用 somescript.php

# this scipt is unusable trough a browser
-rwxr-x---  2 FTPUSER yourgroup   72 2012-01-18 13:56 somescript.php

建立具有全域可寫入權限的目錄將允許您的腳本在那裡寫入,但除非您以某種方式保護該目錄(例如使用.htaccess 或將其放在www 目錄之外),否則它也可能意味著瀏覽器可以直接存取這些文件,因為:

BROWSER contacts WWWDAEMON which runs as WWWUSER so 
BROWSER can see everything processed by WWWDAEMON that the WWWUSER can. 

已處理也意味著 WWWDAEMON 也尊重 .htaccess 或類似於區塊存取。

建議創建 sayphpwritedir並賦予其 a+rwx 權限。在那裡添加.htaccess文件(如果您的託管服務允許)

deny from all

這樣,您以 WWWUSER 身分執行的腳本仍然可以使用該目錄,但 WWWDAEMON 將阻止任何瀏覽器對其進行存取。

答案2

你把它搞混了。

ugougo 是usergroupother-不是owner。所有者是用戶,通常擁有最多的權利。

GROUP 權限會影響伺服器上執行的 PHP 或其他腳本可以執行的操作

群組權限不影響可以做什麼(讀、寫、執行),而是影響誰可以做。對使用者來說也是一樣:

USER(有時稱為 PUBLIC?)權限會影響網站訪客的 UA 可以執行的操作

用戶是所有者,但o用於other,這就是您所說的公共。再說一次——重要的是誰能做什麼,而不是能做什麼。

ugo使用時可以使用縮寫chmod,這比數字代碼更容易:

  chmod ug+w sample1
  chmod go-r sample2 
  chmod g=w  sample3 
  • 範例1:為使用者和群組新增寫入權限
  • 範例2:刪除群組和其他人的讀取權限
  • 範例3:設定群組權限寫入

每個文件都由一個使用者和一個群組擁有。看到他們與ls -l.例子:

ls -l /var
insgesamt 12
drwxr-xr-x  2 root root   592 2012-01-12 08:02 backups
drwxr-xr-x 28 root root   776 2011-08-18 05:12 cache
drwxrwxrwt  2 root root    48 2010-06-22 01:46 crash
drwxr-xr-x  2 root root  3704 2010-06-05 22:01 games
drwxr-xr-x 84 root root  2296 2011-10-16 13:25 lib
drwxrwsr-x  2 root staff   48 2007-10-08 12:47 local
drwxrwxrwt  3 root root    80 2012-01-19 08:03 lock
drwxr-xr-x 22 root root  5992 2012-01-19 08:01 log
drwxrwsrwt  2 root mail    72 2012-01-18 07:56 mail

/var 清單的一部分。大多數目錄 (d...) 屬於 root.root,它既是一個用戶,也是一個群組。然而,郵件和東西是群組,與使用者並不相同。

更新(問題更新後):

如果我想允許在伺服器上執行的 PHP 腳本寫入檔案的權限,該權限是否在 USER、GROUP 或 OTHER 中指定?如果我想拒絕網站訪客的瀏覽器查看目錄的內容,是否會在目錄的使用者、群組或其他中指定該權限?

好吧 - 這不是腳本的許可來做這件事或那件事。它始終是運行腳本的用戶的權限。

要運行腳本,用戶必須能夠讀取它,這意味著,從磁碟讀取腳本並將其放入記憶體中,然後執行它。如果你不閱讀它,你就無法執行它。

要寫入文件,使用者必須具有寫入目錄的權限 - 而不是腳本或程式。

如果寫入目錄的程式是伺服器,那麼它通常不是從網路中的匿名使用者啟動的,而是從像「www」這樣的特殊使用者啟動的。

答案3

因為您談論的是共享主機,所以讓我添加一些有關我經常使用的共享主機的有趣細節。根據我的經驗,這樣的設定在共享託管環境中並不罕見。

在共享主機環境中,多個使用者與您共享相同主機的情況並不罕見。當然,他們都有用戶帳戶。

我的用戶帳戶可能是123456-user1.現在所做的是,我的主要群組設定為nobodynogroup,以便我產生的所有新檔案和資料夾都屬於123456-user1:nobody

我認為,出於安全考慮,他們不僅僅將主機上的所有用戶放入同一個主要群組中。

所以現在我可以讀取我的文件,沒有群組可以讀取它(因為,好吧,群組是nobody),Apache 是如何讀取它的?
Apache 透過在您自己的使用者帳戶下執行實例來讀取它。例如,對於 PHP,它將運行在電腦影像模式執行您帳戶下的文件。

因此,權限的第一個八位元組與整個系統相關。它定義了您和網站訪客(可以這麼說)可以對檔案執行的操作。該組可以忽略。對於其他人來說,最後一個八位元組在某種程度上相當於所有者部分。

相關內容