问题描述
每次我在/var/www
工作时,我都想停止使用sudo
。我怎样才能做到这一点?我只是想把我所有的网站都放到这个目录中,并且不用太痛苦就可以使用它们。
最佳解决办法
这里的大多数答案都不是以安全为出发点。感觉每次运行sudo
都不是很明智,这很好。如果您输入错误(例如(不执行)sudo rm -rf / var/www/dir
),则可能会垃圾您的系统。
注意:从Apache 2.4.7 /Ubuntu 14.04开始,/var/www
已被移至/var/www/html
。相应地调整此答案中的命令。
参见 – 从2.4.7版本的apache2开始,我的本地网站放在哪里?
https://stackoverflow.com/questions/21660621/why-has-the-apache2-www-dir-been-moved-to-var-www-html
https://lists.debian.org/debian-devel/2012/04/msg00301.html
不好的想法:
-
chmod 777
(sagarchalise) – 这允许任何访问您的系统的人写入目录和文件,从而允许入侵者执行www-data
用户下的任何代码 -
chgrp -R www-data $HOME
(cob) – 这允许www-data
读取或写入主目录中的任何文件。这并没有考虑到最低特权规则 -
chown -R $USER:$USER /var/www
(kv1dr) – 除非世界对/var/www
具有读取权限,否则在www-data
下运行的网络服务器将无法读取(提供)文件。如果该文件是public-accessible纯HTML文档,如果世界可以读取该文件,则该文件可能不是问题。但是,如果该文件是包含密码的PHP文件,则是。
注意:在下面的解决方案中,我已授予www-data
写入权限。但是,/usr/share/doc/base-passwd/users-and-groups.txt.gz
指出:
www-data
Some web servers run as www-data. Web content should not be owned by this user, or a compromised web server would be able to rewrite a web site. Data written out by web servers will be owned by www-data.
在可能的情况下,不要将写入权限授予www-data
组。 www-data
只需要能够读取这些文件,以便网络服务器可以使用它。 www-data
需要写入权限的唯一情况是存储需要写入的上载和其他位置的目录。
解决方案1
将自己添加到www-data
组,并将/var/www
目录中的setgid位设置为所有新创建的文件都继承该组。
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
,需要Web服务器可写)
解决方案2
为每个项目创建一个符号链接到您的主目录。假设您的项目位于~/projects/foo
,并且您希望它位于/var/www/foo
,请运行:
sudo ln -sT ~/projects/foo /var/www/foo
如果您的主目录没有为other
设置的执行位(下行)(出于安全原因),请将其组更改为www-data
,但只设置执行位(不可读/写)。对于~/projects
文件夹执行相同的操作,因为它可能包含除www之外的其他项目。 (如果您以前将用户添加到www-data
组,则不需要sudo
。)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
将组设置为~/projects/foo
上的www-data
,并允许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
中编辑您的项目文件。
也可以看看
次佳解决办法
而不是将我的网站存储在/var /www中我将链接放置在位于我的个人文件夹中的网站上。我可以自由编辑,或将页面添加到我的网站。当我对更改感到满意时,我再将FTP发送到托管公司,在那里我的域名链接。
第三种解决办法
如果你的/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
中的所有文件。
第四种办法
注意事项
-
不要将文件权限设置为777(world-writable)这是一个重大的安全漏洞,尤其是在启用server-side脚本(如PHP)时。未授权的进程不应写入会影响网站的文件,或者在使用server-side脚本的情况下执行任意代码。
-
不要将自己添加为www-data组的成员,并为其授予写权限该组的目的在于它是服务器进程运行的非特权组。出于与上述相同的原因,他们应该只能在可能的情况下阅读网站文件。
-
不要更改Apache进程的权限默认情况下,Apache子进程以
www-data
用户和组的身份运行,并且不应更改。这只是给他们没有写权限给文件系统的一种方式。在某些情况下,您希望您的server-side脚本能够写入文件,在这种情况下,只有那些文件应该由www-data
写入,并且需要注意确保安全性。
Dos
-
将文件设置为由您自己拥有如果您是唯一的或通常的文件来修改网站上的某些文件,那么只需要拥有这些文件的所有权即可。将他们的主人设置为
<your username>
。您不必为此修改服务器权限,因为即使文件归您所有,服务器也将继续获得read-only访问权限。 -
选择一个合理的地方来放置文件(使用DocumentRoot)如果
/var/www
没有意义,欢迎您将它们放在其他地方。如果它们特定于您自己的开发或测试,则可以将它们放在您的主目录中。或者你可以在/srv
中设置一些目录。 -
如果您想授予组写入权限,请为此目的创建一个新组别请勿将re-use作为系统组,因为这些组通常被设计为具有目前拥有的权限,并且不会再出于安全原因。
第五种办法
这很简单。你既不需要启用apache ‘UserDir'(不推荐),也不需要搞乱’www-data’组(在Fedora的情况下apache组)
只需在/var/www/html
中创建您的项目目录
cd /var/www/html
sudo mkdir my_project
然后只需将项目目录分配给用户。
sudo chown your_username my_project
现在,您可以使用任何编辑器(您选择的IDE)作为普通用户开始处理项目文件夹。没有更多的sudos:)
参考资料