2.2 文件访问者的权限
文件访问者的权限分为三块,从左至右依次为文件所有者、组内用户、其他用户所对应的权限。
对于文件的基本权限有三种,分别是:
读(r):read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w):write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“-”表示不具有该项权限
注意:对于文件访问者的权限,它只能限制普通用户的行为,对于超级用户来说,不管有没有对该文件的任何操作权限,它都可以为所欲为。谁让人家是超级用户呢。
看下图,test.txt文件的拥有者和组内用户都是zhuxu,那么root按道理来说就应该是其他用户,可以看该文件的其他用户没有任何权限,但是,当我们以 root 的身份来操作该文件时,发现该文件对 root 的限制是不起任何作用的。
2.3 文件权限值的表示方法
(1)字符表示方法
Linux表示 | 说明 | Linux表示 | 说明 |
---|---|---|---|
r w x | 可读可写可执行 | - w x | 可写可执行 |
r w - | 可读可写 | - w - | 可写 |
r - x | 可读可执行 | - - x | 可执行 |
r - - | 可读 | - - - | 无任何权限 |
(2)8进制数值表示方法
权限符号 | 八进制 | 二进制 |
---|---|---|
rwx | 7 | 111 |
rw | 6 | 110 |
rx | 5 | 101 |
r | 4 | 100 |
wx | 3 | 011 |
w | 2 | 010 |
x | 1 | 001 |
— | 0 | 000 |
2.4 文件访问权限的相关设置方法
2.4.1 设置文件的访问权限(chmod)
格式:
chmod [参数] 权限 文件名
常用选项: R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式:
① 用户表示符 + / - = 权限字符
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
权限字符:
r :可读
w:可写
x:可执行
chmod u+w test.txt
:给文件拥有者加上写权限
chmod o-x test.txt
:给文件其他用户减去执行权限
chmod a=r test.txt
:给文件的所有用户都加上读权限
②三位8进制数字
chmod 664 test.txt
:将该文件的拥有者和组内用户的权限改为可读可写不可执行,其他用户的权限改为可读不可写不可执行
chmod 640 test.txt
:将该文件的拥有者的权限改为可读可写不可执行,组内用户的权限改为可读不可写不可执行,其他用户无任何权限
2.4.2 修改文件拥有者(chown)
格式:
chown [参数] 用户名 文件名
chown users test.txt
2.4.3 修改文件或目录的所属组(chgrp)
格式:
chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
chgrp users /abc/f2
2.5 文件的默认权限
要知道,新建文件默认权限为666 ,新建目录默认权限为777
但实际上你所看到的新创建的文件和目录的权限往往不是上面这个值。我们看到的文件权限是664,目录的权限是775。
原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask,超级用户默认掩码值为022,普通用户默认为002。
比如说:新建文件的默认权限为666,二进制就为110110110,普通用户默认权限掩码为002,二进制为000000010,将其取反为111111101,再与文件默认权限相与就为110110100,十进制就为664。
可是看了上面如何算文件的最终权限,为什么不是默认权限和权限掩码按位异或呢?明明异或也是对的,为什么还要那么麻烦要将权限掩码取反再与呢?看下面这幅图:
我们先将权限掩码改为007,二进制为000000111,此时创建一个abc.c的文件,它的默认权限为666,二进制为110110110,若选择按位异或的方法计算最终权限为110110001,很明显这是不对的,而通过取反再与的方法算出的是110110000。
3.目录权限
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容;
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中;
从上图可以看到,对于普通用户来说,它没有对目录123读的权限,所以当进入到目录123中无法使用
ll
指令来浏览该目录信息。
从上图可以看到,用户没有对目录写的权限,当进入到该目录下无法进行删除或创建指令的执行
从上图可以看到,用户没有对目录执行的权限,所以就无法进入到该目录下
4.粘滞位
在谈到粘滞位的问题,首先要知道的是在使用Linux的时候,未来可能会存在一些共享目录,顾名思义就是被所有的普通用户所共享,用来保存普通用户产生的临时数据。共享目录通常都是 root 所提供的。
但是呢,有时你突然不想把某个文件给别人看了,那么你就把这个文件的其他用户的权限都删除掉,这时其他用户就无法对该文件可读可写可执行,虽然别人无法操作你的文件,可是他可以删除掉你的文件,这个是不是就很离谱,你不给他看,他就直接给你删掉。所以说,为了避免这样的问题的发生,便引入粘滞位这一概念。它的目的就是为了让大家共享文件,且不让其他人随便删除别人的文件。
粘滞位只能给目录添加,也就是给共享目录添加。
可以看到在执行了 chmod +t public
指令后,在目录 public 的权限后面多了一个 T ,这就意味着该目录里边的文件不能被其他用户所删除。
要知道,在共享目录里,在未加入粘滞位之前是无法阻止其他人删除别人文件的。在目录的权限里边提到过,删除文件对应的是目录的 w 权限,那么不想让其他人删除别人的文件是不是可以直接去掉其他用户的 w 权限就可以呢?当然不可以,因为这是一个共享目录,当你去掉 w 权限之后,虽然其他人不能删除别人的文件了,但是该目录下的所有用户也将无法再创建文件了。所以说,只能采取粘滞位的方法来解决该问题。同时,这也说明了在共享目录里,一个文件能否被删除不在于该文件的权限怎样,而是取决于共享目录的权限。
当一个目录被设置为"粘滞位",则该目录下的文件只能由超级管理员和该文件的所有者删除。
最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!