Linux 权限

目录

一、 从问题开始

问题一: 什么叫shell?

问题二: 为什么不能直接使用kernel呢?

问题三: shell 与bash 有什么不同吗? 

 二、 Linux权限

0x01 Linux用户

0x02 切换用户命令  

0x03 sudo命令

0x04 权限的相关概念

0x05 chmod

0x06 chown

0x07 chgrp

0x08 文件权限值的8进制数值表示方法  

0x09 对于目录的读写执行权限  

0x10 other删除文件是否因为写权限

0x11 权限掩码  


一、 从问题开始

问题一: 什么叫shell?

Linux严格意义上来说是一个操作系统,可以称之为"核心(kernel)",而我们一般的用户,不能直接使用这个核心,此时shell就充当一个外壳程序来与这个核心进行沟通。

 从广义上来说: Linux发行版 = Linux内核 + 外壳程序
 从狭义上来说: Linux = Linux 内核
 而我们更多的是从广义上来说

问题二: 为什么不能直接使用kernel呢?

①用户直接使用kernel的成本很高,如果某个命令执行错误,代价还是挺大的
②其次shell也可以用来对操作系统的保护,让内核不会暴露给用户,以免造成不合理的操作所以从技术角度,我们也可以把shell定义为命令行解释器,将用户的命令翻译给核心进行处理,同时将核心的处理结果翻译给使用者

问题三: shell 与bash 有什么不同吗? 

shell是所有解释器的统称,而bash可以说是其中的一款解释器,就好比程序员和你之间的关系,你是程序员之一,而我们使用的Centos7.6的命令行解释器就是bash
当你每次登录的时候,那么系统就会给你创建一个对应的bash这样的进程给你进行命令行操作

 二、 Linux权限

0x01 Linux用户

Linux有俩种用户:​
①超级用户: 可以不受系统限制,在Linux下做任何事情,命令提示符是"#"​
②普通用户: 在Linux下做有限的事情,命令提示符是"$"

0x02 切换用户命令  

 命令:su - [用户名]
功能:切换用户
小提示:
①要从root用户切换到普通用户user,则使用 su- user.要从普通用户user切换到root用户则使用 su -root(root可以省略),此时系统会提示输入root用户的口令,并且如果用su -[用户名],此时root切换到普通用户是不需要输入密码的
②但是当从root用户切换到原来的普通用户不建议使用su - [用户名],而是使用快捷方式exit或者ctrl + D,因为每切换一次用户,系统就会创建一次bash进程
③并且也需要注意的是root用户的密码和普通用户的密码最好是不同的,因为如果相同,第一点,是俩个用户密码的界限不清晰,其次也不安全
④如果从用户切换到用户当然也是需要输入密码的

0x03 sudo命令

命令: sudo
功能: 临时权限提升,执行后续命令,以root身份执行
提示:输入的还是普通用户的密码

此时的文件中并没有之前所创建的root.txt,因为还没有添加信任关系,这个问题留个小悬念,等学完vim的时候我们再学习,所以此时如果我们需要更高权限,可以先使用su -命令

0x04 权限的相关概念

通俗的讲,权限由文件访问者(人) 、文件类型和访问权限(事物属性)组成,比如某个视频的vip,特定的人才能观看,而对于视频文件的读写执行也需要一定的权限

 文件的访问者的分类:
 ①所有者:文件所属的用户
 ②所属组:比如一个部门俩个组进行竞争,那么我们只想一个组内共享一个文件,那这个文件属于这个所属组       
 ③其他人: 我之外的就是其他人
与root 和普通用户又有什么区别呢?
拥有者、所属组、其他人 指的的是一种身份角色,而root和普通用户指的是具体的一个人,拥有者、所属组、其他人必须对应在一个具体的人身上,即对应root用户或者普通用户

 文件类型:
-: 普通文件(文本,跟中动静态库,可执行程序,源程序)
d:目录文件
c:字符设备文件(键盘与显示器)
b:块设备文件(磁盘,光驱等)
p:管道文件(通信)
l:链接文件(软连接)
提示:可以认为Linux下一切皆文件,Linux系统中,不以文件后缀作为区分文件类型的方式,但是像gcc,g++这些系统上的命令是要以后缀进行区分文件类型的

 文件权限值的表示方法:(第2-10位,表示文件所对应的属性)
权限的前三位:文件的所有者权限
权限的中间三位:文件的所属用户组的权限
权限的后三位:其他用户的权限
r: 是否具有读权限
w:是否具有写权限
x:是否具有可执行权限
提示:rwx三者顺序不可改变

0x05 chmod

功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名

①用户表示符+-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
②用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

对于普通文件没有读写执行操作会怎么样?

 从上图可知,对于普通文件的读写执行都是权限被拒绝

 对于超级用户root会有权限约束吗?

 超级用户可以无条件对其他拥有者的文件进行读写操作和读操作,但是不能进行执行操作,如果想要进行执行操作,那么可以对other加一个执行权限(此时root的身份是other)

0x06 chown

功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名

 也可以将拥有者和所属组同时更改 

0x07 chgrp

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组

0x08 文件权限值的8进制数值表示方法  

 可以用8进制修改权限:

0x09 对于目录的读写执行权限  

读权限: 代表是否能查看目录中的内容

 写权限: 代表在目录中是否能创建文件或目录

 可执行权限: 代表是否可以进入目录中(是否能更改当前的所在路径)

0x10 other删除文件是否因为写权限

如果目录本身对other具有写权限,other可以删除任何的目录下的文件
如果目录本身对other没有写权限,other不可以删除任何文件

那是否会有这样一种需求呢?  
other可以在特定的目录下创建文件,并写入,但是不想让任何其他人删除自己的文件

此时运用到的就是粘滞位
格式: chmod o+t dir
提示:只能对目录设置,一般是限制other权限的,对设置了粘滞位的目录,在该目录下,只能是文件的所有者或root或该目录的所有者可以删除,其他人不能删除
应用方向:多个人或者系统会有许多临时数据,所有的临时文件会放在系统的/tmp中,此时需要把所有的权限放开,但是指向让文件的拥有者自己删除自己的文件,不让其他other删除,此时应用到的就是粘滞位

0x11 权限掩码  

 为什么创建的文件和目录的权限都是这样的呢?

默认权限:
普通文件, 最开始的权限是666
目录文件,最开始的权限是777
从上图可知权限掩码是0002,即凡是在权限掩码中出现的,都应在最开始的权限中去掉
如: 666的二进制可以写为110 110 110,权限掩码0002的二进制是000 000 010
default = default & ~(mask) : 权限掩码取反与最开始的权限进行按位与

~(mask) : 111 111 101
最终按位与: 110 110 110
                 & 111 111  101
                -----------------------
                     110 110 100

即664,二进制为110 110 100
目录创建的权限也如上所示,结果为775

 那如何设置权限掩码呢?

 提示:设置的权限掩码只能在本次登录有效

 如上是本人对于Linux权限的一些学习,如有问题,还请评论区多多指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值