Leo*_*Leo 24 filesystem permissions
我在理解目录的执行权限意味着什么时遇到了一些麻烦。我是否正确理解用户没有 x 权限的目录中的任何内容都无法访问,即使目录中的内容为用户提供了特定权限?
还是用户仍然可以直接访问目录中的内容,但根本无法列出目录中的内容?
(我真正想了解的是,如果其他用户没有 x 权限,目录对其他用户的访问有多安全。)
Ame*_*Jah 24
目录的 x 位也称为搜索位。实际上,它使您可以访问文件夹中列出的文件的 inode。所以如果你想访问 /home/user/foo/bar.txt 那么你必须对 bar.txt 的每个祖先都有搜索访问权限
从页面引用
因为目录的使用方式与常规文件的使用方式不同,所以权限的工作方式略有不同(但只是略有不同)。尝试列出目录中的文件需要对该目录具有读权限,但不需要对其中的文件具有读权限。尝试向目录中添加文件、从目录中删除文件或重命名文件,都需要对该目录具有写权限,但(也许令人惊讶)不需要对其中的文件具有写权限。执行权限不适用于目录(目录不能同时是程序)。但该权限位可用于其他目的的目录。
目录需要执行权限才能 cd 进入它(即,使某个目录成为您当前的工作目录)。
需要在目录上执行以访问其中文件的 inode 信息。您需要它来搜索目录以读取其中文件的 inode。出于这个原因,目录的执行权限通常被称为搜索权限。
在许多常见情况下都需要搜索权限。考虑命令 cat /home/user/foo。此命令显然需要文件 foo 的读取权限。但是除非您对 /、/home 和 /home/user 目录具有搜索权限,否则 cat 无法定位 foo 的 inode,因此无法读取它!您需要对每个祖先目录的搜索权限才能访问任何文件(或目录)的 inode,并且您无法读取文件,除非您可以访问其 inode。
更新: Leo 提出了一个很好的问题。如果我们知道 inode,那么我们可以从一个未设置 x 位的目录中访问文件吗?我相信,我们不应该这样做。我没有通过 c 程序测试它,而是使用了一些方便的 bash 命令来确认它。
user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user 8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
File: `level1'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 95494 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1
File: `level1/file1'
Size: 8 Blocks: 8 IO Block: 4096 regular file
Device: 808h/2056d Inode: 60775 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ? ? file1
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775
Run Code Online (Sandbox Code Playgroud)
由于您要求目录:
read 表示:读取内容,即用 ls 列出它们。
write的意思是:写进导演。即创建文件或子目录。
执行的意思是:进入那个目录。
目录的读取和执行权限可能有点棘手。
例如,如果您有读取权限但没有执行权限,您可以列出目录的内容但不能放入其中。即使您知道其名称,也无法列出特定的文件或目录。
如果你有执行权限但没有读取权限,你可以放入它但不能直接列出文件。但是,如果您知道文件或目录的名称,则可以列出它们。
归档时间: |
|
查看次数: |
33150 次 |
最近记录: |