典型共享 Linux Web 主机的权限

典型共享 Linux Web 主机的权限

我正在尝试了解典型共享 Linux Web 托管帐户上的文件权限。我知道如何为文件或目录的 OWNER GROUP 和 PUBLIC 实体设置 rwx 权限。我不太清楚的是,访问权限通常映射到哪里?我猜是:

用户权限会影响什么...嗯...不确定
团体权限会影响服务器上运行的 PHP 或其他脚本的操作
其他(有时称为 PUBLIC 或 WORLD?)权限会影响网站访问者的 UA 可以执行的操作

有人可以纠正、确认或扩展我对此的理解吗?

澄清:

如果我想允许在服务器上运行的 PHP 脚本具有写入文件的权限,该权限是在 USER、GROUP 还是 OTHER 中指定?如果我想拒绝网站访问者的浏览器查看目录的内容,该权限是在目录的 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 或其他脚本的操作

组权限不会影响可以做什么(读取、写入、执行),但会影响谁可以做。对于用户来说也一样:

用户(有时称为公共?)权限会影响网站访问者的 UA 可以执行的操作

用户是所有者,但o用于other,这就是所谓的公开。再说一遍 - 这是谁可以做,而不是可以做什么。

ugo使用时可以使用缩写chmod,这比数字代码更简单:

  chmod ug+w sample1
  chmod go-r sample2 
  chmod g=w  sample3 
  • sample1:给用户和组添加写权限
  • 示例2:删除组和其他人的读取权限
  • sample3:设置组权限为写

每个文件都归一个用户和一个组所有。使用 查看它们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,它既是用户,又是组。但是,mail 和 stuff 是组,与用户不同。

更新(问题更新后):

如果我想允许在服务器上运行的 PHP 脚本具有写入文件的权限,该权限是在 USER、GROUP 还是 OTHER 中指定?如果我想拒绝网站访问者的浏览器查看目录的内容,该权限是在目录的 USER、GROUP 还是 OTHER 中指定?

嗯 - 这不是脚本执行这或那操作的权限。这始终是运行脚本的用户的权限。

要运行脚本,用户必须能够读取它,也就是说,脚本从磁盘读取并放入内存中,然后执行。如果不读取它,就无法执行它。

要写入文件,用户必须具有写入目录的权限 - 而不是脚本或程序。

如果写入目录的程序是服务器,则它通常不是从网络中的匿名用户启动,而是从“www”等特殊用户启动。

答案3

因为您谈到了共享主机,所以我想补充一些关于我经常合作的共享主机提供商的有趣细节。根据我的经验,这样的设置在共享主机环境中并不罕见。

在共享主机环境中,有多个用户与您共享同一台主机的情况并不罕见。当然,他们都有用户帐户。

我的用户帐户可能是123456-user1。现在要做的是,将我的主要组设置为nobodynogroup,以便我生成的所有新文件和文件夹都属于123456-user1:nobody

我认为,出于安全考虑,他们不会将主机上的所有用户放入同一个主要组中。

所以现在我可以读取我的文件,没有组可以读取它(因为,好吧,该组是nobody),Apache 甚至如何读取它?
Apache 通过在您自己的用户帐户下运行实例来读取它。例如,使用 PHP,它将在CGI 模式执行您帐户下的文件。

因此,权限的第一个八位字节与整个系统相关。它定义了您和网站访问者(可以这么说)可以对文件执行的操作。可以忽略组。而其他人的最后一个八位字节在某种程度上相当于所有者部分。

相关内容