Linux权限理解


前言

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

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

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

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

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

image-20221015145917993


1.shell简介

shell是用户和Linux内核之间的一层代理,解释用户输入的命令,传递给内核。

shell是一种脚本语言(解释性语言)。

1.1编译型语言和脚本型语言

任何代码运行最终都需要被翻译成二进制的形式在计算机中执行。C/C++、Go语言等语言,需要在程序运行之前将代码编译成二进制形式,生成可执行文件,用户执行的是可执行文件,看不到源码。

这个过程叫编译,这类语言叫编译型语言,完成编译过程的软件叫编译器

有的语言(例如: Shell、JavaScript、Python、PHP等)需要一边执行一边翻译,不会产生任何可执行文件,用户需要拿到源码才能运行程序。程序运行后会即时翻译,翻译一部分执行一部分,并不用等所有代码翻译完。

这个过程叫解释,这类语言叫解释型语言脚本语言,完成解释过程的软件叫解释器


2.Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情

超级用户的命令提示符是“#”,普通用户的命令提示符是“$ "

image-20221015150523830

切换用户

序号 命令 作用 说明
01 su - 用户名 切换用户,并且切换目录 - 可以切换到用户家目录,否则保持位置不变
02 exit 退出当前登录账户
  • su 不接用户名,可以切换到 root,但是不推荐使用,因为不安全

如何知道自己目前是什么用户呢?

查看用户信息

序号 命令 作用
01 id [用户名] 查看用户 UID 和 GID 信息
02 who 查看当前所有登录的用户列表
03 whoami 查看当前登录用户的账户名

超级用户

  • Linux 系统中的 root 账号通常 用于系统的维护和管理,对操作系统的所有资源 具有所有访问权限
  • 在大多数版本的 Linux 中,都不推荐 直接使用 root 账号登录系统
  • 在 Linux 安装的过程中,系统会自动创建一个用户账号,而这个默认的用户就称为“标准用户”

sudo(一种短暂的提权方式)

  • susubstitute user 的缩写,表示 使用另一个用户的身份
  • sudo 命令用来以其他身份来执行命令,预设的身份为 root
  • 用户使用 sudo 时,必须先输入密码,之后有 5 -10分钟左右的有效期限,超过期限则必须重新输入密码

2.1基本概念

  • 用户 是 Linux 系统工作中重要的一环,用户管理包括 用户 管理
  • 在 Linux 系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限
  • 在 Linux 中,可以指定 每一个用户 针对 不同的文件或者目录不同权限
  • 文件/目录 的权限包括:
序号 权限 英文 缩写 数字代号
01 read r 4
02 write w 2
03 执行 excute x 1

2.2文件访问者的分类

文件和文件目录的所有者: u—User(比如说自己)
文件和文件目录的所有者所在的组的用户: g—Group(跟你同一个国家)
其它用户: o—Others (外国人)

  • 为了方便用户管理,提出了 的概念

image-20221015153058648

2.3文件权限值的表示方法

  • 在实际应用中,可以预先针对 设置好权限,然后 将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限

image-20221015151507958

image-20221015151905721

d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件

权限 权限作用
读(r/4) Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2) Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行(x/1) execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

image-20221016150415205

权限符号 八进制 二进制
r 4 100
w 2 010
x 1 001
rw 6 110
rx 5 101
wx 3 011
rwx 7 111
0 000

2.4文件访问权限的相关设置方法

2.4.1chmod 简单使用(重要)

  • chmod 可以修改 用户/组文件/目录 的权限
  • 命令格式如下:
 复制代码chmod +/-rwx 文件名|目录名

常用选项:

R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限

修改文件权限

序号 命令 作用
01 chown 修改拥有者
02 chgrp 修改组
03 chmod 修改权限
  • 命令格式如下:
# 修改文件|目录的拥有者chown 用户名 文件名|目录名# 递归修改文件|目录的组chgrp -R 组名 文件名|目录名# 递归修改文件权限chmod -R 755 文件名|目录名
  • chmod 在设置权限时,可以简单地使用三个数字分别对应 拥有者其他 用户的权限
# 直接修改文件|目录的 读|写|执行 权限,但是不能精确到 拥有者|组|其他chmod +/-rwx 文件名|目录名

004_文件权限示意图

  • 常见数字组合有(常见数字组合有(u表示用户/g表示组/o表示其他):
    • 777 ===> u=rwx,g=rwx,o=rwx
    • 755 ===> u=rwx,g=rx,o=rx
    • 644 ===> u=rw,g=r,o=r

image-20221016151425283


3.目录的权限

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中

可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.
这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?

为了解决这个不科学的问题, Linux引入了粘滞位的概念

3.1粘滞位

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除


4.用户管理

提示:创建用户 / 删除用户 / 修改其他用户密码 的终端命令都需要通过 sudo 执行

4.1 创建用户/设置密码/删除用户

序号 命令 作用 说明
01 useradd -m -g 组 新建用户名 添加新用户 -m 自动建立用户家目录-g 指定用户所在的组,否则会建立一个和同名的组
02 passwd 用户名 设置用户密码 如果是普通用户,直接用 passwd 可以修改自己的账户密码
03 userdel -r 用户名 删除用户 -r 选项会自动删除用户家目录
04 cat /etc/passwd \ grep 用户名 确认用户信息 新建用户后,用户信息会保存在 /etc/passwd 文件中

提示:

  • 创建用户时,如果忘记添加 -m 选项指定新用户的家目录 —— 最简单的方法就是删除用户,重新创建
  • 创建用户时,默认会创建一个和用户名同名的组名
  • 用户信息保存在 /etc/passwd 文件中

4.umask问题

在Linux规定中

目录的起始权限是777 rwxrwxrwx

普通文件的起始权限是666rw-rw-rw-

但实际上我们平时看到的权限并非是上面的起始权限

image-20221018195550654

因为系统默认会配置好umask权限掩码:凡是在umask中出现的权限,都必须在起始权限中去掉

image-20221018195938315

比如我的系统默认是0002,而最终权限=起始权限&(~umask)

image-20221018200757127


5.权限的总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这
    个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读
    权限 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

猜你喜欢

转载自blog.csdn.net/dongming8886/article/details/127395660
今日推荐