0.目录
1.Linux用户分类
在Linux环境下一共有两种用户:
- 超级用户(root):可以在linux系统下做任何事情,不受限制。
- 普通用户:在Linux下做有限的事情,也就是受权限的限制。
- 超级用户与普通用户的命令提示符也有所不同,如下图所示:
2.Linux用户切换
root用户的提示符是'#',普通用户是'$',root用户可以通过su[用户名]任意切换到普通用户而不需要输入密码,而普通用户切换到root需要输入密码,如下图所示:
3.Linux权限
01.文件对访问者的分类
- 文件或目录的拥有者:user
- 文件或目录的拥有者的所属组:group
- 其他访问者:others
02.文件类型和访问权限
我们现在如下图所示创建一个文件:
其中前面的yqh是拥有者,第二个yqh是所属组。
那么前面那一串是什么呢?首先第一个字符表示文件类型:-是普通文件,d是目录(也就是文件夹)
以下是一些常见文件类型:
然后剩下的九个字符,三三分组,分别是拥有者权限、所属组权限、其他访问者权限。
03.文件权限值的表示方法
- r:读权限
- w:写权限
- x:执行权限
- -:无权限
Linux中的文件权限按照rwx排列,如果没有对应的权限就显示-,比如说r-x,那么这个文件,就拥有读权限和执行权限,而没有写权限。
既然文件的权限是根据rwx来排列的,我们就可以用一个2进制的数字来表示状态,有权限用1表示,没权限用0表示,比如说r-x那么转换成2进制就是101,因为文件只有三个权限,所以这个二进制序列就可以用一个八进制数表示101转换成八进制后就是5,所以我们就可以用0~7表示所有的权限:
04.文件访问权限的相关设置方法
既然我们知道了权限是怎么表示的,那么我们是否可以设置权限呢?答案是当然可以的!
我们可以使用chmod指令:
- 功能:设置文件或目录的权限
- 用法:chmod [参数] 权限 文件名
用户表示符+/-=权限字符:
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
示例:
chmod o-r text.txt
执行完上述指令以后,就将o(others)的读权限给取消了,当然我们上面说过可以用八进制表示权限,所以我们可以用八进制数字对权限进行修改。
chmod 337 text.txt
这里我们将权限设置为了337,这里的others就拥有了所有权限。
05.可执行权限
由上述操作我们可以看到,我们可以给普通文件可执行权限,那么是不是意味着这个文件可执行了呢?
我们执行了之后发现并不可以,为什么呢?其实很好理解,我打个比方:我们在高中时期都有考清华的权限,但是有了权限不意味着一定考的上。放到文件上也一样,它有了可执行的权限,不意味着它可以执行。
06.文件掩码
我们这里创建了一个新的文件tt,我们发现它的默认权限是664,创建了一个新的目录d1它的权限默认是775,那么664,775就是文件默认的权限吗??其实不是,其实文件的默认权限是666,目录的默认权限是777,这个664和775是默认权限与掩码进行运算之后的结果。
我们可以通过 umask 来查看掩码:
我们看到这里的掩码是0002,那么这个664和775是怎么算出来的呢?其实是mask &(~umask) 计算出来的。我们也可以通过umask [数字]对掩码进行修改:
我们这里对掩码进行修改后,我们发现创建文件时,tt的默认权限就变成r了。我们也可以看到如果掩码为0,文件的默认权限是666,目录的权限是777,验证了我们之前的观点。
07.目录权限
为了掩饰下面的内容,我这里创建一个新的用户zs,并把他的家目录的权限给予其他人:
这样子操作之后yqh就可以去zs的目录下操作。
我们先用zs账号创建一个文件,并写入hello:
我们可以看到,others是只有r权限的,我们这里切换到yqh账号。
我们可以看到,yqh只有读权限,没有写权限,所以cat指令是被允许的,但是echo指令是被拒绝的。现在有个问题就来了,root是不是也算others,那么他能不能对该文件操作呢?
这里我们可以看到,root对文件进行写操作,所以root不受权限限制,这些权限是限制普通用户的,超级用户的权限在它之上。
这里我们yqh生气了,不让我写,我给你文件删了,然后系统就真的给这个文件删了,这合理么?这不合理,你连写权限都没有,为什么能删??我们怎么解决这个问题呢?Linux中引入了一个粘滞位的概念:
chmod +t zs
这里我们对zs目录添加了粘滞位+t,我们看到文件权限对others的权限从x变成了t,我们这时候zs再创建文件,yqh还能删么?
我们可以看到,yqh已经不能删除这个文件了。所以这里加了粘滞位+t之后,这个目录下的文件就只能被root和拥有者删除了。
4.关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
- 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
今天对于Linux权限的介绍就到这里,有什么疑问欢迎评论区讨论!