如何 chmod 777 /var/www 的所有子文件夹?

use*_*034 75 permissions apache2 chmod

我正在运行一个网络服务器和 FTP 服务器,其中/var/www绑定到/home/user/www.

我将两个目录都设置为chmod 777(这很好,因为它仅用于测试)。

我可以将文件上传到/home/user/www,但是每当我创建一个新目录时,我总是必须chmod 777在该文件夹上运行。

否则,当我尝试浏览它时,会收到错误消息

您无权访问此服务器上的 /test/。

有没有办法让/var/www任何人都可以访问里面的所有子文件夹?或者他们的权限可以自动设置为777chmod 777每次都要打字很烦。

Dan*_*Dan 118

这是不好的做法,但希望您只是将其用于开发,或者您有另一个很好的理由。您可以在使用以下-m选项创建目录时指定权限:

mkdir -m 777 dirname
Run Code Online (Sandbox Code Playgroud)

或者您可以递归设置权限。

sudo chmod -R 777 /var/www
Run Code Online (Sandbox Code Playgroud)

在使用其中任何一个之前,请认真考虑您是否希望您的文件系统如此易于访问。


编辑:正如 Rinzwind 所提到的,这是完成您想要的更好的方法。

检查哪个组拥有您的/var/www目录并将您的用户添加到该组。

sudo adduser yourusername group
Run Code Online (Sandbox Code Playgroud)

群大概是www-data

然后你就可以将你的权限设置为 775。

  • 请不要用不好的方法帮助人们。如果你解释了如何做到这一点,我更愿意:通过将他的用户添加到一个组 www-data 或 apache ;) (11认同)
  • 教育是第一位的。帮助人们搞砸他们的机器不是 Linux 的方式。所以我强烈反对你。 (5认同)
  • 这符合您的要求,但请先阅读 [为什么 /var/www 没有 chmod 777](http://askubuntu.com/a/20110/107450)。这是**真的**不推荐的做法。 (4认同)
  • 提问者确实说这仅用于测试。我完全可以理解希望您的开发方面易于访问,以便您可以更快地工作。我要给他一个怀疑的好处,他不会愚蠢到用生产服务器来做这件事。 (4认同)
  • @dan08 有更好的测试方法,包括使用您的主目录。请参阅 http://askubuntu.com/questions/46331/how-to-avoid-using-sudo-when-working-in-var-www/46371#46371 和 http://kimbriggs.com/computers/computer-notes /linux-notes/apache2-public_html-virtual-directories.file 。有安全的方法可以实现这些目标;) (2认同)
  • 你好谢谢关心。我确实了解 777 所涉及的风险,它是一个实验室服务器,我和我的伙伴将它用于 alpha 网络开发人员,不会有关键数据。它只是 linux 权限有时很痛苦。它只是更容易允许访问所有人,而不是在我们两个人使用它时为每个组/用户创建一个权限。不管怎样,谢谢。 (2认同)

小智 11

Unix 中的文件和目录可能具有三种类型的权限:读取 ( r)、写入 ( w) 和执行 ( x)。每个权限可能是onoff针对以下三类用户中的每一个:文件或目录所有者;与所有者在同一组中的其他人;和所有其他人。要更改文件的模式,请使用 chmod 命令。一般形式为 chmod X@Y file1 file2 ...

chmod a-w file (removes all writing permissions)
chmod o+x file (sets execute permissions for other (public permissions))
chmod u=rx file        (Give the owner rx permissions, not w)
chmod go-rwx file      (Deny rwx permission for group, others)
chmod g+w file         (Give write permission to the group)
chmod a+x file1 file2  (Give execute permission to everybody)
chmod g+rx,o+x file    (OK to combine like this with a comma)

u = user that owns the file
g = group that owns the file
o = other (everyone else)
a = all (everybody)

r = read aces to the file
w = write access
x = execute (run) access 
Run Code Online (Sandbox Code Playgroud)


Jos*_*Pla 6

cd /var/www
find -type d ! -perm 777 -exec chmod 777 {} \;
Run Code Online (Sandbox Code Playgroud)

对于创建具有不同权限的所有文件的 ftp,您可能需要查找 ftpd 的 umask,该守护进程是如何启动的

看看这个网站 https://linuxaria.com/article/linux-shell-understanding-umask-with-examples


tho*_*ter 6

公共服务声明:


永远不要使用 chmod 777 来解决问题


  • 如果您运行任何对公众可用的服务,尤其是 Web 应用程序(例如 PHP),就会存在安全风险。

    操作系统的安全模型假设许多服务(例如您的 Web 服务器)以降低的权限运行,以防止它们能够修改文件。在文件上设置 777 会破坏安全设计。

    远程用户可以写入或上传文件,然后诱使服务器(或系统上的某些其他进程)读取或执行它们。脚本或软件可能存在允许这样做的缺陷。如果存在全球可写的目录,很难确保您已经锁定了可能发生的每一种方式。

  • 在某些系统目录(/usr、/etc、/var 等)中使用时,它会以令人惊讶的方式破坏您的系统。

    一些必要的系统文件需要特殊权限,例如 setuid/setgid 权限才能运行。例如,sudo。避免更改系统本身设置的目录和文件的任何文件权限。

  • 无法撤消它并取回所有旧权限。

    也就是说,如果您之前拥有具有各种不同权限的文件和文件夹,则无法返回到这些特定权限 - 只能将它们全部更改为相同的内容,这可能会丢失特定文件所需的任何特定权限设置。

  • 总有一种更合适的方式来实现您想要实现的目标。

默认设置 Ubuntu(和其他操作系统)使用以非特权用户身份运行 Web 服务器并使网站文件世界可读是一个合理的安全选择,为了一致性,除非必要,否则不应更改。因此,为了确保非特权服务器进程可以读取您的网站文件,它们需要是全球可读的。

给予世界可写的许可远比你需要做的要多。

在追查 Web 服务器进程无法读取您的文件的原因时,请记住,不仅文件本身需要是全局可读的(例如,644),它们的父目录还应该是全局可读和可遍历的(例如,755)。将您的主目录设置为 755 之类的内容,或者如果您不希望您的主目录世界可读,请将您的 www 目录移动到您家之外的某个地方,例如 /var/www 或 /srv)。

关于使文件可写的注意事项:

有时,您需要您的 Web 服务器能够写入某些文件。要实现这一点,请确保您只允许对要为其授予该权限的特定文件的写权限,并且最好使用组所有权和组写位来授予该权限,使它们成为全球可写的。