为什么 chmod 644 会导致目录无法访问?

为什么 chmod 644 会导致目录无法访问?

我有一堆媒体文件(只需要 644),它们混合了各种权限。有些是组或全局可写的,所以我认为,为了安全起见,我会将它们全部 chmod 回 644。

问题在于存在目录层次结构,并且对于其中捕获的所有目录,ls -l它们都显示为:

d????????? ? ? ? ?            ? Dirname

如果我将其 chmod 为 744,它就修复了。

我的问题是:这里发生了什么?目录是否需要可执行?

答案1

chmod正如与权限相关的手册页中所述:

字母 rwxXst 为受影响的用户选择文件模式位:读取(r)、写入(w)、执行(或搜索目录)(x)、仅当文件是目录或已对某些用户具有执行权限时才执行/搜索(X)

文件夹上的可执行位在上面解释为“搜索”权限;即,执行位仅允许您在文件浏览器中访问该文件夹或通过运行命令cd或运行ls ~/folder列出文件夹中的文件从终端移动到该文件夹​​。

该文件夹必须是可执行的所有者,但超级用户仍可以访问该文件夹,就像使用sudo任何文件或目录时一样,可以访问或删除。此外,目录和文件权限在Stackoverflow 上的这篇有用的文章

还需要注意的是,“执行”文件夹并不意味着您实际上正在运行任何代码或命令,例如运行可执行二进制文件或脚本时。

对于家庭桌面用户(尽管可能不适用于您的服务器),其中的大多数文件夹都$HOME为用户,组和其他人设置了执行权限(如果使用stat ~/myfolder以下摘录):

Access: (0755/drwxr-xr-x)  Uid: ( 1000/    mike)   Gid: ( 1000/    mike)

文件夹的标准权限之内 $HOME是 755 或 775,文件是 644。但是,文件系统的其余部分将有所不同。同样,文件夹必须具有所有者的执行位,否则所有者将无法打开它们。chmod更改权限时务必小心,尤其是递归更改时,因为情况很快就会变得一团糟。

有关详细信息,请参阅man chmodUbuntu 在线手册页, 和这个超级用户上的文章

答案2

目录需要x设置位(对于目录,该位被视为搜索位)才能打开。许多人发现,当他们删除chmod -R整个文件夹上的可执行位时,他们就无法再访问它了。为了解决这个问题,我使用,tree这样我就可以只设置文件夹,避免将所有文件设置为可执行文件的噩梦(树的选项是 -d List directories only.):

sudo tree -faid dirname | xargs -L1 -I{} sudo chmod +x "{}"

如果你没有tree

find  dirname -type d -exec chmod +x {} 

警告!!!您应该考虑到这一点:

  • 在根目录或系统目录上递归使用 chmod 或 chown/将破坏您的操作系统(实际上,在目录或系统目录上进行的任何递归操作/都是危险的)

  • 像那样设置批量权限不是一个好的安全做法

相关内容