在Linux系统中,权限管理是确保数据安全的关键。本文将为大家介绍Linux文件与目录的权限管理,帮助你理解如何设置和管理访问权限。无论你是新手还是有经验的用户,这里都将提供实用的技巧和知识,助你更好地掌握Linux环境。让我们一起开始吧!
Linux | 相关知识点 | 可以通过点击 | 以下链接进行学习 | 一起加油! |
---|---|---|---|---|
初识指令 | 指令进阶 |
文章目录
- 一、shell命令以及运行原理
- 二、Linux用户划分
- 三、Linux切换身份与指令提权
- 3.1 身份切换
- 3.2 指令提权
- 四、Linux文件访问者与文件类型
- 4.1 文件访问者
- 4.2 文件类型
- 4.2.1 Linux工具考虑类型
- 五、Linux文件权限管理
- 5.1 文件类型和访问权限
- 5.2 文件权限值表示
- 5.3 修改文件访问权限
- 5.4 root无视权限限制
- 5.5 修改文件拥有者
- 5.6 修改文件的所属组
- 5.7 文件权限约束与识别身份
- 5.8 可执行权限与可执行文件
- 六、Linux目录权限
- 6.1 失去不同权限的后果
- 6.2 恶意删除文件
- 七、查看或修改文件权限掩码
- 7.1 最终权限猜测
- 7.2 最终权限计算
- 八、粘滞位
一、shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通,内核不提供和用户交互功能。
Shell的最简单定义:
命令行解释器(command Interpreter),通过将使用者的命令翻译给核心(kernel)处理,并且将核心的处理结果翻译给使用者。
Shell外壳程序:
是提供的一套命令解释程序,介于用户和操作系统之间的软件。通常将Shell分为两类:命令行与图形界面。其中命令行壳层提供一个命令行界面(CLI);而图形壳层提供一个图形用户界面(GUI)。
外壳程序存意义:
- 将用户的命令翻译给核心(kernel)处理;将核心(kernel)处理结果翻译给用户。
- Shlle外壳的存在,可以对请求进行合法性的检查,变相的保护OS
- 外壳程序是操作员与操作系统交互的界面,操作系统再负责完成与机器硬件的交互
辅助理解:
【用户】是张三,【外壳程序】是王婆,【操作系统】是小花。因为张三不擅长跟小花打交道,所以就需要王婆帮忙传话和得到小花回复
【如果出现不合法性请求】
- 【问题】:当用户请求出现不合法性,外壳程序受到失败的影响,怎么办呢?
- 【回答】外壳程序基本都会给我们创建一个子进程,让子进程进行执行(安排一个实习生,做外壳程序的工作–不受任何失败的影响)
【windows GUI】:我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
【shell 对于Linux】:有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
二、Linux用户划分
Linux下有两种用户:超级用户(root)、普通用户。
【超级用户】:可以再linux系统下做任何事情,不受限制
【普通用户】:在linux下做有限的事情。
【命令提示符】:其中超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
三、Linux切换身份与指令提权
3.1 身份切换
su指令
用途:身份切换
语法:su 用户名
事项:
- 从root用户切换到普通用户user,则su user
- 从普通用户切换到其他普通账号,则su user2,需要输入user2用户的密码
- 用于root账号是超级管理员,登入你账号需要啥子密码,权限永远是限制普通人的
- 从普通用户切换到root账号,则su root(可省略),需要输入root用户的密码(缺点必须得到root的密码)
- 建议普通账户和root账户的密码不要设置一样的!如果出现问题,不好解决
- 使用快捷键Ctrl+d退出账号
- 选项:切换到root用户的环境,包括该用户的所有环境变量
3.2 指令提权
sudo指令
用途:普通用户在需要执行特权操作时,如何临时提高自己的权利而无需切换到root账号
用法:sudo 指令
- 使用方面问题:sudo指令可以暂时命令提权,但是为什么是输入普通用户的密码。而不是root超级管理员的密码。
- 回答:减少切换到root用户登入时间,提高了安全性,当然sudo不是普通用户随意就可以是使用的,需要得到超级管理员的授权(列入白名单)
sudo使用前提:
sudo
命令默认情况下只能root
用户才能使用。如果需要让普通用户也能使用sudo
命令,必须在/etc/sudoers
文件中进行配置。
四、Linux文件访问者与文件类型
4.1 文件访问者
- 拥有者:文件和文件目录所有者[u–User]
- 所属组:文件和文件目录所有者所在组的用户,同一组共享资源[g–Group]
- other:其他用户[o–Others]
root和普通账号可以是上面任意一个角色。Linux具有组的概念。主要在多人协作的时候,更好的进行权限管理!
4.2 文件类型
场景引入:如何查看Windows下文件类型?看文件的后缀吗?
回答:
更改文件后缀不会损坏文件的,但是一般来说,识别的软件将会无法对其进行识别了,仅通过更改文件的后缀名并不能改变文件的实际内容或类型。
在Windows下查看文件:类型最常见办法确定是通过文件后缀,但是更改文件的后缀名并不能改变文件的实际内容或类型,也会导致识别软件将会无法对其进行识别。
总之,虽然文件后缀名给出了文件类型的线索,但它并不是文件类型的绝对定义,实际文件类型由文件内容决定。
Linux不是通过后缀去区分文件类型,这不意味着Linux不需要考虑后缀。如果需要知道Linux文件类型,可以通过ls -l指令单词命名行属性列表第一个字符
【普通文件及其目录类型】
- [-]:普通文件、文本文件、可执行文件、库等都叫做普通文件
- [d]:目录文件(蓝色的)
- [b]:块设备文件–磁盘(黄色的)
- [c] :字符设备文件–printf(“%d”,123)–显示器、键盘(Linux下一切皆文件)这些设备/显示器终端 访问文件一样访问设备 控制
- [s] :套接口文件
- [p] :管道文件(橙色的)
- [l] :链接文件(类似windows的快捷方式)–跟windows下图标直接指向可执行程序达到同样的效果
4.2.1 Linux工具考虑类型
虽然Linux不区分文件类型,但是Linux上面工具可能需要区分,比如gcc
Linux后缀虽然对于系统不存在影响,但是为了方便用户正确使用文件,推荐添加后缀,跟写注释一样。
五、Linux文件权限管理
权限是指通过一定条件拦住一部分人,给另一部分人权力来访问某种资源。权限是用来值针对没有权限那部分人
注意:由于root账号不是受到权限的约束的,这里建议使用普通账号进行学习,保护普通用户文件的一般安全性。
5.1 文件类型和访问权限
权限本质 == 人(角色)+事物属性(文件)
我们可以通过命名行旁边十个字符组成的字符串进行谈论文件类型和访问权限
字符含有划分:
- 第1位:文件类型
- 第2~10位:权限
其中第2~10位字符以三三为一组去对应三个文件访问者的三种权限:读®、写(w)、可执行(x)
5.2 文件权限值表示
- a)字符表表示方法
- b)8进制数值表示方法
字符表示法中的每一个字符所在位置所表示的结果只有两种可能,要么为真,要么为假,而真可用1表示,假可用0表示,因此我们可以将这三个字符换为三个二进制位,进而换为一个八进制位进行表示。如下:
5.3 修改文件访问权限
chmod指令
- 功能:修改文件访问权限
- 格式:chmod [参数] 权限 文件名
- 常用选项:R ->递归修改目录文件的权限
- 注意:只允许root账号和文件拥有者进行文件权限修改,所属组也不能直接修改
参数:
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
- 用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:全部用户
【示例演示】
【法一】:使用权限字符进行文件权限修改
- 增加全部用户的读写可执行权限: chmod a+rwx file.txt
- 取消所属组和其他用户的可执行权限:chmod g-x,o-x file.txt
【法二】:使用八进制数字代表每个角色权限
- 增加全部用户的读写可执行权限: chmod 777 file.txt
- 取消全部用户的读写可执行权限: chmod 000 file.txt
- 将可执行权限赋值给全部用户:chmod a=x file.txt
5.4 root无视权限限制
场景:现在将file.txt文件拥有者及其所属组设为普通用户,将其他用户的读写可执行权限全部取消。
将file.txt文件拥有者及其所属组设为普通用户,那么意味着root用户属于其他用户,按照上述权限设置,root作为其他用户不具备任何读写权限,但是实际上root用户不受到任何约束
可见,其他用户指的是除了root以外的其他普通用户
5.5 修改文件拥有者
chown指令
- 功能:修改文件拥有者
- 格式:chown [参数] 用户名 文件名
- 普通用户不能将文件随便给别人,一般通过sudo提权强制给别人文件
【示例演示】
- root账号下,将file.txt随便给其他用户
- 如果普通账号下,直接将file.txt给其他用户
普通用户执行该命令时,会遇到
“Operation not permitted”
的错误提示**在Linux系统中,普通用户不能直接将文件的所有权转移给另一个普通用户。**只有超级用户(root)可以更改文件的所有权。这是因为文件的拥有权是一个系统级别的属性,只有具有特权的用户(如root)才能操作它。这是为了保护系统的安全性,避免未经授权的用户之间随意交换文件所有权,防止潜在的安全问题。
- sudo指令提权强制把文件给别人
sudo指令等于以root身份执行该程序,强制修改文件拥有者。对此普通用户想要将文件给其他用户,需要sudo指令强制给别人,而root可以直接给别人。
- 连续修改拥有者和所属组
5.6 修改文件的所属组
chgrp
- 功能:修改文件或目录的所属组
- 格式:chgrp [参数] 用户组名 文件名
- 常用选项: -R 递归修改文件或目录的所属组
- root身份直接修改文件所属组
- 以普通用户更换所属组,需要sudo提高权限
5.7 文件权限约束与识别身份
对于普通用户来说,自身要收到对应权限的约束,即便这个文件属于自己的
从中我们可以看见,虽然lyz作为文件拥有者,但是由于文件权限的限制,无法去对该文件执行任何读写操作。问题在于lyz作为所属组,有读写权限,那么为什么文件不让所属组的我进行文件操作呢?
是由于系统只对对应自己的用户身份,只识别一次。
5.8 可执行权限与可执行文件
可执行的文件 = 具有可执行权限 + 本身一个可执行文件;满足这两点就可以执行这个文件。(前面是必要条件 后面是充分条件 你硬要我也没有办法)
六、Linux目录权限
以上是围绕着文件权限进行展开,现在将进行Linux目录权限的讨论。
目录权限字的含义:
- 可读权限(r ):用户查看指定目录内的文件信息
- 可写权限(w):用户能否在指定的目录内新建、修改、删除文件
- 可执行权限(x):是否可以进入到目录当中,相当于通行证
6.1 失去不同权限的后果
- 如果缺少可执行权限,会导致无法进入目录当中。
- 如果缺少可读权限,虽然可以进入目录当中,但是无法查看信息
- 如果缺少可写权限,虽然可以进入目录当中,但是无法新建、修改、删除文件
6.2 恶意删除文件
在root家目录下,拥有可写权限就可以删除任意用户(包括root)的文件,不论这个用户是否有这个文件的写权限,都可以进行删除文件的行为。
root的文件都能删除,这样子合理吗?合理呀!你root干嘛在我目录下创建文件,既然在我目录下创建文件就会收到管理,如果root把home的权限拔掉了,那么普通用户也是进不去家目录的。对于新建目录除了目录拥有者,其他用户都没有x权限。
如果我们想在Linux下,由多个用户建立一个共享文件,来被大家共同访问。首先这个文件,不能再我们各自的家目录下创建,只能再系统的非用户目录下创建。
七、查看或修改文件权限掩码
umask指令
- 功能:查看或修改文件权限掩码
- 格式:umask
- 其中超级用户默认掩码值为0022,普通用户默认为0002。
对于Linux创建文件时,是具有默认权限。新建普通文件默认权限=0666(去掉x权限),新建目录默认权限=0777。
在实际所创建的文件和目录并不是上面的默认权限,受到权限掩码影响。对于
最终权限 == 默认权限 & (~ umask文件掩码)
从图中可以看出来,我最终创建的目录权限值为755,最终创建的普通文件权限值为664机器不同,umask默认值会不同)
7.1 最终权限猜测
最终权限是通过减法完成的,最终权限 = 默认权限 - umask存在权限,意味着凡是权限掩码中出现的权限都不会在最终权限中出现。
那么通过修改默认掩码进行进一步探索
如果按照最终权限是通过减法完成的,那么我们新创建的文件的最终权限值理应如下:
实际结果:
权限掩码umask的值更改为003,导致预计结果跟实际结果冲突,可见最终权限不是通过减法完成的
7.2 最终权限计算
首先,对默认权限掩码按位取反,接着拿按位取反后的结果与文件的默认权限进行按位与的操作 ,得到的就是最终权限。
综上,最终权限 = 默认权限 & (~umask)
八、粘滞位
在Linux中,可以存在一些目录,拥有者和所属组是root,其它人允许以other的身份在该目录下进行文件的创建,读取,删除,修改等(公共信息传递区)。如下的一个名为tmp的目录
该目录的拥有者和所属组均属于root,且other其它人的权限都是没有限制的,也就是说任何人都可以在里头读写文件。
总结:当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员root删除
二、该目录的所有者删除
三、该文件的所有者删除
以上就是本篇文章的所有内容,在此感谢大家的观看!这里是Linux笔记,希望对你在学习Linux旅途中有所帮助!