在 /var/www 中工作时如何避免使用 sudo?

在 /var/www 中工作时如何避免使用 sudo?

sudo我希望每次工作时都不必使用/var/www。我该怎么做?我只想将所有网站放入此目录中,然后轻松地使用它们。

答案1

这里的大多数答案都没有考虑到安全性。每次运行都感觉不太明智,这很好sudo。如果你打错了(例如在错误的地方输入了一个空格,例如递归删除/ var/www/dir,这意味着/var/www/dir,而不是/var/www/dir请不要尝试),你可能会破坏你的系统。

笔记:从 Apache 2.4.7 / Ubuntu 14.04 开始,/var/www已移至/var/www/html相应地调整此答案中的命令。

看:

坏主意:

  • chmod 777(sagarchalise)-这允许任何有权访问您的系统的人写入目录和文件,从而允许入侵者以用户身份执行任何www-data代码
  • chgrp -R www-data $HOME(cob) - 这允许www-data读取或写入主目录中的任何文件。这没有考虑到最小权限规则
  • chown -R $USER:$USER /var/www(kv1dr) - 除非其他人对 具有读取权限/var/www,否则在其下运行的 Web 服务器www-data将无法读取(提供)这些文件。如果该文件是可供公众访问的纯 HTML 文档,那么其他人是否能够读取该文件可能不是问题。但如果该文件是包含密码的 PHP 文件,那么就存在问题。

笔记:在下面的解决方案中,我授予了www-data写入权限。但是,/usr/share/doc/base-passwd/users-and-groups.txt.gz状态:

www-数据

某些 Web 服务器以 www-data 的身份运行。Web 内容不应归该用户所有,否则受感染的 Web 服务器将能够重写网站。Web 服务器写出的数据将归 www-data 所有。

如果可能的话,不是授予组写入权限www-datawww-data只需要能够文件,以便网络服务器能够提供服务。唯一www-data需要写入权限的情况是存储上传的目录和其他需要写入的位置。

解决方案 1

将您自己添加到该www-data组并设置目录的 setgid 位,/var/www以便所有新创建的文件也继承该组。

sudo gpasswd -a "$USER" www-data

更正先前创建的文件(假设您是 的唯一用户/var/www):

sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;

(更安全:使用6402750手动chmod g+w file-or-dir,需要由网络服务器写入)

解决方案 2

为每个项目创建指向主目录的符号链接。假设您的项目位于~/projects/foo,而您希望将其位于/var/www/foo,请运行:

sudo ln -sT ~/projects/foo /var/www/foo

如果你的主目录没有设置执行位(下降)other(出于安全原因),请将其组更改为www-data,但仅设置执行位(无读/写)。对文件夹执行相同操作,因为它可能包含除 www 之外的其他项目。(如果您之前已将用户添加到该组~/projects,则不需要。)sudowww-data

sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects

将组设置为www-data开启~/projects/foo并允许 Web 服务器读取和写入文件和文件+目录并进入目录:

sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;

更安全:默认使用 640 和 2750,并手动 chmod 需要由 Web 服务器用户写入的文件和目录。仅当您希望每个新创建的文件都可以~/projects/foo由组访问时才应添加 setgid 位。

从现在开始,您可以访问您的网站http://localhost/foo并在其中编辑您的项目文件~/projects/foo

也可以看看

答案2

我不会将我的网站存储在 /var/www 中,而是将位于我的主文件夹中的网站链接放在那里。我可以自由编辑或向我的网站添加页面。当我对更改感到满意时,我会通过 FTP 将其发送到我的域名链接所在的托管公司。

答案3

注意事项

  • 不要将文件权限设置为777(全球可写)

    这是一个严重的安全漏洞,特别是当您启用 PHP 等服务器端脚本时。非特权进程不应能够写入会影响网站的文件,或者在使用服务器端脚本的情况下执行任意代码。

  • 不要将自己添加为www-数据组并赋予其写权限

    该小组的目的是无特权团体服务器进程以...身份运行。出于与上述相同的原因,他们应该只对网站文件具有读取权限(如果可能)。

  • 不要更改 Apache 进程的权限

    Apache 子进程www-data默认以用户和组的身份运行,这一点不应改变。这只是一种不授予它们对文件系统的写入权限的方法。

    在某些情况下,你希望服务器端脚本能够写入文件,在这种情况下仅有的这些文件应该可写,www-data并且需要小心以确保安全。

注意事项

  • 将文件设置为自己所有

    如果您是唯一一个或经常修改网站上某些文件的人,那么拥有这些文件的所有权是完全合理的。将其所有者设置为<your username>

    您不必为此修改服务器权限,因为即使文件归您所有,服务器仍将继续获得只读访问权限。

  • 选择一个合理的位置来存放文件(使用文档根目录

    如果/var/www觉得不合理,你可以把它们放在其他地方。如果它们是你自己开发或测试专用的,你可以把它们放在你的主目录中。或者你可以在 中设置一些目录/srv

  • 如果你想给团体写访问,创建一个新的团体的目的

    不要重复使用系统组,因为出于安全原因,这些组通常设计为具有当前访问权限,而不会有更多访问权限。

答案4

如果您让 /var/www 的组可写并将自己添加到该组,则您无需使用 sudo,同时仍然相当安全。试试这个:

sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www

然后您就可以/var/www/轻松地编辑文件了。

第一行将你添加到www-data组,第二行清除所有所有权混乱的文件,第三行使组内的所有用户www-data都可以读取和写入 中的所有文件/var/www

相关内容