知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

Linux文件权限之不完全解析

发布时间:2014-09-05 13:50:56作者:知识屋

Linux文件权限之不完全解析
 
        本文着重介绍与Linux文件权限相关等问题,比如用户与用户组,文件权限,文件默认权限和文件特殊权限等。
 
        Linux 为什么需要那么多的权限限制呢?其实这些都是为了“安全起见”啊!如果你的Linux系统里存了你给心上人写的情书,或者是某亚洲岛国的动作大片,你总不希望谁都可以翻翻看吧?!好了,废话少收,让我们一起来看看Linux文件权限到底是什么东东!
1.文件所有者
        对于文件来说,访问该文件的账号的身份有三类:文件所有者(owner),文件所属的用户组(group),以及用户组外的其他人(others)。由于本文着重介绍文件权限,这些概念简单介绍,不做全面阐述。
1.1文件所有者(owner)
        这个就不用解释了吧?不过还是有些注意点,文件刚刚创建的时候,文件所有者是创建文件的用户,但是文件所有者是可以通过chown来改变的!这个后面会介绍到。
 
1.2用户组(group)
        文件所在用户组,用户组的概念请自行百度之!用户组和用户的关系好比家庭里你家人和你的关系。注意,文件所有者的账号可能不属于该用户组。
 
1.3其他人(others)
        除了用户组和文件所有者的之外的其他访问者统称为others,也就是你家庭以外的人!
 
        除了这三种账号以外,还有就是那个超级账号root,这是个无所不能的账号!你可以暂时把他当做你家所在村的村长,管着这个村的各个家庭(group),
 
2.Linux文件权限的概念
2.1Linux文件权限概念
        Linux系统内文件的三种身份(拥有者、群组与其他人),知道每种身份都有三种权限(rwx)、
           有上面介绍我们可以知道一个文件的访问者有三种身份:owner(user),group,others。而文件权限也有三种,即:可读,可写,可执行权限。简写为   r,w,x,分别是read,write,execute的缩写。那么排列组合一下,一个文件就会有多大9种的权限(实际上更多!后面会介绍!):owner的权限r,w,x,group的权限rwx,以及others的权限rwx。这些权限分别限制了这三种用户是否对该文件拥有可读和(或)可写和(或)可执行的权限。
2.2 查看Linux文件的权限
[plain] 
[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
 
[plain] 
[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
 
[plain] 
[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就代表那个三位的数字权限啦!
[plain] 
[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  
我们发现执行命令chmod 777 test后,文件test的权限真的变成了   rwxrwxrwx ,是不是很方便呢!
(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--
 
[plain] 
[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 权限去掉!
[plain] 
[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 权限赋予所用身份:
 
[plain] 
[root@Cherish linux]# chmod a+x test   
[root@Cherish linux]# ll test   
-rwxrwx--x. 1 root root 0 12月 12 09:39 test  
这个命令在给可执行文件设置权限的时候很有用!
另外还有其他灵活的设置方式,如:
 
[plain] 
[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
 
    我们可以创建一个文件看看:
 
[plain] 
[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  
    什么?为啥跟默认权限对不上号呢?你忽悠我呢?别着急,这里还有一个umask的问题!我们知道要得到一个ip地址所在的网段,必须要将ip和子网掩码(netmask)相与才可以得到。这里类似ip的子网掩码,文件默认权限也有一个权限掩码(unmask),默认权限只有经过unmask的处理后,才能得到真正的默认权限,让我们来看看这个unmask吧!
4.2文件权限掩码(unmask)
[plain] 
[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后面直接接上修改后的值就可以了,这个值可以是数字形态的,也可以是字符形态的!
 
[plain] 
[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  
最后还有个有趣的现象,留给读者自己思考!
 
[plain] 
[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文件权限对目录的意义
        这个非常重要!一定要仔细理解!那到底r w x 对目录有什么意义呢?
        r:对于目录来说,具有r权限的身份可以利用ls查看该目录下的文件名列表,不能查看文件的详细信息
        w:具有w权限的身份可以更改目录的内部结构,也就是说,你可以删除、添加、移动、重命名文件等
        x:具有x权限的身份可以利用cd进入该目录作为自己的工作目录,在这个目录中,你可以访问、修改你有权限的文件,前提是你知道这个文件的文件名。
        明白了吧?!下面我们用一些例子来说明。我用root账号新建四个文件,分别给others身份r,rx,w,wx权限。然后用cherish账号登陆,来看看我们用cherish这个身份都能对这些文件进行哪些操作!
[plain] 
[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: 权限不够  
 
        一开始接触这些东西的确让人很感觉很坑爹!但是多多练习多多揣摩后悔发现,Linux真的很强大!学会了这些,你就不用像在windows下面一样,想隐藏某些文件的时候,还要用拙劣的“隐藏文件”,或者大动干戈的下个神马文件加密软件。在Linux下面只要一两条命令就搞定了,是不是很强大呢?!
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜