Linux:权限

作者 : admin 本文共2897个字,预计阅读时间需要8分钟 发布时间: 2024-06-9 共2人阅读

文章目录

  • shell命令以及运行原理
  • Linux下用户的分类
  • Linux权限管理
  • 文件权限值的表示方法
    • 字符表示方法
    • 8进制数值表示方法
  • 权限的修改
  • 权限掩码
  • 目录文件的权限
  • 关于权限的总结
  • 关于权限的总结

shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  1. 将使用者的命令翻译给核心(kernel)处理
  2. 同时,将核心的处理结果翻译给使用者

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

在Linux中:

[xxm@VM-12-11-centos ~]$     ----   bash命令行
xxm:用户名  
VM-12-11-centos:主机名
~:当前目录
$:命令行提示符(root用户为#)

我们输入的指令,本质上是是字符串,需要命令行解释器对我们的输入进行解释,然后将指令告诉操作系统,操作系统再反馈给命令行解释器,命令行解释器再将操作系统的反馈翻译给用户。

命令行解释器的作用:

  1. 进行命令行解释
  2. 保护操作系统,拦截用户的非法请求

命令行解释器包括:

  1. 命令行。bash, sh(统称为shell)等
  2. 图形化界面

Linux下用户的分类

分为两类:

  1. root:超级用户
  2. 普通用户

切换身份的指令为:su

语法:su [用户名]

从普通用户切换到root用户或其他普通用户需要提供相应的密码,而root切换到普通用户不需要密码。

如果普通用户想对一条命令进行短暂提权,可以使用 sudo 指令 :sudu command ,需要输入当前普通用户的密码,但是普通用户默认是没有颁发执行 sudo 的,因为操作系统不信任用户,除非将用户添加到系统的信任白名单(etc/sudoers)中。

Linux权限管理

Linux下权限是由两部分共同构成,一部分是访问者的身份,另一部分是文件对访问者的权限。

Linux下文件的访问者身份可分为三类:

  1. 文件和文件目录的所有者:u–user
  2. 文件和文件目录的所有者所在的组的用户:g–group
  3. 其他用户:o–others

而需要注意的是:Linux中root用户不受权限的限制!

Linux下文件的类型和访问权限属于文件的详细信息,可以用ls -l指令查看。
Linux:权限插图

  1. 文件类型
选项含义
普通文件
d目录文件
b块设备文件
p管道文件
c字符设备文件
  1. 基本权限

  2. 读:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

  3. 写:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

  4. 执行:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

文件权限值的表示方法

字符表示方法

Linux表示说明Linux表示说明
r–只读-w-只写
–x只执行rw-可读可写
-wx可写可执行r-x可读可执行
rwx可读可写可执行无权限

8进制数值表示方法

权限符号二进制八进制
r–1004
-w-0102
–x0011
rw-1106
r-x1015
-wx0113
rwx1117
0000

权限的修改

仅文件的拥有者和root用户可以修改。

  1. chmod [u/g/o/a] [+/-/=] [r/w/x] , (…可重复前面,进行多种身份的权限设置) [文件]

  2. chmod 664 [文件]

除了可以修改文件对各种身份的访问者的权限,还可以修改文件的拥有者、所属组。

  1. 修改拥有者:chown [用户] [文件]
  2. 修改所属组:chgrp [用户] [文件]
  3. 修改拥有者和所属组:chown [用户]:[用户] [文件]

权限掩码

我们在Linux下创建文件和目录,为什么普通文件的默认权限是664,目录文件是775呢?
Linux:权限插图(1)

其实,普通文件的默认权限是666,目录是777,但存在权限掩码(umask),凡是在umask中出现的权限,不会再最终文件权限中出现。

权限掩码的默认值是0002,第一个0表示八进制,后三位表示权限。

普通文件的默认权限是666,二进制表示就是110 110 110,权限掩码是000 000 010,由于再权限掩码中出现过的权限,不会在最终文件的权限中出现,所以普通文件的最终权限是110 110 100,也就是664。

目录文件的默认权限是777,二进制表示就是111 111 111,权限掩码是000 000 010,所以目录文件的最终权限是111 111 101,也就是775。

而需要注意的是,最终权限并不等于默认权限减权限掩码,请看示例:
Linux:权限插图(2)

我们先将umask的值改为0001,也就是000 000 001,而我们之后创建的目录权限为111 111 110,普通文件为110 110 110。普通用户的最终权限并不是两者相减。

最终权限的计算方法为:最终权限 = 起始权限 & (~ umask)

那么umask有什么意义呢?

通过修改umask的值,我们可以设置新创建的普通文件和目录的“默认最终权限”。

修改umask:umask 0xxx(八进制)

目录文件的权限

一个文件能否被删除,并不由文件本身决定,而是由其所处的目录决定。

如果用户拥有目录的写权限,则可以删除目录中的文件。

那么如果我们需要多人协作,共同在一个目录下工作,彼此之间可以给自己的文件设置权限来设置是否允许其他人读/写/执行,但是并不能设置是否允许其他人删除。因为如果想让别人不能删除自己的文件,就要限制目录文件对他的写权限,但是这么一来,他就无法在目录下创建、修改文件,为了解决这一问题,Linux下目录可以被设置为粘滞位。

设置粘滞位的方式与设置文件权限的操作相同,只不过将最后一位的-xt来代替。

[root@VM-12-11-centos lesson_5]# chmod +t /home/  # 加上粘滞位

而当一个目录被设置为粘滞位,则该目录下的文件只能由root用户或文件的所有者删除。

关于权限的总结

  1. 目录的可执行权限是表示你可否在目录下执行命令。
  2. 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目录, 即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
    为粘滞位,则该目录下的文件只能由root用户或文件的所有者删除。

关于权限的总结

  1. 目录的可执行权限是表示你可否在目录下执行命令。
  2. 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目录, 即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  3. 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
本站无任何商业行为
个人在线分享 » Linux:权限
E-->