xea*_*its 7 filesystems permissions directory
事实上,我想问一个更一般的问题——“目录的写权限究竟允许你做什么?” - 但让我们用一个具体的例子来解决它。
这是一个很长的问题,如果您急于阅读粗体- 它应该涵盖主要部分。
不同的来源(好问题,还有一个,grymoire 的)对目录权限的描述类似于以下内容:
r, read -- 读取目录的内容(里面的文件名)
w, write -- 改变目录的属性(例如修改时间)并在里面创建/重命名/删除条目
x, search -- 访问里面的文件,你可以访问文件的inode,因此你可以访问它的实际内容
我的问题是关于w. 它允许您访问哪些目录的属性?我不能创建/重命名/删除文件,只写权限的目录里:我做一个目录(tdir/),并在文件中,( ),afile, chmod -x-r tdir/,,mv tdir/afile tdir/af -所有的失败,并允许拒绝,除非我设置权限的目录,以及.rm tdir/afiletouch tdir/newfilex
并且x单独不会授予您在目录中创建/重命名/删除文件的权限。
为了做到这一点,您需要x和w。
但是只touch tdir更改目录的修改时间w。
我会以这种方式重新表述上面的来源以符合问题:目录r允许您查看里面的文件名,但不能访问实际文件(到 inode);x允许您访问文件的 inode(这意味着您可以查看它们的权限,并根据它可以访问内容),但您仍然无法更改目录中的任何内容;目录实际上是某种文件,要更改其中的某些内容,您需要获得w许可。
因此,当您更改目录中的某些内容时,您需要w获得许可。如果您的更改需要目录中文件的 inode - 您也需要x。
它解释了为什么不能w仅通过以下方式删除x目录中的文件:删除文件时,您需要将 inode 的链接数减少 1 - 您需要知道 inode - 因此您需要目录.
但是为什么你需要x创建(你可以要求系统在不暴露 inode 的情况下创建一个文件?)和重命名/移动文件(当你移动一个文件时你不会以任何方式改变它,你只改变记录在目录中及其 inode 计数?)?
也许这只是一个实现的事情?即确实你不需要 inode 来重命名/创建文件——你只需要文件名和w权限;但 inode 和 filename 构成目录中的一条记录;因此更改文件名 = 更改记录 = 访问 inode 的类型。
以及目录除了修改时间、权限和文件记录之外还有哪些属性?您w只能更改目录中的其他内容吗?
x 允许您访问文件的 inode(这意味着您可以查看它们的权限,并根据它可以访问内容),但您仍然无法更改目录中的任何内容;目录实际上是某种文件,要更改其中的某些内容,您需要 w 权限。
是的。
但是为什么你需要 x 来创建(你可以要求系统在不暴露 inode 的情况下创建一个文件?)和重命名/移动文件(当你移动一个文件时你不会以任何方式改变它,你只改变目录中的记录及其 inode 计数?)?
没有x,您只能影响目录本身——您正在从外部看到目录。如果没有x,目录条目对您来说是越界的。如果您想添加、删除或修改(例如重命名)目录中的条目,您需要能够访问该条目。
文件的权限决定了您可以对文件内容执行的操作。目录的权限决定了您可以对文件的目录条目做什么,因为目录条目是目录的内容。
目录中的写权限允许您创建和删除条目。重命名算作原子地创建一个条目并删除另一个条目。除此之外,目录具有与常规文件相同的元数据。写入权限还允许您更改目录的上次修改和上次访问时间戳。要更改目录的权限、组所有权或访问控制列表(如果支持),您需要拥有它。要更改其用户所有权,大多数 unix 变体都需要 root。