问题描述

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

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

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

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

You don’t have permission to access /test/ on this server.

有没有办法让/var/www内的所有sub-folders都可以被任何人访问?或者他们的权限是否可以自动设置为777?我每次都要输入chmod 777是很烦人的。

最佳解决思路

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

mkdir -m 777 dirname

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

sudo chmod -R 777 /var/www

在使用其中任何一个之前,请考虑是否希望您的文件系统可以访问。

编辑:正如Rinzwind所说,这是一种更好的方式来完成你想要的东西。

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

sudo adduser yourusername group

该小组可能是www-data。

然后,您可以将权限设置为775。

次佳解决思路

Unix中的文件和目录可能有三种类型的权限:读取(r),写入(w)和执行(x)。对于三类用户中的每一类,每个权限可以是on或off:文件或目录所有者;与所有者属于同一群体的其他人;和所有其他人。要更改文件的模式,请使用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

第三种解决思路

公共服务声明:

不要使用chmod 777来解决问题

如果您运行任何可供公众使用的服务,尤其是Web应用程序(例如PHP),这将是一个主要的安全风险。操作系统的安全模型假定许多服务(例如您的Web服务器)以降低的权限运行,以防止它们能够修改文件。在文件上设置777会破坏此设计。远程用户可以写入或上载文件,然后欺骗服务器(或系统上的某些其他进程)读取或执行它们。脚本或软件可能存在允许这样做的缺陷。如果存在world-writable目录,则很难锁定每种方式。

在某些系统目录(/usr,/etc,/var等)中使用它会以惊人的方式破坏您的系统。一些基本的系统文件需要特殊权限,例如setuid /setgid权限才能运行。例如,sudo。避免更改系统本身设置的目录和文件的任何文件权限。

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

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

在这种情况下,您似乎只希望您的Web服务器能够读取目录。授予world-writable权限比您需要的更多。

追踪网络服务器无法读取该目录的原因(提示:这可能是因为您的主目录不是world-readable。World-readable比world-writable安全得多 – 将您的主目录设置为755之类,或者将www目录移到您的目录之外回到像/var /www或/srv这样的地方。

第四种思路

cd /var/www

find -type d ! -perm 777 -exec chmod 777 {} \;

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

参考资料

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐