cha15.文件属性
15.1
15.4节中描述了针对各种文件系统操作所需的权限。请使用shell命令或编写程序来回答或验证以下说法。
a)将文件属主的所有权限“剥夺”后,即使“本组”和“其他”用户仍有访问权,属主也无法访问文件。
b)在一个可读但无可执行权限的目录下,可列出其中的文件名,但无论文件本身的权限如何,也不能访问其内容。
c)要创建一个新文件,打开一个文件进行读操作,打开及删除一个文件,父目录和文件本身分别需要具备何种权限?对文件执行重命名操作时,源及目标目录分别需要具备何种权限?若重命名操作的目标文件已存在,该文件需要具备何种权限?为目录设置sticky位(chmod +t),将如何影响重命名和删除操作?
a
由检查权限的方式可知,先检查有效用户id
与属主id
是否相同,不相同则检验有效组id
与属组gid
是否相同,仍不相同则按照其他用户的权限访问。但由于root用户用于所有能力,所以该命题在没有前提条件属主不为root时
该命题为假,若有该前提条件,则可知a)
为真。
1 | touch tmp |
b
文件夹是一个特殊文件,由readdir
, opendir
系统调用可知,其中的内容就是文件相关的信息。有读权限,则可知目录下存在哪些文件;有写权限,则可以对文件元数据修改;有搜索权限则可对其中文件进行访问。故b
在不考虑root
用户的情况下,也是正确的
1 | mkdir dir |
c
至少需要以下权限
操作 | 父目录权限 | 文件权限 |
---|---|---|
打开+读 | 搜索(+x) | 读(+r) |
打开+删除 | 搜索(+x) 写(+w) | 无需权限 |
操作 | 源目录 | 目标目录 | 目标文件(若已存在) |
---|---|---|---|
重命名 | 写(+w) 搜索(+x) | 写(+w) 搜索(+x) | 无需权限 |
重命名(源 sticky) | 写(+w) 搜索(+x) | 写(+w) 搜索(+x) | 无需权限 |
重命名(目标 sticky) | |||
重命名(源+目标 sticky) |
在拥有sticky标志的目录下删除其他用户的文件,依然能删,只是会在删除时报错
rm: remove write-protected regular file 'tmp'?
,输入y
即可
15.2
你认为系统调用stat()会改变文件3个时间戳中的任意之一吗?请解释原因。
stat只获取的是文件的信息,而不是去访问文件,对于软连接,其内容就是另一个文件的“地址”,对其解引用的过程就是对文件的访问(但经过实验,并非这样)
15.3
在运行Linux 2.6的系统上修改程序清单15-1(t_stat.c),令其可以纳秒级精度来显示文件时间戳。
1 | // |
15.4
1 | // |
15.5
linux内核提供了current_umask()
函数,在头文件#include <linux/fs.h>
中
15.6
实现chmod的X
功能
chmod
chmod的大写X
表示:
execute/search only if the file is a directory or already has execute permission for some user (X)
也就是若某些用户已经有了执行权限时,为其赋予执行/搜索权限
代码
1 |
|
15.7
实现chattr简化版
1 | // |