hello~ 很高兴见到大家! 这次带来的是C++中关于Linux权限这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢?
个 人 主 页: 默|笙
一、权限的概念
1. 什么叫做权限?
权限就是是否允许你去做某些事的范围和资格,在Linux里面就是是否能够查看资源,能否修改资源,能否执行资源。
2. 为什么要有权限?
- Linux是多用户操作系统,这也就意味着会有多人登录Linux进行访问,如果不设置权限,那么任何一个人都能够查看,修改,删除文件。这显然不是我们想要的,因为它极度不安全,所以我们引入权限:不同的用户拥有不同的权限,即可以访问的资源的范围,比如root用户和普通用户。
- 权限本质就是为了能够更好的用户管理。
3. 权限 = 用户 + 文件属性
- 权限是用来针对特定群体的,也就是依附于人的。比如root和普通用户。
- 再就是文件(Linux下一切皆文件)属性,文件的属性有三种:可读(r),可写(w),可执行(x)。比如只有这个文件的属性是可读的才能够查看。接下来会细讲。
二、Linux用户和角色
1. Linux用户
- root(超级管理员):它不受权限的约束,是Linux里面的特权阶级。且能修改系统配置、安装软件、管理所有用户。
- 普通用户:受到权限的约束,只能操作自己的家目录和授权文件。且不能安装软件,修改系统配置。
1.1 指令su和su -
su
格式:su 账户名称
作用:切换账号,它只切换用户身份,不会切换工作环境。没有完全变成目标用户,只是能用一下权限。
- su命令是用来切换用户的:现在有超级管理员root和普通账户mosheng,可以用su命令从root直接切换到普通用户比如mosheng,但如果从普通用户mosheng切换到root用户的话,是需要输入root账户的密码的,从普通用户切换到另一个普通用户也是需要密码的。
- 总结:root切换到其他账户是不需要密码的,毕竟它不受到权限的约束,而普通用户到root和普通用户之间的切换是需要密码的。
su -(指令中间有一个空格)
格式:su - 账户名称
作用:切换用户,让用户以重新登录的方式进行切换。完全变成目标用户。
- 用法跟su一样,su和su - 后面什么都不加默认是要切换到root账户。
- 一般情况下用su - 进行用户的切换。
- su和su - 的不同:假如你是一个公司的职员,有自己的办公室和工作证,还有个同事小李,其中su就是将你和员工小李的工作证交换,你变成了小李,拥有了小李的权限,但你仍然在自己的办公室里面;而su - 则是工作证和办公室都交换,你完全变成了小李。这里的办公室对应的就是家目录和工作环境,工作证就是用户身份和权限。
1.2 指令sudo
格式: sudo 命令
作用:对普通用户进行短暂提权,能够暂时拥有root的权限,且不用输入root密码,但需要输入自己的。
- 普通用户默认是用不了sudo进行提权的,需要root事先在白名单/etc/sudoers文件里面加入目标用户。
2. Linux角色
- 角色分为三种:拥有者(owner)角色,所属组(group)角色和其他(other)角色,如果某一个用户不是前两种角色那么就是other角色。
- owner角色:文件或目录的创建者,拥有者。
- group角色:文件所属的用户组。是对文件权限进行组级别的权限管理。
- other角色:既不是owner角色也不是group角色的其他所有角色。
- 具体的会和文件权限属性一起讲。
三、文件权限属性
- 文件权限属性分为r(可读),w(可写)和x(可执行)。
- 我们创建一个目录或文件,然后用ll查看,会发现:
- 前面有一大串-和r,w,x组成的字符串,第一个代表的是文件类型,后面每三个为一组,代表的分别是owner、group、other用户对这个文件或目录所拥有的权限,owner角色拥有可读和可写权限,group角色和other角色只拥有可读权限。
关于类型:
- -:普通文件
- d:目录
- l:链接文件
- p:管道文件
- c:字符文件
- b:块设备文件
- 后面两个root分别代表的是文件的owner和group。至于没有other的原因是因为只要一个用户它既不是owner也不是group里的就是other。
- owner角色:拥有对此文件的最高控制权,即能够改变该文件的的属性(改变r、w、x),但他不能够改变文件的所属权(把文件owner改成其他人),只有root用户才有这个权力。
- group角色:组内的所有用户都拥有相同的文件权限,这便于团队的沟通合作。一个文件只能属于一个组,但一个用户可以属于多个组。
- 用户访问文件的时候,会确定当前用户相对于目前文件的角色,这个权限只会匹配一次,你只可能是三个角色里面的其中一个。
r、w、x
- 关于r、w、x,其中一个文件是否可以执行不光要看是否有x,还要看这个文件它本身是否可以执行。有x只是不会拦着你去执行这个文件,但文件是否能够执行还是得看文件本身。
- 关于目录的内容,目前可以理解为存储的是文件和子目录的属性。所以当我们没有r权限时,用ll是看不了目录下文件和子目录的属性。也就是说对于目录,r 给予的权限是列出子目录内容。w给予的权限是可否添加、删除、重命名文件和子目录。
- 这也意味着,即便你没某个文件的任何权限,但是如果你拥有这个文件所在目录的w权限的话,你是能够将这个文件直接删除掉的。
- 对于目录x给予的权限是可否可以访问,如果没有x权限那么用户是进不到这个目录里面的。
四、权限的指令操作
1. chmod
格式:chmod [参数] 权限 文件名
作用:修改文件属性
- 目前是普通用户mosheng登录,因为对于root设置和修改权限对其无用。
- 用户符号:u是owner,g是group,o是other,a是所有用户。
- 取消某个权限用u/g/o/a - r/w/x,添加权限用u/g/o/a + r/w/x。
- 可以看到,该文件的拥有者是mosheng,owner初始权限是rw-。如果取消r权限,那么我们如法用cat查看文件内容,但可以进行写入;如果取消w权限,那么我们就不能对文件内容进行修改了。
- 我们通常使用三位八进制数来表示权限,分别对应owner、group、other的权限。即可以将每组文件属性当二进制来看,有此权限就是1,没有就是0,然后转化成10进制。比如rwx就是111,转化成10进制就是7。
- 这就允许我们通过三位八进制数来改变文件权限属性:
2. chown和chgrp
格式:chown/chgrp [参数] 用户名 文件名
作用:chown是改变目标文件的owner(拥有者),chgrp是改变目标文件的group(所属组)。
- 对于chown:除了root能有权限改变文件的拥有者,其他用户即便是该文件的拥有者也没有权限改变owner。
- 对于chgrp:若文件的拥有者属于多个组,那么文件的拥有者可以改变组,但是也只能改变到自己属于的某个组。而root就没有这个限制。
3. umask
- 为什么我们新建的目录和新建的文件的权限属性是我们看到的那个样子?
- 目录是rwxrwxr-x,文件是rw-rw-r–,有两个原因:第一个是目录的初始权限属性是777,而文件是666。另一个原因则是权限掩码的存在,它能够帮助我们对权限进行更精确的控制。最终权限 = 初始权限 - 权限掩码。利用umask指令能够查看权限掩码。
- 权限掩码是2,777 - 2 = 775,对应就是rwxrwxr-x,666 - 2 = 664,对应就是rw-rw-r–。
- 我们能够通过umask修改权限掩码来修改初始文件权限。
五、粘滞位
- 当一个目录被设置为粘滞位(chmod + t),那么其下的文件只能够由该目录的所有者、该文件的所有者和root删除。
- 这是为了在处理共享文件时,能够保护文件。我们如果想共享某个文件,一定不会是在某个用户的家目录下,而是会在系统级别路径下,比如/share(由root建立)。共享代表着share目录对于所有用户都是有w权限的,即可以往这个目录里添加,重命名,删除文件。这也就意味着即便我添加的文件是—属性,任何人也都可以删除这个文件,因为share目录w的权限对所有人开放。
- 而我们给share目录添加了粘滞位之后,就可以避免这种情况的发生。
今天的分享就到此结束啦,如果对读者朋友们有所帮助的话,可否留下宝贵的三连呢~~
让我们共同努力, 一起走下去!