Linux系统下的权限【详细介绍+指令演示】

Linux下的基本权限

引入

✍当谈到计算机操作系统时,Linux是一种强大的选择。它是一种开源的操作系统,可以自由使用和修改。Linux系统以其高度的可定制性和安全性而闻名,是许多网站、服务器和个人电脑的首选操作系统。为了更好地管理您的Linux系统,了解基本的权限是必不可少的。在本文中,我们将探讨Linux中的基本权限,包括文件和目录的访问权限,以及如何在Linux系统中管理和授予这些权限

1、shell命令及原理

Shell是一种命令解释器,它是操作系统与用户之间的接口!

Linux作为操作系统,我们称之为核心(Kernel),一般用户不能直接访问核心(Kernel)。而是通过Kernel的“外壳”程序,也就是所谓的shell,来与Kernel沟通;Shell的存在,完成了:

将使用者的命令翻译给核心(Kernel)处理

将核心的处理结果翻译给使用者

对于windows系统而言,我们操作windows不是直接操作windows内核,而是通过图形接口,点击图标,从而实现我们的操作,它们都有相同的运行模式,即是:

用户命令—>Shell:解析命令—>传递给操作系统(内核)—>操作系统反馈结果—>Shell:将结果解析给用户

因此,Shell的存在变相的保护了操作系统!

image-20230403214038706

2、Linux下的两类用户

在Linux系统中,一般可以分为两类用户:普通用户超级用户

超级用户:可以再linux系统下做任何事情,不受限制

普通用户:受Linux中权限约束的用户

在Linux系统中,为了保证系统的安全性和稳定性,普通用户只能访问自己的家目录和一些公共目录,不能访问系统的核心文件和目录。其命令提示符区别如下:

image-20230403214233025

其中涉及到的指令如下:

useradd

创建一个新用户(使用时可能需要sudo提权/root);

语法:useradd -[选项] [用户名]

adduser tmpuser       #创建名为tmpuser的用户

image-20230403214617192

passwd tmpuser        #为该用户设置密码

image-20230403214815006

userdel

删除一个用户(使用时可能需要sudo提权/root);

语法:userdel -[选项] [用户名]

userdel tmpuser

image-20230403215105931

su

切换用户(默认切换为root)

语法:su [用户名]

su root         #切换为超级用户(root可省略)
su userName     #切换为普通用户

image-20230403215423761

普通用户通过使用su,输入root密码后即可进入root用户,而从root用户切换回普通用户,通过输入su+用户名的方式可直接完成切换;

可以看到root超级用户权限非常大,因此我们一定要注重对root密码的保护!

exit       #可以从root用户退回到普通用户

image-20230404130754142

sudo

不切换用户,让普通用户短暂的提权,即短暂以root用户的身份执行命令

语法:sudo [命令]

注意:sudo提权必须是系统信任的用户。即需要用root用户将当前用户添加到/etc/sudoers中;若是非信任用户使用sudo提权,会提示:

XX is not in the sudoers file. This incident will be reported.

在我们学习了vim工具后,会详细介绍如何添加信任用户

3、Linux下的权限

3.1 理解权限

何为权限?例如在qq音乐app中,有普通用户和VIP用户,当我们使用它听歌时,有些歌每个人都能听,而有些歌只有VIP有权限听,VIP赋予我们能听VIP歌曲的权限

所谓权限,即某事情是否被允许被谁做

在Linux中,权限一般指文件权限

文件权限 = ①角色 + ②文件属性

①角色

Linux中共有三种角色:拥有者(owner)所属组(grouper)其它人(other)

  1. 拥有者(owner): 文件或目录的创建者是它的拥有者。拥有者有权对文件或目录进行读、写、执行等操作,也可以授权给其他用户或组。拥有者的用户ID在文件或目录的属性中有明确的标识。
  2. 所属组(group): 在Linux系统中,每个用户都属于至少一个组。文件或目录的所属组是由其创建者指定的。所有属于该组的用户都有权对文件或目录进行读、写、执行等操作,而其他用户则可能没有该权限。
  3. 其它人(other): 其它人指的是系统中除了拥有者和所属组以外的所有用户。它们对于文件或目录的操作权限是由文件或目录的权限设置决定的。

②文件属性

Linux中共有四种文件属性:

  1. r(read,读)对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限;
  2. w(write,写)对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限;
  3. e(execute,执行)对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限;
  4. -表示不具有该项权限

3.2 Linux下的文件类型

Windows中以文件的后缀来区分文件类型:

Linux和Window中文件类型差别很大,它不是以文件的后缀来区分文件类型。
需要注意的是,Linux中也可以使用后缀区分文件类型,但仅仅是给用户做一个提示符号来使用,后缀本质其实就是文件名的一部分!

通过ll指令显示文件的众多属性,其中第一列字符即代表文件类型:

image-20230404133142422

常见的Linux中的文件类型如下:

-:普通文件(源代码、库文件、可执行程序、文档压缩包等等)

d:目录文件

c:字符设备文件(比如:键盘、显示器)

b:块设备文件(磁盘)

l:链接文件(快捷方式本质就是链接文件)

p:管道文件()

s:socet文件(基本不会见到)

3.3 角色权限

通过ll指令显示的众多属性列中的第一列,一共有十个字符除去第一个字符还有九个字符,这九个字符三个三个为一组分别代表拥有者、所属组、其他人对于该文件的权限

3.4 操作权限

01、chomd

设置文件的访问权限,只有文件的拥有者和root才可以改变文件的权限

格式:chmod [参数] 权限 文件名

方式1:

使用chmod 角色标识符 +/-/=权限字符

角色标识符:

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

示例如下:

①修改他人权限(在root下)

image-20230404140133902

chmod o+wx test.txt

image-20230404140227956

②修改个人权限

chmod u-rw test.txt

image-20230404140542173

此时我们修改了个人权限,我们不能读取、写入、执行该文件:

cat test.txt

image-20230404140722548

此时我们有个问题,虽然作为拥有者我们没有这个权限了,但我们同时是所属组,所属组有这个权限为何还不能读取该文件呢?

那是因为:在Linux系统中,匹配使用者会从左边拥有者的身份开始匹配,如果匹配上就不会再匹配之后的身份了

③修改所属组权限

chmod g+x test.txt

image-20230404140415352

方式2:

image-20230404144927088

每个权限位只有两种情况:具有和不具有该权限,因此我们可以用0/1来表示该位是否有这个权限,然后根据角色的分类,转化为八进制即可得到三位八进制数字表示的权限

chmod 777 test.txt

image-20230404145935907

7即代表该角色拥有可读、可写、可执行权限,下面列出八进制数对应权限的表格:

权限对应八进制数
r--4
-w-2
--x1
rw-6
r-x5
-wx3
rwx7
---0
02、chown

修改文件的拥有者,需要root权限

语法:chown [修改的拥有者用户名] [文件名]

sudo chown Kevin2 test.txt

image-20230404150651264


03、chgrp

修改文件的所属组,需要root权限

语法:chown [修改的所属组名] [文件名]

sudo chgrp Kevin2 test.txt

image-20230404150820153


04、umask

Linux规定,目录起始权限是777,而普通文件起始权限是666

我们分别创建一个目录和文件,其默认权限如下:

touch test.txt
mkdir dir

image-20230404151150563

我们发现目录和文件的默认权限并不是777和666;这是因为在起始权限之下,系统还有一个umask我们称为权限掩码,起到修饰权限的作用

系统会默认配置好umask,权限掩码是也可以通过umask指令修改的。

umask

image-20230404152037950

我们发现系统默认配置好的umask为0002,通过计算:

image-20230404152652397

改变掩码:

umask 0000

image-20230404152943711

👉最终权限的计算方式:

最终权限 = 起始权限 & (~umask)

最终权限等于起始权限与umask码按位取反作与运算

3.5 目录权限

目录的可执行权限是表示你可否在目录下执行命令

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

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

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

所有目录被创建出来,一般都要能被进入,所以系统规定一个目录权限必须是777开始。

【总结】:

如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件);

而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限;所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档;

4、粘滞位

场景引入:

加入某Linux系统中有多人使用,我们需要在一个公共的目录下,进行临时文件的操作(增删查改),在根目录中,我们可以找到这个公共目录

由于公共目录是为多个普通用户共同使用的,因此公共目录的创建者为root

ll /       #查看根目录

image-20230404154949795

我们可以在根目录下创建我们自己的一个公共目录(需要root权限):

cd /       #到根目录下
mkdir mytmp

image-20230404155405647

把设置一下mytmp目录权限:

sudo chmod 777 mytmp

image-20230404155804887

下面我们用不同用户在这个公共目录下创建文件:

cd mytmp             #进入公共目录
touch user1.txt      #当前用户创建一个文件
#换一个用户
touch user2.txt      #换一个用户

image-20230404160004193

image-20230404160038012

此时我们以Kevin2用户,对user1文件操作:

cat user1.txt
echo "hello user1,i am user2"->user1.txt

image-20230404192305509

这是由于user1文件对其它用户的权限只有可读权限,然而:

rm user1   

我们尝试删除user1文件,发现:

image-20230404192513484

我们发现,只要用户具有目录的读权限, 用户就可以删除目录中的文件, 无论该用户是否有这个文件的写权限

上述情况暴露了这样的问题:
在这里插入图片描述

这时我们即需要设置粘滞位以解决该问题:

给目录加上粘滞位(权限的一种特殊情况)(需要root权限)

语法:chmod +t [目录名]

  • +t 设置粘滞位
  • -t 取消粘滞位

它的作用表现在,一个公共目录,大家各自可以进行rwx操作,但是禁止大家互删对方的文件:

chmod +t mytmp

image-20230404193124647

此时对于添加了粘滞位的目录,该目录下的文件只能由:

超级管理员删除

该目录的所有者删除

该文件的所有者删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值