为什么chmod 644使目录无法访问?

我有一堆媒体文件(只需要644),这些文件是各种权限的混合。 有些人是团体或全球可写的,所以我想,为了安全起见,我会将它们全部重新调整为644。

问题是有一个目录层次结构,对于这个ls -l中捕获的所有目录,它们显示为:

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

如果我chmod到744,它是固定的。

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

正如与权限相关的chmod的联机帮助页中所述:

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

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

该文件夹必须对所有者可执行,尽管超级用户仍然可以访问该文件夹,因为使用sudo时可以访问或删除任何文件或目录。 此外, 在Stackoverflow的这篇有用的文章中进一步解释了目录和文件权限。

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

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

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

$HOME中文件夹的标准权限是755或775,文件的标准权限是644.但是,文件系统的其余部分将有所不同。 同样,文件夹必须具有所有者的执行位,否则他们将无法打开它们。 在更改权限时要小心使用chmod是很重要的,尤其是在递归执行时,因为情况很快就会搞砸了。

有关更多信息,请参阅man chmod或Ubuntu联机帮助页以及Superuser上的本文 。

目录需要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 {} 

警告!!! 你应该考虑这个:

  • 在root /目录或系统目录上使用chmod或chown递归会破坏你的操作系统(实际上/目录或系统目录上的任何递归都是危险的)

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