在使用 Linux 多年之后,我发现自己有一些空闲时间,因此我决定重新审视一些基础知识。因此,我重新阅读了有关权限的内容(不检查源代码)及其文件夹的特殊情况,并提出了一种新的(至少对我来说......)思考文件夹权限的方法(对于特定用户/组/其他):我将文件夹想象为包含两列的表格,如下所示:
filename | inode
foo | 111
bar | 222
这读权限意味着您可以读取(并列出)表格的左列,即写权限对应于向表中添加和删除条目,并且执行权限对应于能够从文件名转换为inode;即你可以使用权文件夹的内容。
我做了一些实验,结果都符合我的这个“世界观”,但有一个结论似乎是不可避免的:一个有权限的文件夹d-w-------
,是完全没有用的。详细说明:您无法列出其内容,您无法读取其中存在的任何文件(因为您无法将名称翻译为 inode),您无法删除或重命名或添加文件,因为这又意味着翻译,你甚至不能添加硬链接(因为,我猜,这意味着添加一个名称和一个索引节点号,这意味着你会知道两者,这又反过来,再次推测,违反了取消设置执行权限的目的) 。当然,如果有是如果您在此类文件夹中包含一个文件,那么您也无法删除该文件夹,因为您无法删除其内容。
所以...我想问两个问题:
- 我的这个比喻是正确的,还是一个很大的错误?
- 无论之前的答案如何,是否存在任何拥有具有所描述权限的文件夹的情况是合适的吗?
答案1
你的理解非常正确。考虑执行权限的更好方法是它允许您做事具有目录中的文件或目录名称(而不只是读取名称本身)。其中大部分涉及将名称转换为索引节点,但也包括创建新名称和删除现有名称。
因此,对目录的写入权限而不执行是非常无用的,因为如果无法访问其中的文件,则实际上无法写入任何内容。
答案2
- 我的这个比喻是正确的,还是一个很大的错误?
我认为这是正确的,您需要 wx 权限才能写入文件夹。
- 无论前面的答案如何,是否存在具有所描述的权限的文件夹是合适的情况?
您可能有一个进程将信息写入文件夹中,而另一个进程则使用它,但您需要防止写入者读取存储在该位置的其他信息。
前面描述的情况在自动速度执法装置中很有用。该单位必须经过验证程序,州官员必须尽量减少掺假的可能性。一些自动测速装置有一个外部 SD 存储卡,系统在其中存储违规寄存器。但它也可以存储一个“神奇”的配置文件,该文件非法改变已验证单元的行为。因此,写入违规寄存器的进程一定不能从 sd 存储卡读取任何内容。
这是一个示例,首先是只写,然后是如何使其与 wx 一起工作:
安装设备
root@leon:/media# mount -o umask=527,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/media# ls /media/pen/ -la
total 44
d-w-r-x--- 10 enforcer ftp 4096 Dec 31 1969 .
drwxr-xr-x 8 root root 4096 Oct 17 16:14 ..
然后使用用户执行器尝试写入一个新文件
enforcer@leon:~$ touch /media/pen/hola
touch: cannot touch ‘/media/pen/hola’: Permission denied
使用 wx 卸载并重新安装
root@leon:/media# umount /dev/sdb1
root@leon:/media# mount -o umask=427,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/home/jjorge# ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer wim 4096 Dec 31 1969 .
drwxr-xr-x 8 root root 4096 Oct 17 16:14 ..
再试一次
enforcer@leon:~$ touch /media/pen/hola
enforcer@leon:~$ ls /media/pen/
ls: cannot open directory /media/pen/: Permission denied
enforcer@leon:~$ cat /media/pen/hola
cat: /media/pen/hola: Permission denied
ftp@leon:/home/jjorge$ ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer ftp 4096 Oct 20 10:20 .
drwxr-xr-x 8 root root 4096 Oct 17 16:14 ..
--wxr-x--- 1 enforcer wim 0 Oct 20 10:20 hola
通过此配置,您现在可以编写