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-data
。www-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 {} \;
(更安全:使用640
或2750
手动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
,则不需要。)sudo
www-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
。