Unix 设置整个文件夹的权限

Unix 设置整个文件夹的权限

这是一个菜鸟问题。

我在一个名为 images 的文件夹中,但其中没有任何一个在我的网站上显示。我认为权限设置不正确。

我该如何正确设置它们才能显示出来。我要授予什么权限,我该怎么做,我是否要先导航到上一级?我可以一次性设置它们吗?

谢谢。

答案1

我建议使用 find 命令来设置权限:

为了让所有目录都可供所有人搜索和阅读(请参阅此链接用于 Unix 目录权限,权限与文件的含义不同):

sudo bash -c "find /var/www/root/images -type d -print0 | xargs -0 chmod oga+rx"

对于文件:

sudo bash -c "find /var/www/root/images -type f -print0 | xargs -0 chmod oga+r"

并确保群组中的所有成员都无法写入任何内容:

sudo bash -c "find /var/www/root/images -type f -print0 | xargs -0 chmod a-w"

我设置所有者、组和所有人的权限的原因是,即使所有人都具有读取权限,但如果所有者没有,则所有者也将无法读取该文件。

执行权限“x”在与目录一起使用时通常称为“搜索”权限。您还需要对根目录以下所有目录的搜索权限,请参阅上述有关目录权限的链接:

在许多常见情况下都需要搜索权限。考虑命令“cat /home/user/foo”。此命令显然需要对文件 foo 具有读取权限。但除非您具有 /、/home 和 /home/user 目录的搜索权限,否则 cat 无法找到 foo 的 inode,因此无法读取它!您需要在每个祖先目录上都具有搜索权限才能访问任何文件(或目录)的 inode,并且除非您可以获取文件的 inode,否则您无法读取文件。

因此在我的示例中,您还需要对 /var、/var/www、/var/www/root 等进行搜索 (+x) 权限。


不要使用 a+rX,抱歉把它放在帖子里,但我需要编码标签,但不知道如何在评论中使用它们。以下内容不仅影响目录,如果用户已经拥有执行权限,它还会影响文件。

 chmod -R a+rX images

例子:

[kbrandt@kbrandt-opadmin: ~/scrap/X] touch XnotOnlyDirectories     
[kbrandt@kbrandt-opadmin: ~/scrap/X] ls -l                         
total 0
-rw-rw-r-- 1 kbrandt kbrandt 0 2009-08-11 06:29 XnotOnlyDirectories
[kbrandt@kbrandt-opadmin: ~/scrap/X] chmod u+x XnotOnlyDirectories
[kbrandt@kbrandt-opadmin: ~/scrap/X] ls -l                         
total 0
-rwxrw-r-- 1 kbrandt kbrandt 0 2009-08-11 06:29 XnotOnlyDirectories
[kbrandt@kbrandt-opadmin: ~/scrap/X] cd ..                         
[kbrandt@kbrandt-opadmin: ~/scrap] chmod -R a+rX X                 
[kbrandt@kbrandt-opadmin: ~/scrap] ls -l X                         
total 0
-rwxrwxr-x 1 kbrandt kbrandt 0 2009-08-11 06:29 XnotOnlyDirectories

来自 chmod 手册页:

仅当文件是目录时才执行/搜索或者已经对某些用户具有执行权限(X)


对于 Apache 来说:
据我所知,没有绝对正确的方法,您可以使用我设置的权限并以用户 nobody 身份运行 Apache,或者您可以使用 apache 的组或用户,例如“apache”或“www-data”。请参阅此链接如果选择 nobody 路线,请确保 nobody 具有正确的用户 ID:

[kbrandt@kbrandt-opadmin: ~/scrap] id nobody                       
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

答案2

使用以下命令

 chmod -R a+rX images

-R:使命令递归运行,遍历其下的所有目录。

+rX:使文件可供所有人读取,目录可供所有人“进入”。大写 X 仅向目录授予执行权限,而不授予常规文件执行权限。(编辑:除非文件已经对某些用户具有执行权限)

图片:文件夹名称,你可以提供完整路径,例如/home/user/public_html/images

顺便说一句,除非您是 root 用户,否则您无法chown创建文件(编辑: 或者 chown 二进制 suid root)

答案3

使用带有 -R 参数的 chmod 命令以递归方式执行该操作。man chmod 命令将向您显示帮助。

答案4

(我会尽力解释为什么,而不仅仅是如何)

您需要处理两个问题:所有权和权限。

所有权有两种:用户和组。良好的 Web 管理应让 Web 服务器归“无人”(或同等身份)所有,并让其显示的文件归 Web 管理员所有。组所有权为 Web 管理组(如果有多人)或 Web 管理员用户的默认组。

权限有三种:用户、组和世界。每个 RWX 中的ls -l命令首先授予用户的读、写和执行权限,然后授予组的权限,然后授予所有的用户的权限。

如果您要向所有人提供图片,则设置对图片目录和图片本身的全局读取权限将解决您的问题,而无需担心所有权问题。如果图片仅限于登录成员,则应关闭全局 r/w/x(显示为---ls -l

至少,Web 管理员用户应该具有对图像的读/写访问权限,即 rwx 。(锁定的托管网站有例外,但我觉得这里的情况并非如此)。

完成后,您的所有权权限应如下所示:

chmod 774 *.jpg
rwxrwxr--   webadmin  webgroup   # Allow web admin and group to modify, everyone to view


chmod 744 *.jpg
rwxr--r--   webadmin  webgroup   # Allow only web admin to modify, everyone to view

chmod 740 *.jpg
rwxr-----   webadmin  webgroup   # Allow only web admin to modify, only him and webgroup to view, this means web server must be in webgroup.

chmod 740 *.jpg
chgrp nobody *.jpg
rwxr-----   webadmin nobody      # If apache user is nobody/nobody, this is better

相关内容