【Linux】权限管理


权限管理

shell命令运行原理

输入指令的黑框就是命令行,输入的命令就叫做指令。使用which可以查看命令所在的目录,实际上命令就是一项可执行文件。

在这里插入图片描述

一般操作系统,包括 Linux,指的是内核(kernel)和外壳程序。以 Windows 为例,Windows 的外壳就是Windows 的图形界面,而 Linux 的外壳即 shell,内核就是 Linux内核。

如果直接让用户与操作系统内核沟通,那么用户就必须熟悉操作系统,这样学习成本太高也不安全。所以 Linux 设立 shell 作为媒介中间人给操作系统传达用户的指令。

shell 的定义就是命令行解释器,用于将使用者的命令翻译给操作系统核心处理,再将核心的处理结果翻译给用户。

对比 Windows,我们也不是直接和内核沟通,而是通过图形界面完成点击等一系列动作去操作系统。

如果说 shell 是命令行解释器是所有外壳程序的统称,bash 就是 Linux 下的具体一款命令行解释器,bash 是最常用的一种 shell,是 Linux 下默认的 shell。

如果将 shell 比喻成程序员是一种职业,bash 就是在座的你我一个具体的人。

 

1. 权限的定义

Linux 中默认存在两类用户,一类叫 root 即超级管理员,具有非常高的权限,其他都是普通用户,具有一般权限。可以使用su进行用户切换:

$ su - # 切换成root

root用户的权限非常高,所以两类用户的权限界限必须明确。

在系统管理中,权限是指 特定的用户 是否对 特定的资源 具有 特定的权力

不是VIP就不能看会员电影,不是职员就不能进入办公室,权限是针对某个事物的一项特定的属性来划分不同的人具有不同的权限。

通常,针对某个特定资源分配给用户不同的权限,系统则自动地强制执行这些权限。对于文件这项系统资源来说,人就对应着文件访问者,事物属性对应着文件类型及访问权限。

1.1 文件访问者

文件访问者分为三种:拥有者(owner),所属组(group),其他人(others)。

角色解释
拥有者即创建文件的用户,这不难理解
所属组拥有者所在的组,如果文件访问者之分拥有者和其他人的话,不便于多用户协作
其他人除了拥有者和所属组之外的都是其他人

上图用红框框出的第一列是文件的拥有者,第二列是所属组。由于用户较少所以自成一组。

拥有者、所属组和其他,都是针对文件访问划分出的角色,而 root 和普通用户指的是具体的用户人。

后面一列是文件的大小,再后面一列是文件的最近修改时间。

2. 权限的设计

2.2 文件类型和访问权限

可以清晰地看出,前面的一整块共有10列,共分成4组,第一列自成一组,之后每三列成一组。

文件属性的第一列,用以区分文件类型,一般有两种:-代表普通文件,d代表目录。Linux 中不以文件后缀作为区分文件的方式,只以属性的第一列区分。

c代表字符设备文件,b块设备文件,p管道文件,l链接文件。这些目前仅作了解。

2.3 权限的表示

文件属性的剩下九列,三列一组总共三组,分别代表的是文件拥有者、所属组和其他人对文件的权限。

文件自身具有的权限属性分为三种,读r,写w,执行x

字符表示法

字符表示法就是上图中对应的表示方式。

  • 第一组,代表拥有者对该文件的权限。三列分别代表读r、写w、执行x,具有权限就用字符表示,不具有则用-表示。顺序不能乱。
  • 以此类推,后面两组分别是所属组和其他人的权限,表示方法相同。
表示说明表示说明
r--只读-w-只写
--x执行rw-可读可写
r-x可读可执行-wx可写可执行
rwx可读可写可执行---无任何权限
8进制表示法

既然每一个权限位所表示的状态只有两种,要么具有要么不具有,这样就可以用二进制表示(具有用1表示,不具有用0表示)。转化成八进制就是从0到7共八个数字,所以用八进制也可以表示。

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

上述两种表示方法,都会在之后的权限设置的命令中使用到。

 

3. 权限的设置

修改文件的权限分为两种,一是修改文件的读写执行属性,二是修改文件的拥有者和所属组。先看第一种:

3.1 chmod

$ chmod u+r fileName

chmod可以针对三种访问者修改文件的读写执行权限。具体如下:

# u表示拥有者user
$ chmod u+r file.txt # 给拥有者添加读权限
$ chmod g-w file.txt # 给所属组取消写权限
$ chmod o-x file.txt # 给其他人取消执行权限

u,g,o分别表示三种访问者,+,-分别表示添加和取消,r,w,x分别表示读写执行。之后再带上文件名即可。

$ chmod u+r file.txt     # 修改单个访问者的单个权限
$ chmod u-r+wx file.txt  # 修改单个访问者的多个权限
$ chmod u+r,g-x file.txt # 修改多个访问者的多个权限
$ chmod u-r file.txt test.c # 连续操作多个文件

3.2 chown & chgrp

chown 可用于修改文件的拥有者,chgrp 则是用于修改文件的所属组。

$ chown usrname fileName
$ chgrp usrname fileName
$ chown root file.txt
chown: changing ownership of ‘file.txt’: Operation not permitted
# 可以看出,文件是不能随便更改所有者给别的用户的,即使是文件所有者也不行
$ chgrp root file.txt
-rwxrwx--- 1 yyx  root   20 Jan 29 07:15 file.txt
# 可以将文件所属组设置为成员,达到让其查看管理的目的
$ sudo chown root:root file.txt
# 这样可以将文件的拥有者和所属组一起修改

3.3 目录的权限

目录的读写执行分别又代表什么意义呢?与普通文件有什么不同呢?

d-wx------ 2 lzr lzr 4096 Jan 29 08:06 code
$ ls code # 不具备读权限,无法查看目录下内容
ls: cannot open directory code: Permission denied

dr-x------ 2 lzr lzr 4096 Jan 29 08:06 code
$ touch code/file.txt # 不具备写权限,无法创建或删除文件
touch: cannot touch ‘code/file.txt’: Permission denied

drw------- 2 lzr lzr 4096 Jan 29 08:06 code
$ cd code # 不具备执行权限,无法进入目录
-bash: cd: code: Permission denied
权限解释
r读权限能够查看目录下的内容
w写权限能够下目录下创建或删除文件
x执行权限能够进入目录
粘滞位

一般目录对于other用户是不具有写权限的,也就意味着other用户无法在他人的目录下创建或删除文件。

如果我们要建立一个共享目录,让所有人都可以往里面放东西,就要对这个共享目录给所有人加上写权限,就会带来这样的安全问题:

根据目录的权限规定,只要用户对目录具有写入权限,该用户就能删除目录下的任意文件。

如果不想让非目录所有者用户具有删除目录下文件的权限,针对这种需求,Linux 下可以使用粘滞位解决。

$ chmod o+t dirName

注意,粘滞位是对目录进行修改的,对目录下的所有文件生效。
在这里插入图片描述

t相当于权限缩小版的w,致使 other 无法删除其他用户的文件。

所以当一个目录被设置为粘滞位时,则该目录下的文件只能由 root 超级管理员,目录所有者,文件的所有者,三者可以删除。

3.4 默认权限的设置

上图分别是 root 和 普通用户 创建的目录和普通文件的默认权限,稍加分析可得:

  • 普通用户所创的普通文件和目录都只限制了 other 的写入权限,普通文件本身不具有执行权限。
  • root 在此基础上还限制了所属组的写入权限。

普通用户的普通文件权限可表示为0664,目录可表示为0775。下面将介绍为什么默认权限会是这个样子。

文件掩码 umask

实际上,文件或目录在其新建之初的默认权限(起始权限)用八进制数位表示分别为0666和0777。起始权限还要受到权限掩码 umask 的影响,才会变成默认权限值。

换句话说,文件的默认权限是可以更改的,更改文件掩码 umask 的值即可。umask 可以这样设置和查看:

$ umask # 查看
0002
$ umask 0002 # 设置

将起始权限值“减去”文件掩码值后,所得结果就是文件生成的默认权限值。“减去”掩码的操作是这样的:将文件权限值都用二进制表示,起始权限值和文件掩码值每位一一对应,倘若文件掩码的某个数位为1,那么该位的结果必须为0。

  110 110 110   # 起始权限
- 000 000 010   # 文件掩码
----------------
  110 110 100   # 默认权限
  
  111 111 111   # 起始权限
- 000 000 010   # 文件掩码
----------------
  111 111 101   # 默认权限

这样的“减法”运算,就可以将文件掩码取反后再和起始权限相与即可,即mask&(~mask)。本质也就是过滤掉文件掩码中的1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuhyOvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值