【Linux】“ 权限 “ 与相关指令
前言:
在Linux系统中,一切皆文件!!!而权限对文件的操作至关重要,所以打起精神哟
🚀直通车:《我的Linux专栏》
一、权限的概念
权限本质就是能做或不能做什么事情。
2、为什么要有权限?
Linux系统是多用户操作系统,所以就需要设置权限来控制用户的行为,防止一些危险行为的发生。
3、权限的理解
权限首先面对的对象就是用户,其次权限需要有对应的权限属性,即限制用户的什么行为。比如,读文件,写文件等。
所以,权限 = 角色+目标权限属性
• 角色分为:拥有者(u),所属组(g)和other(o)。
将角色做这样精细化的分类,就是为了能够更加精细化地权限管理。
• 目标权限属性:
在Linux系统中:一切皆文件!而对于文件来说,无非就是读权限,写权限和执行权限
如图为指令:ll 所展示的code.c文件的文件类型,角色和目标权限属性等信息。
• r :读权限
• w:写权限
• x:执行权限
• other并没有在上图中标出,因为除了拥有者和所属组之外的就是other。
• 如上图所示,权限每三个一组,从左到右依次对应拥有者,所属组和other的相应权限。
rw- 代表root用户可以对code.c文件读和写,r--代表所属组root可以对code.c文件只读,other与所属组权限一样。
3.1、linux系统用户切换
我们知道Linux系统的用户分为超级用户(root)和普通用户。那我们怎样在这两种角色之间相互切换呢?这里我再向大家介绍一个指令:su
💦超级用户 -> 普通用户:
指令:su 普通用户名
💦普通用户 -> 超级用户 :
步骤一:输入指令: su
步骤二:输入root密码,注意密码不回显。
3.2、提权——sudo指令
超级用户和普通用户的权限也有很大的区别。对于root用户,几乎不受任何权限的约束,但对于普通用户来说就不是这样了。这就使得普通用户在一些场景中因为受权限的约束而无法完成相应的操作,而我们切换root用户需要root密码,如果我们不知道root密码,那该怎么跨越权限完成相应操作呢?
我们可以同sudo指令对普通用户进行短暂地提权,最常见的场景就是:sudo提权完成拷贝,删除等操作。
💦可视化测试:
我们先切换到根目录,指令: cd / ,然后在根目录下创建文件:my.txt,这时由于普通用户权限低,就会创建失败。
我们用sudo来提权,先输入指令: sudo touch my.txt ,然后输入普通用户的密码,就可以完成相应的操作,但是需要注意一点:如果普通用户不在Linux系统的白名单中,sudo也无法完成操作,这里如何添加普通用户到白名单中,后面学了vim后会做详细的讲解。
二、权限的修改
1、文件的权限
上面已经讲了,文件有读,写和执行权限,那我们怎样修改这些权限呢?首先创建一个文件:
拥有者和所属组均为user1(普通用户),权限均为可读可写,other仅有读权限。
1.1、chmod指令
• 修改拥有者权限:
指令:chmod u+x test.txt
指令:chmod u-rw test.txt
指令:chmod u+rw test.txt
• 修改所属组权限(与上面相同):
指令:chmod g+x test.txt
指令:chmod g-rw test.txt
指令:chmod g+rw test.txt
• 修改other权限:
指令:chmod o+wx test.txt
指令:chmod o-rwx test.txt
指令:chmod o+r test.txt
• chmod指令支持逗号
指令:chmod u-x, g-x, o+rw test.txt
1.2、权限测试
如图拥有者和所属组有读写权限:
💦测试一:假设另外有一个user2普通用户,能不能修改test.txt文件的权限?
指令: chmod u-rw test.txt
修改权限失败,即用户只能修改自己的文件权限
💦测试二:没有权限,访问文件会怎么样?
指令:cat test.txt
没有权限,系统拒绝我们访问!!
💦测试三:确定权限信息时,系统先确定用户为拥有者,所属组还是other?
我们先将拥有者的所有权限取消,然后对文件test.txt读或者写,看系统是否拒绝我们访问
指令:cat test.txt
当我们将拥有者的所有权限取消,对文件test.txt进行读操作时,系统拒绝我们访问,说明:在Centos系统下,用户角色只确定一次,顺序为:拥有者,所属组,other
💦测试四:root用户的权限
我们先用指令:su ,切换到root用户,然后用指令:cat test.txt ,读文件。
root为other,虽然other没有任何权限,但是root用户任然能够读文件。即root用户不受权限约束。
注意:文件有可执行权限不等于该文件可执行,还需要文件具有可执行的其他属性。
2、目录的权限
首先我们用普通用户user1创建一个目录,指令:mkdir mydir
• d--代表mydir为目录文件,
• 拥有者(user1)权限位--rwx,所属组(user1)权限位--rwx,other权限位--r-x
修改目录不同角色的权限与文件一致,chmod指令即可。
1、r权限对于目录意味着什么?
我们先用指令:chmod u-r mydir,取消拥有者的 r 权限,然后用指令:cd mydir,切换到mydir目录,再用指令:ll ,查看目录详情。
当目录 r 权限被取消,无法查看目录中的内容,即无法读目录。
2、w权限对于目录意味着什么?
先用指令:chmod u-w mydir,取消mydir目录的 w 权限,然后用指令:cd mydir,切换到mydir目录,再用指令:touch dir.txt,在mydir目录下创建文件。
当目录的 w 权限被取消,无法在目录下再创建目录(文件),即无法向目录写入内容。
我们再看一个现象:当文件的所有权限被取消后,我们却能够删除文件,这看似有点矛盾,明明什么权限都没有,却把文件删掉了。其实是因为,删除文件与文件本身没关系,只与文件所处的目录的 w 权限有关。
当我们关闭文件所处目录的 w 权限,再删除文件就会有权限问题;
3、x权限对于目录意味着什么?
先用指令:chmod u-x mydir,取消mydir目录的 x 权限,然后用指令:cd mydir,切换到mydir目录。
当目录的 x 权限被取消,无法进入目录。
在创建mydir目录时,默认rwx权限都有。
3、修改角色
文件=角色+目标权限属性,上面我们讲了如何修改不同角色对应的权限,那么我们当然也可以通过修改角色来修改权限。
3.1 指令chown
💦可视化测试:
指令:chown root mydir
但是我们发现,操作不被允许,即我们无法将文件给别人,当我们想要给别人,就必须要高权限。接下来我们切换到root账号(指令:su)或者用sudo 指令进行提权。
在root账号下,我们成功将mydir目录的拥有者改为了root用户
指令:chown user2:user2 test.c
3.2 指令chgrp
chown指令最为常用,而chgrp指令只能修改所属组。
指令:chgrp root test.c
4、缺省权限
对于权限位:rwx,可对应二进制111,转化为八进制为7;以此类推,rw- 即为八进制6;r-- 即为八进制4...。
所以,还可以通过下面的方式修改文件和目录的权限
指令: chmod 777 test.txt
指令:chmod 0 test.txt
指令: chmod 111 mydir
当我们创建一个新的文件时
• 普通文件:
默认拥有者权限位为 rw-,所属组和other权限位为 r--。 即普通文件的缺省权限
• 目录文件:
默认拥有者权限位为 rwx ,所属组和other权限位为 r-x。 即目录文件的缺省权限
对于普通文件来说,起始权限为666,默认不可执行;对目录文件来说,起始权限为777,默认携带x权限。但如上图所示,普通文件起始权限不应该是 644 吗?目录文件起始权限不应该是755 吗?
这是因为一个叫权限掩码的东西存在导致的,最终显示出的权限=缺省权限按位与权限掩码取反,即最终权限=缺省权限&(~权限掩码)。怎么查看权限掩码,还涉及一个指令:umask
指令:umask
第一位我们不需要管,后三位022即root用户的权限掩码,对应二进制位为:000 010 010
5、共享文件
当用户之间要进行文件级别的协作,就需要共享文件。因为,如果将要协作的文件放在私人的目录下面,由于受权限的约束,对于其他要协作的用户就非常不方便,同时,共享文件还能减少资源的浪费等等。我们一般情况下都是将共享文件放在根目录下,这也需要高权限,可以切换到root用户或者用sudo提权。
我们在根目录下建立一个temp_backup目录文件并添加所有的权限;
如果感兴趣,大家可以上网查看其他一些目录文件,接下来我们用普通用户user1和user2来对共享文件temp_backup进行操作。
user1 用户在temp_backup目录文件下创建文件:
指令:touch data.txt
user2 用户读temp_backup目录文件下的data.txt文件:
指令:cat data.txt
正常读,没有问题。
但是,需要注意一点,由于temp_backup目录 other的 w 权限未取消,则任何人都可以删除目录下的文件。所以,引入了粘滞位(t),也是一个权限位,防止非文件的拥有者删除文件。给共享目录文件的other添加粘滞位后,虽然所有的用户都可以在共享文件中创建文件,但是不能删除其他人的文件。
当我们切换到user2用户,可以删除user1 创建的文件data.txt
💦添加粘滞位(t)
指令:chmod o+t temp_backup
此时,user1删除user2创建的my.txt文件就会被拒绝:
本次的分享到此结束,感谢大家的阅读!!!