原创作品,欢迎转载,转载时请务必以超链接形式标明文章出处 、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/sinchb/article/details/11746427
本文着重介绍与Linux文件权限相关等问题,比如用户与用户组,文件权限,文件默认权限和文件特殊权限等。
Linux 为什么需要那么多的权限限制呢?其实这些都是为了“安全起见”啊!如果你的Linux系统里存了你给心上人写的情书,或者是某亚洲岛国的动作大片,你总不希望谁都可以翻翻看吧?!好了,废话少收,让我们一起来看看Linux文件权限到底是什么东东!
1.文件所有者
1.1文件所有者(owner)
这个就不用解释了吧?不过还是有些注意点,文件刚刚创建的时候,文件所有者是创建文件的用户,但是文件所有者是可以通过chown来改变的!这个后面会介绍到。
1.2用户组(group)
文件所在用户组,用户组的概念请自行百度之!用户组和用户的关系好比家庭里你家人和你的关系。注意,文件所有者的账号可能不属于该用户组。
1.3其他人(others)
除了用户组和文件所有者的之外的其他访问者统称为others,也就是你家庭以外的人!
除了这三种账号以外,还有就是那个超级账号root,这是个无所不能的账号!你可以暂时把他当做你家所在村的村长,管着这个村的各个家庭(group),
2.Linux文件权限的概念
2.1Linux文件权限概念
2.2 查看Linux文件的权限
- [root@Cherish linux]# touch test -->创建一个空文件!
- [root@Cherish linux]# ls -al -->显示文件属性!
- 总用量 8
- drwxr-xr-x. 2 root root 4096 12月 11 22:36 .
- dr-xr-x---. 37 root root 4096 12月 11 22:32 ..
- -rw-r--r--. 1 root root 0 12月 11 22:36 test
简短标注:
-rw-r--r--. 1 root root 0 12月 11 22:36 test
文件类型和权限 i-node连接数 所有者 所属用户组 文件大小 文件ctime或者mtime 文件名
我们可以看到文件有非常多的属性(其实还有很多!)这里着重介绍第一列,因为他们表示了该文件的文件权限!
我们将第一列表示文件类型和权限的十个字符抽出来单独分析,可以分为三组:
- rw- r-- r--
第一组 第二组 第三组 第四组
第一组一个字符,表示文件的类型,[-]代表是一般文件,[d]代表是目录,[l]代表链接文件。
第二组3个字符,表示文件所有者的权限。这3个字符从左到右分别表示该身份对文件权限 是否可读? 是否可写?是否可执行? 出现rwx相应的字母就表示有相应的权限,出现 - 则表示没有相应的权限。例如,test文件所有者的权限是rw-,表示该文件所有者对文件具有可读可写权限,但是不具有可执行权限。
第三组3个字符表示所属用户组的权限,格式同上。test文件只具有可读权限。
第四组3个字符表示others的权限,格式同上。test文件只具有可读权限
3.改变文件权限和属性的方法
3.1.改变文件属性的方法
chown [-R] dir/file 改变文件的所有者,加上-R则连同子目录下的所有文件和目录都更新
例:将test文件的文件所有者从root,改为Cherish
- [root@Cherish linux]# ll test
- -rw-r--r--. 1 root root 0 12月 11 22:36 test
- [root@Cherish linux]# chown Cherish test
- [root@Cherish linux]# ll test
- -rw-r--r--. 1 Cherish root 0 12月 11 22:36 test
chgrp [-R] dir/file 改变文件所属用户组,加上-R则连同子目录下的所有文件和目录都更新
例:将test文件的用户组从root ,改为Cherish
- [root@Cherish linux]# ll test
- -rw-r--r--. 1 Cherish root 0 12月 11 22:36 test
- [root@Cherish linux]# chgrp Cherish test
- [root@Cherish linux]# ll test
- -rw-r--r--. 1 Cherish Cherish 0 12月 11 22:36 test
3.2.改变文件权限(chmod)
(1)数字类型权限
使用数字来代表各个权限,以便将三种权限(r,w,x)量化为数字,对照表如下
r -> 4
w->2
x->1
每种身份(owner,group,others)的权限的数字表示是他拥有的权限所对应的数字的和。比如,文件test的文件拥有者Cherish对该文件的权限为 rw-即,可读可写,则量化为数字为:4(r) + 2(w) = 6,按照这种算法,文件test的权限如下:
owner = rw- = 4 + 2 = 6
group = r-- = 4 + 0 + 0 = 4
others = r-- = 4 + 0 + 0 = 4
这样的话,我们就可以用一个三位数来表示一个文件的权限啦!例如,test文件的权限是644!这样我们就可以方便的利用数字来设置一个文件的权限了。
例如,我们如果想将文件test分享给所有人,那么我们可以将该文件的权限设置为 rwxrwxrwx,计算数字权限得 777,那么我们可以这样做:
chomd [-R] abc dir/file abc就代表那个三位的数字权限啦!
- [root@Cherish linux]# chomd [-R] abc dir/file
- [root@Cherish linux]# ll test
- -rw-r--r--. 1 Cherish Cherish 0 12月 11 22:36 test
- [root@Cherish linux]# chmod 777 test
- [root@Cherish linux]# ll test
- -rwxrwxrwx. 1 Cherish Cherish 0 12月 11 22:36 test
(2)符号类型权限
数字权限虽然简洁,但是却不直观。Linux给我们提供了另外一种直观的符号类型权限设置方法!
由前面介绍你可以知道,文件有owner(也就是user),group,others三种身份,我们分别用 u,g,o来分别代表着三种身份,用a同时代表三种身份,用r,w,x代表三种权限,用+,-,=三种符号分别代表添加,去除以及设置某种或某些权限的动作。那么我们就可以用这几种字符组合来灵活直观的设置文件权限啦!下面这个图其实是偷了鸟哥的,希望他老人家不要生气!
chmod | u g o a | +(添加) -(去除) =(设置) | r w x | dir/file |
下面我们就举几个例子!
将test文件的文件权限设置为rwxrw-r--
- [root@Cherish linux]# chmod u=rwx,g=rw,o=r test
- [root@Cherish linux]# ll test
- -rwxrw-r--. 1 root root 0 12月 12 09:39 test
将test文件的others的 r 权限去掉!
- [root@Cherish linux]# chmod o-r test
- [root@Cherish linux]# ll test
- -rwxrw----. 1 root root 0 12月 12 09:39 test
我们看到test的others的r权限真的消失了!
我们再来将test 文件的 x 权限赋予所用身份:
- [root@Cherish linux]# chmod a+x test
- [root@Cherish linux]# ll test
- -rwxrwx--x. 1 root root 0 12月 12 09:39 test
另外还有其他灵活的设置方式,如:
- [root@Cherish linux]# chmod u=--- test
- [root@Cherish linux]# ll test
- ----rwx--x. 1 root root 0 12月 12 11:41 test
- [root@Cherish linux]# chmod g= test
- [root@Cherish linux]# ll test
- ---------x. 1 root root 0 12月 12 11:41 test
4.文件的默认权限和权限掩码
4.1文件的默认权限
文件和目录创建的时候,都会有一个默认的权限。
如果创建的是文件, 那么默认权限为 rw-rw-rw
如果创建的是目录,则默认权限为 rwxrwxrwx
我们可以创建一个文件看看:
- [root@Cherish linux]# touch test1
- [root@Cherish linux]# ll test1
- -rw-r--r--. 1 root root 0 12月 12 10:09 test1
- [root@Cherish linux]# mkdir testdir
- [root@Cherish linux]# ll -d testdir
- drwxr-xr-x. 2 root root 4096 12月 12 10:09 testdir
4.2文件权限掩码(unmask)
- [root@Cherish linux]# umask -->掩码的数字表示,我们只关注后三位数,第一位数后面会讲到!
- 0022
- [root@Cherish linux]# umask -S -->掩码的字符表示(<span style="font-family:新细明体, 'Times New Roman', serif;font-size: 15px;">Symbolic</span>)
- u=rwx,g=rx,o=rx
注意,umask 并没有给出真正的默认权限,文件默认权限要经过umaks的处理才行!umask的意义就是屏蔽掉默认权限中的某些权限。
4.2.1数字形态的掩码
数字形态的掩码告诉我们要去掉的权限。比如上面的022(暂时只关注后三位数)代表文件默认权限需要拿掉group和others的w权限(因为w权限的数字表示是2!):
文件:默认权限(rw-rw-rw) - 权限掩码(----w--w-) = 真正的默认权限(rw-r--r--)
明白了吗?目录的处理方式也一样,请读者自行计算。这里我们也可以采用类似二进制相或的处理方式 (rw-rw-rw) || (----w--w-) = (110110110) || (000010010) = 110100100 = rw-r--r--
4.2.2字符形态的掩码
看了数字形态的掩码后,读者是不是可以猜到字符形态的掩码的意义?字符型态的掩码意义,其实就是默认权限应该保留的权限,有点晕?没关系,我们举个例子就明白了。比如字符掩码中owner(user)的权限是u=rwx,这代表默认权限中的user如果有r权限,则保留;如果没有则不保留。文件的user的默认权限为 rw-,那么根据掩码,保留rw,由于没有x权限,则不保留。那么文件的user的最终默认权限为rw-,明白了吗?若果还是不明白,那就来个二进制相与吧!
文件:rw-rw-rw) && (rwxr-x-r-x) = 110110110 && 111101101= 110100100 = rw-r--r--
这下明白了吧!
4.2.3.修改umask
很简单umask后面直接接上修改后的值就可以了,这个值可以是数字形态的,也可以是字符形态的!
- [root@Cherish linux]# umask 077
- [root@Cherish linux]# umask
- 0077
- [root@Cherish linux]# umask u=rwx,g=rwx,o=rwx
- [root@Cherish linux]# umask
- 0000
- [root@Cherish linux]# umask -S
- u=rwx,g=rwx,o=rwx
最后还有个有趣的现象,留给读者自己思考!
- [root@Cherish linux]# chmod +x test
- [root@Cherish linux]# ll test
- -rwxr-xr-x. 1 root root 0 12月 12 11:46 test
- [root@Cherish linux]# chmod +w test
- [root@Cherish linux]# ll test
- -rwxr-xr-x. 1 root root 0 12月 12 11:46 test
- [root@Cherish linux]# chmod a+w test
- [root@Cherish linux]# ll test
- -rwxrwxrwx. 1 root root 0 12月 12 11:46 test
5.文件权限的意义
5.1文件权限对文件的意义
5.2文件权限对目录的意义
- [cherish@Cherish ~]$ ll -d /tmp/tesdir_*
- dr--r--r--. 3 root root 4096 12月 12 14:05 /tmp/tesdir_r #只给others r权限
- dr-xr-xr-x. 3 root root 4096 12月 12 14:05 /tmp/tesdir_rx #给rx权限
- d-w-----w-. 3 root root 4096 12月 12 14:05 /tmp/tesdir_w #给w权限
- d-wx--x-wx. 3 root root 4096 12月 12 14:10 /tmp/tesdir_wx #给wx权限
- [cherish@Cherish ~]$ ll /tmp/tesdir_r -->只能查看文件名,详细信息不能看哦!
- ls: 无法访问/tmp/tesdir_r/testfile: 权限不够
- 总用量 0
- d????????? ? ? ? ? ? testfile
- [cherish@Cherish ~]$ ll /tmp/tesdir_rx/ -->终于可以查看详细信息了!当然,你也可以用cd进入这个文件!
- 总用量 4
- drwxr-xr-x. 2 root root 4096 12月 12 14:05 testfile
- [cherish@Cherish ~]$ mkdir /tmp/tesdir_w/chenbin -->有w权限是不够的,必须同时具有x权限才可以修改目录内的结构!记住了!
- mkdir: 无法创建目录"/tmp/tesdir_w/chenbin": 权限不够
- [cherish@Cherish ~]$ mkdir /tmp/tesdir_wx/chenbin -->可以创建啦!
- [cherish@Cherish ~]$ cd /tmp/tesdir_r
- tesdir_r/ tesdir_rx/
- [cherish@Cherish ~]$ cd /tmp/tesdir_r
- -bash: cd: /tmp/tesdir_r: 权限不够