Nic*_*k.h 453 linux permissions directory
在我的 CMS 中,我注意到目录需要+x为用户设置可执行位 ( ) 才能打开它们。为什么读取目录需要执行权限,Linux 中的目录权限是如何工作的?
Chr*_*own 433
在 Linux 上对目录应用权限时,权限位与普通文件的含义不同。
r)允许受影响的用户列出目录中的文件w)允许受影响的用户创建,重命名,或在目录中删除文件,并修改目录的属性x)允许受影响的用户可以进入该目录,和访问文件和目录内T或者t如果执行位被设置为别人)指出,该目录中的文件和目录,只可删除或重命名由它们的所有者(或root)Bal*_*ick 314
首先,思考:什么是目录?它只是其中包含的项目(文件和其他目录)的列表。所以:目录=名称列表。
读取位= 如果设置,您可以读取此列表。因此,例如,如果您有一个名为 的目录poems:
ls poems并且你会得到一个生活在其中的物品清单(-l不会透露任何细节!)。touch poems/so <TAB> poems/somefile.poems你的工作目录(即cd进入它)。写入位= 如果设置,您可以修改此列表,即您可以{添加,重命名,删除} 名称。但!只有当执行位也被设置时,你才能真正做到这一点。
执行位= 将此目录设为您的工作目录,即cd进入其中。如果您想:
有趣的案例 1:如果您对目录具有写入 + 执行权限,即使您没有对这些项目的写入权限,您也可以 {delete,rename} 居住在其中的项目。(使用粘性位来防止这种情况)
有趣的情况 2:如果您对目录具有执行(但没有写)权限并且对其中的文件具有写权限,则无法删除该文件(因为它涉及将其从列表中删除)。但是,您可以删除它的内容,例如,如果它是一个文本文件,您可以使用 vi 打开它并删除所有内容。该文件仍然存在,但它将是空的。
概括:
读取位= 您可以读取列表中的名称。
写入位= 如果执行位也设置了,您可以在列表中{添加、重命名、删除}名称。
执行位= 您可以将此目录设为您的工作目录。
PS:Kusalananda 提到的文章很好读。
Dav*_*vid 80
我已经准备了这张表,其中包含所有可能的权限及其实际效果。
(*)仅文件名:其他属性如大小或日期不可访问。例如,您可以使用 Tab 键自动完成,但不能使用 ls 命令。
一些想法:
Kus*_*nda 45
概括:
x设置了位的目录允许用户cd(更改目录)进入该目录,并访问其中的文件。
细节:
阅读 ( r)
能够读取存储在此目录中的文件的名称。
写 ( w)
如果您还具有执行权限,则可以重命名目录中的文件、创建新文件或删除现有文件。如果你没有执行权限,那么写权限是没有意义的。
执行 ( x)
能够
cd进入这个目录,并访问这个目录中的文件。
以下是一些示例,应该可以更容易理解:
# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir
# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir
# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir
# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir
Run Code Online (Sandbox Code Playgroud)
在Hacking Linux Exposed 文章中还有更多信息。
对于任何访问文件或目录的操作,必须首先解析文件或目录的路径。该解决方案要求用户对路径中除最终路径组件之外的所有目录具有执行权限。所以对于目录,你可以认为执行位意味着“可解析”。
以path/a/b/c.txt为例,假设用户拥有1)/和 的执行权限/a;2) 具有读取权限/a/b;3) 读写权限/a/b/c.txt。
用户将无法读取 (list) /a,因为它没有读取权限。但路径解析不会失败。
用户将能够读取(列表)/a/b,因为用户具有 的执行权限/和/a的读取权限/a/b。请注意,读取时/a/b,文件名c.txt是可见的,但元数据(例如文件大小)和内容不是可见的,因为文件名是与目录一起存储的,而不是与文件一起存储的,但元数据存储在文件的 inode 中。
用户将无法读取,因为当解析从到的/a/b/c.txt路径时,它会失败,因为用户没有执行权限。//a/a/b/a/b
另请参阅如何将路径名解析为文件。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           333651 次  |  
        
|   最近记录:  |