首页 > 操作系统 > Linux专区 > [原创]文件权限问题
2006
12-11

[原创]文件权限问题

搞定文件权限问题
以前写的一篇文章,操作系统是Solaris,不过可以用在其他Unix系统上。
另外想了解更多的权限问题可以看看ACL,以下是几个网站:
FreeBSD 5.0已经在新的UFS2中引入了ACL机制,相关文章你可以看:
http://www.cnfug.org/journal/systems/2004/000011.html

Mac OS X Server v10.4以后也引入了ACL,
http://www.apple.com.cn/server/macosx/features/fileprint.html

这个是Linux上使用ACL的办法:
http://www.linuxaid.com.cn/articles/7/9/794686264.shtml

首先对本人前段时间*极其*懒惰的行为表示最最深刻的反省。(懒到对文件设置权限的时候只会用chmod 777 *,而不研究其他知识。)
今天花了点时间研究了下unix下的文件权限设置问题,终于搞定,不敢独享。

先了解一些基本情况:
文件系统允许三种基本文件访问类型,即文件或目录的读(r)、写(w)和执行(x)。
针对用户的分类,当前用户(u)、当前用户组(g)、其他用户(o)。
赋予权限可以采用带”+”号的chmod命令,撤消权限可以采用带”-”号的chmod命令。

现在我们来看看”ls -l”命令列出的内容

# ls -l
合计 16
-rwxr-xr-x   1 root   other     5412 5月 15日 15:52 hello
-rw-r–r–   1 root   other     125 5月 15日 15:36 hello.c
drwxr-xr-x   2 root   other     512 5月 15日 15:53 mdir
# cd mdir
# pwd
/test/mdir
# cd ..
# pwd
/test

前面的一段字符”drwxr-xr-x”代表的是什么意思呢?
下面我们把它分为4部分来讲解:
d               rwx               r-x                     r-x
目录/文件   当前用户权限   当前用户组权限   其他用户

第一部分:
“d”表示这个是个目录,”-”表示非目录。

第二部分:
针对当前用户(文件所有者)
rwx分别表示读、写、执行的权限,”-”表示没有此权限。

第三部分和第四部分各个标志位的意思同第二部分,只是针对的用户不同。
第三部分针对的是该用户所在的组的其他用户,第四部分针对的是全部用户。

根据这个我们来看看hello和hello.c的文件权限情况:
hello的”-rwxr-xr-x”
第一部分”-”表示这个不是目录,是个文件。
第二部分”rwx”表示当前用户对它有:读、写、执行的权限。
第三部分”r-x”表示当前用户组对它只有:读、执行的权限而没有写的权限。
第四部分”r-x”表示其他用户对它只有:读、执行的权限而没有写的权限。

hello.c的”-rw-r–r–”
第一部分”-”表示这个不是目录,是个文件。
第二部分”rw-”表示当前用户对它有:读、写的权限而没有执行的权限。
第三部分”r–”表示当前用户组对它只有:读的权限而没有写、执行的权限。
第四部分”r–”表示其他用户对它只有:读的权限而没有写、执行的权限。

现在我们执行一下看看:

# hello
Hello World
# hello.c
hello.c: execute permission denied

现在我们来改一下”hello”的权限,取消它的执行权限。

# chmod u-x hello
# ls -l
合计 16
-rw-r-xr-x   1 root   other     5412 5月 15日 15:52 hello
-rw-r–r–   1 root   other     125 5月 15日 15:36 hello.c
drwxr-xr-x   2 root   other     512 5月 15日 15:53 mdir
# hello
Hello World
# chmod g-x hello
# ls -l
合计 16
-rw-r–r-x   1 root   other     5412 5月 15日 15:52 hello
-rw-r–r–   1 root   other     125 5月 15日 15:36 hello.c
drwxr-xr-x   2 root   other     512 5月 15日 15:53 mdir
# hello
Hello World
# chmod o-x hello
# ls -l
合计 16
-rw-r–r–   1 root   other     5412 5月 15日 15:52 hello
-rw-r–r–   1 root   other     125 5月 15日 15:36 hello.c
drwxr-xr-x   2 root   other     512 5月 15日 15:53 mdir
# hello
hello: cannot execute

这里需要注意的是因为我是以root用户进入系统的,所以需要去掉所有组的执行权限,才看的出效果。

说到这里有人会问了,那平时接触到的”chmod 777 *”和”chmod 666 *”等是什么意思呢?
其实这个是权限标志位的八进制表示方法。
“rwx”和”-”分别用1和0表示的话,则”rwx”三位权限位,转换为八进制就是数字7。

按照上面的方法,如果要恢复hello的原来的权限的话。
“rwxr-xr-x”转换一下”111101101″,再转换一下就是”755″。则命令为”chmod 755 hello”

# ls -l
合计 16
-rw-r–r–   1 root   other     5412 5月 15日 15:52 hello
-rw-r–r–   1 root   other     125 5月 15日 15:36 hello.c
drwxr-xr-x   2 root   other     512 5月 15日 15:53 mdir
# chmod 755 hello
# ls -l
合计 16
-rwxr-xr-x   1 root   other     5412 5月 15日 15:52 hello
-rw-r–r–   1 root   other     125 5月 15日 15:36 hello.c
drwxr-xr-x   2 root   other     512 5月 15日 15:53 mdir
# hello
Hello World

上面就是有关unix下文件权限的内容。


[原创]文件权限问题》有 2 条评论

  1. jsyueyi 说:

    顶…….

  2. hiroki 说:

    感谢楼主分享啊

留下一个回复