我试图在Ubuntu上部署一个新的(第一次)Nginx服务器。 我正在关注DigitalOcean的教程,在这里find 。
正如本教程所示,我将每个站点放置在/var/www/domain.tld的主机上。 当我尝试使用git时,出现了我遇到的问题:一些站点存储在git repos中,但是尝试使用sudo与git导致权限错误(在git结尾)。 我正在寻找的是一种安全的方式,允许我的用户帐户访问站点目录,而无需通过sudo。 我不想在我的用户的主文件夹中使用一个目录(如~/var/www因为这使得站点依赖于我的用户)。 哪里是一个合理的标准化的地方来存储用户可访问的网站?
使用sudo来分配站点文件所在目录的所有权。例如/var/www/example.com/public_html(使用您引用的教程中的命名scheme)。 您可能希望为/var/www/example.com中的其他目录分配所有权,但是如果您有例如/var/www/example.com/logs目录,则该目录及其父目录应由root拥有,而不是其他人写的。
您参考的教程有一个相当简单的权限模型,如果无法以www数据用户身份访问的用户或以root用户的身份需要在web-root中安装文件,则无法让您远离您。 此外,尽可能避免www-data用户能够写入代码文件。
有一个简单的策略,相当常见的共享主机系统,每个站点有一个用户拥有文件,Web服务器帐户根据文件上的“其他”用户权限访问文件。 这意味着所有的用户都可以看到其他用户的所有网页文件,但是通常使用的文件访问服务器(例如ftpd或者ssh的internal-sftp)也可以看到一些限制。 这禁止用户看到对方的文件,没有强大的安全性。 更强大的措施是可能的,但不是真的只通过文件权限。
www-data用户将需要能够写入一些目录(file upload的地方),但理想情况下,你希望用户能够禁止Web服务器写入其他目录。 用户可以通过'其他'用户的'writeable'位来控制这个。 即chmod o+x ...或者chmod ox ...
运行git作为拥有该站点的用户,只能用于该用户可写入的目录。
对于允许在多个用户之间共享站点目录的稍微更复杂的模型(并且使他们避免不必要的切换到站点用户),您可能需要查看http://andrew.mcnaughty.com /节点/ 1
你也可能想看看有一个系统,推送到适当的git分支的变化会自动检出到站点,这意味着用户只需要担心git访问,而不是访问站点用户。 search“push to deploy git”以查找更多信息。
/ var / www是好的,如果你只希望在这个服务器上只有一个站点。
如果你计划在多个站点上(即在nginx中有多个“服务器”节),那么我会build议/ var / www /或其他一些类似的结构。
如果可能的话,尽可能远离家中的网站内容。
我不知道这如何与git相关; 在描述问题是什么时,你必须更加明确一些。 如果我可能冒险猜测,可能与权限有关? 如果是这样的话,请记住,如果你拥有服务器,现在有一个原因/ var / www 必须由root拥有,这只是最初的默认值(通常?也许…可能会有所不同)。 它可以由一个非root用户拥有,这是你用git部署内容的一个用户,也就是你自己的用户代码(但不build议这样做,因为它把交互用户和服务类用户的概念混为一谈),或者也许是拥有已部署代码/内容的“部署”用户。
虽然这当然不是一个解决scheme,但它似乎已经为我工作:
我最初尝试将我的用户添加到www-data组( /var/www由www-data:www-data ),但是我不想给www-data组写入/执行权限以防止安全涉及www-data中其他系统用户的问题。
最后,我最终将个人pipe理员帐户设置为/var/www (及其子目录)的所有者。 我觉得这样远远不是最好的解决scheme,所以我仍然对更好的想法持开放态度,但是暂时让我自己成为整个目录的所有者已经允许我在那里运行git,而不打开什么样的主要安全性孔。 这个解决scheme仍然感觉对用户有一定的依赖,但是它比把文件放置在像/home这样严重编辑和依赖于用户的东西上感觉更好。