linux中的用户有两种,root用户(超级管理员)和普通用户,root的权限是最高的。而普通用户的权限比较低,在做某些操作时需要使用sudo命令来短暂提权。
但是并不是任何用户都能够提权,如果任何用户都能提权那么root和普通用户就没有权限区分的意义了,而要能够使用sudo提权这个普通用户必须在root的“白名单”里。
比如我们要把名字为us1的用户放入"白名单",可以通过在vim打开/etc/sudoers并添加以下语句:
us1 ALL=(ALL) ALL权限的本质:能做或不能做某个操作
权限的目的:控制用户行为,防止错误发生
可以把权限简单概括为:权限=角色+目标属性 (1).权限限制的是角色(人)。(2).权限需要具有对应的属性
接下来我会用普通文件权限与目录权限来对以上角色和属性详细讲解。
首先我们创建一个普通文件,比如:
touch test.txt

权限位:
权限位分为三块,分别是拥有者的权限、所属组的权限、其他用户的权限。而每个角色都有3个权限位:
第一位:r表示可读,-表示不可读
第二位:w表示可写,-表示不可写
第三位:x表示可执行,-表示不可执行
我们发现每一个属性只有两种状态:能和否,那么就可以用二进制表示,1表示可执行0表示不可执行。这一点在下面缺省权限的讲解会用到。
而权限是可以由文件的拥有者改变的,如:
//u:拥有者
//g:所有者
//o:other用户
//a:所有用户
//-:去掉权限
//+:加上权限
chmod u-r test //去掉拥有者的r权限
chmod u+r test //加上拥有者的r权限
chmod u-rw test //去掉拥有者的rw权限
chmod u+rwx test //加上拥有者的rwx权限
//下面同理:
chmod g-r test //去掉所有者的r权限
chmod o-r test //去掉other用户的r权限
chmod a-r test //去掉所有用户的r权限
//......同样文件的角色也是可以改变的,如:
sudo chown us1 test//把test文件的拥有者改为us1
sudo chgrp us1 test//把test文件的所属组改为us1
sudo chown us1:us2 test//把test文件的拥有者改为us1,所属组改为us2注1:root不受权限约束!
注2:可执行权限!=文件可执行,文件本身是否可读可写可执行是和该文件自身属性有关,它和是否有该文件的可读可写可执行权限是两回事!
目录中的rwx
注:查看目录内容和进入目录是两回事。
所以在创建目录后拥有者的默认权限就有rwx,要不然这个目录就白费了。
我们有时会遇到这种情况:对于一个文件我们不能读不能写不能执行的情况下,我们竟然可以把这个文件删除!这看上去很不合理的样子,其实不然,这是因为我们在该文件所在的目录下有w权限,所以可以对里面的任何文件进行删除。也就是说无论这个文件是不是自己的只要是在自己的目录下,那就可以随意删除。
如上当我们创建一个文件后,该文件会默认的带一些权限,也会缺失一些权限。它是有以下一些规则的:
对于普通文件起始权限是666,也就是二进制110 110 110,所以普通文件默认是不带可执行(x)权限的。
对于目录文件起始权限是777,也就是二进制111 111 111。
当我们理解了起始权限后发现在我们新创建文件后的权限位并不是起始权限。这是因为:
最终权限=起始权限&(~umask)
umask的理解:
查看umask:直接输入umask指令,如:

这里我们发现它与上面666和777多了一个位,其实就是第一位,它限制的是特殊权限(如粘滞位)。
临时更改umask:只需要在umask指令后面接上想要更改的值即可。如:

试想一下不同用户之间一起去使用一台云服务器并且需要对同一个目录进行处理,我们就要使这个目录的权限位为rwx rwx rwx,那么就会有一个问题,各用户直接在该目录下进行创建自己的文件进行工作时,自己的文件也许不会被其他用户访问,但是可以被其他用户删除。
而粘滞位(t)就可以处理这个问题,给一个目录上的角色添加粘滞位则这个目录及里面的内容就不能被对应的角色删除,但依旧可以在里面创建文件。
系统里自带的含有粘滞位的文件

同样如果我们想对某个目录(stu)的other加上粘滞位,则使用如下命令:
chmod o+t stu