问题描述
我正在运行网络服务器和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,该守护程序是如何启动的
看看这个网站https://linuxaria.com/article/linux-shell-understanding-umask-with-examples