1、普通用户和超级用户
普通用户权限低受管控,超级用户权限高;
超级用户切换到普通用户方式 :su 普通用户名,不需要输入密码
普通用户切换到超级用户方式:su root(root可省略)之后回车输入密码或者su -之后回车输入密码;这两种方式区别是第二种切换为超级用户之后路径会回到/root,但是第一种保持为切换前的普通用户的路径不变
exit从超级用户退出到普通用户
2、sudo提权
用来进行指定的短暂提权
比如现在是普通用户,想要以超级用户的身份创建文件,可以 sudo touch file;或者想要在不属于你的目录中放文件,可以提权之后再拷贝文件;
典型的使用场景:安装软件,需要管理员root权限;在Linux里面,安装的软件其实只安装了一份,绝大部分允许大家同时使用。
但是这样岂不是人人都是root吗,不需要su转换成root直接sudo就可以提权,
来看这样的一个场景:
在Linux中有一份白名单,这个白名单也就是 指令能不能使用的用户白名单,只有root可以查看和修改,这个白名单是/etc/sudoers ;一般的用户不能直接使用提权sudo操作,需要添加到白名单中
这里将user1添加到白名单中
3、权限
权限的本质是:能或者不能做什么事情
为什么?(1)控制用户的行为,防止错误的发生。
对权限的理解:权限首先限制的是角色,作用对象是一种身份;其次权限要求目标必须具备对应的属性。所以权限=角色+目标权限属性
角色:分为拥有者、所属组、other;
想要直接在普通用户下的指定目录创建文件并且此文件拥有者不是root也就是说不要用sudo提权,那么就需要更改root下这个指定目录的other对应的w属性;
my.txt的第一个user1是拥有者,第二个user1是所属组
other是除了拥有者和所属组之外的角色
如何理解所属组:文件和目录所属的用户组,当拥有者想要将文件权限放开给同组的人读写时,当没有所属组时,此时除了同组的人可以操作此文件外,其他人other也能操作,为了避免这种情况出现,增加一个所属组,将权限精细化处理。
默认的拥有者就是创建这个文件或者目录时所在的用户;默认所属组就是创建这个文件或者目录时当前用户所在的主组。
目标权限属性:
my.txt开始的除了'-'的9个字符就是目标权限属性,每三个对应一个角色,开始的三个对应拥有者,后面三个对应所属组,最后的三个对应other;
其中r表示读权限,w表示写权限,x表示可执行权限
描述一下my.txt,它的拥有者的权限属性有可读可写不可执行,所属组具有的权限属性有可读可写不可执行,other具有的权限属性:只可读;
这些权限属性可以用0/1表示,比如my.txt的就可以这样表示:110 110 100。
4、chmod
修改拥有者的权限,chmod u+r my.txt,也就是对当前普通用户的这个my.txt 的拥有者增加可读权限属性;- 就是减去权限;所属组就是chmod g+r my.txt;other就是o+r
可以同时修改,中间用逗号隔开,比如给所有角色的权限属性都删掉,chmod u-rwx,g-rwx,o-rwx;快速给所有人增加相同权限属性:a+w,a表示all的意思
直接使用0/1的二进制对应的八进制数进行更改:
5、重点部分
(1)用户只能修改自己文件权限属性不能修改别人的
例如在user1普通用户下就不能修改root的权限属性
(2)没有权限时会拒绝访问
比如一个文件没有r权限就不能用cat读取文件内容,一个文件没有w权限就不能用echo来写文件的内容
(3)确定权限属性信息时,系统会先确定用户是谁(拥有者,所属组,other)
,在centos下,用户只确定一次,先后顺序是拥有者、所属组、other,确定了就是这个用户,不会因为属性没有就去选择下一个用户
例如在普通用户下user1将my.txt的拥有者改成root,所属组还是user1,那么再进行读写操作时就会按照所属组的权限属性来:
首先将my.txt的拥有者改为root超级用户,此时再将所属组的写权限去掉(注意此时要sudo,因为不是拥有者不能直接修改属性),再去向my.txt里面写是不行的,因为此时普通用户匹配的是所属组,而所属组没有可写权限属性,所以不能写
(4)root用户随便改,不受权限约束
(5)可执行程序不等于文件可以执行
也就是说给用户的某个文件加上可执行的权限,但是这个文件本身就不是可执行程序,那么这个文件还是不能执行,只是具备了可执行的权限;但是没有可执行权限属性那么就肯定不能执行
6、修改角色:
chown修改当前文件的拥有者,chgrp修改当前文件的所属组;但是不能直接修改,要加sudo提权,因为修改角色意味着你将文件直接给了其他人,而这种操作需要修改的一方权限更高
有一种同时修改拥有者和所属组的方法:就是sudo chown 要修改到的拥有者:要修改到的所属组 指定修改的文件
7、 对于目录来说,rwx意为着什么?
(1)若现在所在的用户是一个目录的拥有者,当没有r时,不能查看目录里面的文件
此时切换为user1用户,查看目录内容:
当把r权限加回来时又可以查看目录内容了,这是因为有了权限
(2)若是没有w权限,那么就不能对目录里面进行修改文件的操作,比如新建文件、删文件、修改文件(包括文件属性和其内容)
退回上一级目录,添加拥有者的w权限,再进入mydir进行创建文件
(3)x对于目录来说,是限制能不能进入目录的权限,也就是能不能cd进入这个目录
默认情况下,新建一个目录要求rwx权限都要有;对于根目录来说这写权限的限制不存在
8、如何理解Linux中用户之间彼此隔离?
在Linux中普通用户默认无法进入其他用户的家目录;
观察普通用户的默认的权限:
user1和user2这两个普通用户只拥有者开放了rwx权限,而对所属组和other没有开放任何权限,也就是说若是当前在user1下是不能进入user2的家目录的,因为user2默认对于other没有开放任何权限;这就形成各个用户之间的相互隔离。
9、权限缺省
在Linux中,为什么创建一个文件或者目录,它的权限属性都是我们所看到的那样的?
对于普通文件来说:它的权限属性默认是666 ;对于目录来说,权限属性默认是777
但是我们看到的并不是666或者777 ,文件是664,目录是775;
权限掩码
这是因为权限掩码的存在,umask,这里默认是0002
我们创建的文件或者目录最终的权限目标属性是默认的权限属性的二进制数按位与上后三位权限掩码对应的二进制数按位取反之后的数
比如这里的文件,默认权限属性是 110 110 110 ,掩码后三位002二进制数是000 000 010 取反之后是 111 111 101 那么用这个数和110 110 110 按位与得到110 110 10也就是664
再看目录,也就是默认的权限目标属性111 111 111 按位与上111 111 101 最后得到111 111 101 也就是775。
权限掩码的目的:凡是出现在掩码中的属性,在最终属性中都不会出现
为什么要权限掩码? 默认权限属性由OS自己决定,无法在创建之前进行修改,那么有了权限掩码就能做到创建之前进行修改,这样就实现了系统可配置,满足了灵活性:
权限掩码的更改以及更改之后产生的效果:
可以看到将掩码改为0000之后创建的文件以及目录都是默认权限属性;若是将掩码改为0777,那么创建的文件或者目录就一个权限属性都没有;
权限掩码是内存级的,也就是说即使现在在这里改变了权限掩码,退出再重进,掩码依旧是0002。
10、粘滞位
在一个普通用户下的目录下的文件或者目录可以被其他普通用户删掉,这是因为这个普通用户下的目录other的w权限是打开的,那么作为其他用户就能对这个目录下的内容进行修改;也就是说删除一个文件和这个文件本身无关而是和这个文件所在的目录的w权限相关;
要是想创建一个共享目录,不同的用户可以在这个目录下进行操作,但是一个用户不能删除其他用户的文件以及目录,此时就要有粘滞位的出现
给这个共享目录进行这样的操作:chmod +t 共享目录名
之后用户只能删除自己的文件或者目录,不能对其他用户的文件或者目录进行删除,即使这个共享文件夹的w权限是放开的
就比如/目录下的 tmp就是一个这样的一个共享的文件夹
粘滞位t出现在other的x位置。