Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1454906
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2009-10-30 17:42:58

我用的是FC9, 碰到一个目录权限问题:
[test@XYZ hello]$ pwd
/home/test/hello
[test@XYZ hello]$ ls -l
total 4
-rw-rw-r-- 1 test test 13 2009-10-30 02:41 test.txt
[test@XYZ hello]$ ls -ld .
drwxrwxr-x 2 test test 4096 2009-10-30 02:41 .
[test@XYZ hello]$

这个是test用户家目录下的一个文件和其所在目录的权限, /home/test的权限位是drwx------

我用xyz用户直接访问该文件, 显示“Permission denied”
[xyz@XYZ ~]$ cat /home/test/hello/test.txt              
cat: /home/test/hello/test.txt: Permission denied
为什么, 权限会有继承么??

或者, 可以从文件系统的角度来解释下为什么? 比如说 , 读一个文件的时候, 文件系统是怎么定位到这个文件的
PS, 我执行chmod og+rx /home/test后, 用xyz用户执行cat /home/test/hello/test.txt 就木问题

解答: 今天偶尔在《APUE》中译第二版的第四章(P76)发现这段解释:
我们用名字(路径)打开任何一类文件时, 对该路径中包含的每一个目录, 包括它可能隐含的当前工作目录都应该具有执行权限x。 这就是为什么对于目录其执行权限位常被称为搜索位的原因。
例如, 为了打开文件/usr/include/stdio.h, 需要对目录/、/usr和/usr/include具有执行权限, 然后, 需要对该文件本身的适当权限, 这取决于以何种模式打开它(只读、读-写等)

注意, 对于目录的读权限和执行权限的意义(相比其他文件)是不同的。 读权限允许我们读目录, 获得在该目录中所有文件名的列表。 当一个目录是我们要访问文件的路径名的一个组成部分时, 对该目录的执行权限使我们可以通过该目录(也就是搜索该目录, 寻找一个特定的文件名)。 引用隐含目录的另一个例子是, 如果PATH环境变量指定了一个我们不具有执行权限的目录, 那么shell绝不会在该目录下找到任何可执行文件。

进程每次打开,创建或者删除一个文件时, 内核就进行文件访问权限测试, 而这种测试可能涉及文件的所有者(st_uid和st_gid),进程的有效id(有效用户id和有效组id)以及进程的附加组id(如果支持的话)。 两个所有者id是文件的性质, 而两个有效id和附加组id则是进程的性质。
 
2010-03-02更新:  发现软连接连到某个目录/文件(ls发现对所有用户都是可读写执行的), 但是如果真实路径中有任何一个目录当前用户没有相应权限, 还是会显示“permission denied“, 即软连接不能改变文件/目录对当前用户的权限限制。
阅读(756) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~