
我試圖了解典型的共享 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
你把它搞混了。
ugo
ugo 是user
,group
但other
-不是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
.現在所做的是,我的主要群組設定為nobody
或nogroup
,以便我產生的所有新檔案和資料夾都屬於123456-user1:nobody
。
我認為,出於安全考慮,他們不僅僅將主機上的所有用戶放入同一個主要群組中。
所以現在我可以讀取我的文件,沒有群組可以讀取它(因為,好吧,群組是nobody
),Apache 是如何讀取它的?
Apache 透過在您自己的使用者帳戶下執行實例來讀取它。例如,對於 PHP,它將運行在電腦影像模式執行您帳戶下的文件。
因此,權限的第一個八位元組與整個系統相關。它定義了您和網站訪客(可以這麼說)可以對檔案執行的操作。該組可以忽略。對於其他人來說,最後一個八位元組在某種程度上相當於所有者部分。