我不想sudo
每次在/var/www
. 我怎样才能做到这一点?我只是想把我所有的网站都放到这个目录中,并在没有太多痛苦的情况下使用它们。
Lek*_*eyn 272
这里的大多数答案都没有考虑到安全性。感觉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
,否则在其下运行的网络服务器www-data
将无法读取(提供)文件。如果该文件是可公开访问的纯 HTML 文档,那么如果全世界都可以读取该文件,则可能不是问题。但如果文件是包含密码的 PHP 文件,则是。注意:在以下解决方案中,我已授予www-data
写入权限。然而,/usr/share/doc/base-passwd/users-and-groups.txt.gz
指出:
万维网数据
一些网络服务器作为 www-data 运行。Web 内容不应归该用户所有,否则受感染的 Web 服务器将能够重写网站。Web 服务器写出的数据将归 www-data 所有。
如果可能的话,也没有授予写权限的www-data
组。www-data
只需要能够读取文件,以便网络服务器可以为其提供服务。www-data
需要写入权限的唯一情况是存储上传的目录和需要写入的其他位置。
将您自己添加到该www-data
组并在/var/www
目录上设置 setgid 位,以便所有新创建的文件也继承该组。
sudo gpasswd -a "$USER" www-data
Run Code Online (Sandbox Code Playgroud)
更正先前创建的文件(假设您是 的唯一用户/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 {} \;
Run Code Online (Sandbox Code Playgroud)
(更安全:使用640
或2750
手动chmod g+w file-or-dir
需要由网络服务器写入)
为每个项目创建指向主目录的符号链接。假设您的项目位于~/projects/foo
并且您希望它位于/var/www/foo
,请运行:
sudo ln -sT ~/projects/foo /var/www/foo
Run Code Online (Sandbox Code Playgroud)
如果您的主目录没有为other
(出于安全原因)设置执行位(降序),请将其组更改为www-data
,但仅设置执行位(无读/写)。对~/projects
文件夹执行相同操作,因为它可能包含除 www 之外的其他项目。(sudo
如果您之前已将用户添加到www-data
组中,则不需要。)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Run Code Online (Sandbox Code Playgroud)
将组设置为www-data
on~/projects/foo
并允许网络服务器读取和写入文件和文件+目录并进入目录:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Run Code Online (Sandbox Code Playgroud)
更安全:默认情况下使用 640 和 2750,并手动 chmod 需要网络服务器用户可写的文件和目录。仅当您希望~/projects/foo
该组可以访问每个新创建的文件时,才应添加 setgid 位。
从现在开始,您可以访问您的站点http://localhost/foo
并在~/projects/foo
.
fra*_*gos 11
我没有将我的网站存储在 /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
Run Code Online (Sandbox Code Playgroud)
然后,您应该能够/var/www/
轻松编辑文件。
第一行将您添加到www-data
组中,第二行清除所有权混乱的所有文件,第三行使所有属于该www-data
组成员的用户都可以读取和写入/var/www
.
就是这么简单。您既不需要启用 apache 'UserDir'(不推荐)也不需要搞乱 'www-data' 组(如果在 Fedora 上使用 apache 组)
只需在里面创建您的项目目录 /var/www/html
cd /var/www/html
sudo mkdir my_project
Run Code Online (Sandbox Code Playgroud)
然后将项目目录 chown 给您的用户。
sudo chown your_username my_project
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用您选择的任何编辑器和 IDE,以普通用户的身份开始处理您的项目文件夹。没有更多sudos:)
不要将文件权限设置为777(全局可写)
这是一个重大的安全漏洞,尤其是当您启用服务器端脚本(如 PHP)时。非特权进程不应该能够写入会影响网站的文件,或者在使用服务器端脚本的情况下,执行任意代码。
不要将自己添加为www-data组的成员并授予其写入权限
该组的目的是它是服务器进程运行的非特权组。出于与上述相同的原因,他们应该在可能的情况下仅对网站文件具有读取权限。
不要更改 Apache 进程的权限
www-data
默认情况下,Apache 子进程以用户和组的身份运行,不应更改此设置。这只是让他们没有对文件系统的写权限的一种方式。
在某些情况下,您希望您的服务器端脚本能够写入文件,在这种情况下,只有那些文件应该被设置为可写,www-data
并且需要注意确保安全性。
设置文件为自己所有
如果您是唯一一个或通常修改网站上某些文件的人,那么获得这些文件的所有权就完全有意义了。将其所有者设置为<your username>
.
您不必为此修改服务器权限,因为即使文件归您所有,服务器仍将继续获得只读访问权限。
选择一个合理的地方来存放文件(使用DocumentRoot)
如果/var/www
没有意义,欢迎您将它们放在其他地方。如果它们特定于您自己的开发或测试,您可以将它们放在您的主目录中。或者你可以在/srv
.
如果要授予组写入权限,请为此目的创建一个新组
不要重复使用系统组,因为出于安全原因,这些系统组通常被设计为具有它们当前拥有的访问权限,不再有更多的访问权限。
归档时间: |
|
查看次数: |
112885 次 |
最近记录: |