/ var / www中的Linux权限:我可以使用哪些设置来实现良好的安全性并保持可访问性?

我主要是试图在/ var / www中设置权限。 我们正在使用一个项目格式,每个项目的共同结构如下:

  • / VAR
    • /万维网
      • /运行
        • /共享
        • /project.com
          • /应用
          • /静态的
          • /服务
          • /支持
        • /site.com
          • /应用
          • /静态的
          • /服务
          • /支持

目前:

  • Web服务器(nginx)是所有目录的主要所有者
  • /共享目录本质上包含任何应用程序可能使用的库/库代码。
  • /应用程序由任何项目目录(e,g site.com)的根目录中的文件启动。
  • / static有子目录,通常是/ img,/ css,/ js,/ feed。 这些可能不会执行。
  • /服务包含直接运行的Web /系统服务(子域绕过根文件)
  • / support包含仅由应用程序加载的文件,但不应被提供。 (类,模板等)

我能够得到这个工作的公平,但我相当肯定我做得不好。 太多的755s; 而且我对谷歌的深层次理解也很差。

在开发服务器上,批量意味着由nginx:dev拥有,其中nginx也在开发中。 在分期上这是nginx:pipe理,在产品上是nginx:appupdater

我今天的主要目标是,我希望开发组能够创build和编辑项目目录(project.com,site.com,…)中的任何文件,而仅限于/ shared目录手动更新很less。

首先,我想要设置权限,以便新文件将由nginx拥有:开发人员和开发人员可以在开发服务器上自由上载和更改它们。 我试图尽可能获得denyomg访问权限,同时允许运行的应用程序(如nginx)从支持和应用程序目录加载文件。 唯一的例外是需要写/静态/上传和文件夹在/支持/生成

我怎样才能保证这种权限,以便我们仍然可以运行应用程序,允许开发人员访问和创build文件,而不必重写所有者:组,而且如果用户上传可执行文件,通常不会自己匆匆而过?

(除了应用程序/服务器检查我)

很久以前,我总结说,在一组用户中共享Web项目的最佳方式是强制他们使用sudossh作为所有项目文件使用的单个开发人员来login。 如果您需要跟踪个人开发人员的变化,最好让他们在自己的环境中工作,然后上述内容将适用于发布工程而不是开发人员。

使用sudo您可以授予用户访问系统组的权限,然后将用户添加到组中。 使用ssh您需要将用户的SSH密钥直接添加到dev用户的.ssh/authorized_keys

在此之前,我尝试了许多使用权限和posix草案ACL的技术,但事实certificate,这些技术毫无用处。 特别是在文件上设置执行位是为所有者保留的,这就是为什么我更喜欢所有用户在做任何修改之前切换到所有者UID的原因。

他们也有他们正在工作的项目和主目录的概念,所以维护共享资源要容易得多。

然后,应用程序可以在不同的用户(可能在同一个组)中运行,除了您提到的目录外,它只能读取数据。 在一个或多或less的单一用户环境中,你不需要一点点粘性。 它旨在保护来自非所有者的tmp目录中的文件。

一个理论上的解决scheme是使用一个function强大的ACL系统,比如NFSv4 ACL,但是本地支持通常是不可用的。 有补丁,但你可能不想花费你的时间,最后有一个比我上面描述的更复杂的解决scheme。