核心内容摘要
Chandra镜像详细步骤:Ollama内核+gemma:2b模型的GPU算力适配部署
【Linux权限进阶】深入理解权限掩码与粘滞位从原理到实践 Doro在努力个人主页 个人专栏: 《MySQL数据库基础语法》《数据结构》⛺️严于律己宽以待人文章目录【Linux权限进阶】深入理解权限掩码与粘滞位从原理到实践前言
权限掩码umask默认权限的幕后推手
1 现象观察为什么新建文件权限是
6
2 起始权限与权限掩码的概念
3 权限掩码umask的作用
4 权限计算的数学原理
5 为什么要存在权限掩码
6 修改权限掩码
7 不同系统的差异
粘滞位Sticky Bit共享目录的安全卫士
1 一个令人困惑的现象
2 文件删除的真正决定因素
3 共享目录下的安全隐患
4 粘滞位的原理与设置
5 /tmp目录与粘滞位
6 粘滞位的使用场景
Linux软件包生态与包管理器
1 从应用商店说起
2 评估一款操作系统的好坏
3 Linux软件包的来源
4 为什么推荐用包管理器安装软件
5 软件源与镜像
6 yum和apt的基本使用
7 开源的本质是一种商业模式
四、
总结
权限掩码umask
粘滞位Sticky Bit
Linux软件包生态写在最后前言在上节课中我们系统地学习了Linux权限的基础知识包括用户类型root与普通用户、角色划分拥有者、所属组、other、权限属性读、写、执行以及如何使用chmod、chown、chgrp等命令来修改权限。
今天这节课我们要继续深入权限这个话题解决两个非常核心的问题为什么新建的文件和目录会有默认权限你有没有想过为什么用touch创建一个普通文件它的权限默认是664为什么用mkdir创建一个目录权限默认是775这些数字是怎么来的粘滞位Sticky Bit是什么在实际工作中我们经常需要在共享目录下协作但如何防止别人误删你的文件这就是粘滞位要解决的问题。
Linux软件包生态是怎样的我们每天都在用yum或apt安装软件但你真的理解这背后的原理吗带着这些问题让我们开始今天的学习之旅。
权限掩码umask默认权限的幕后推手
1 现象观察为什么新建文件权限是664让我们先来做一个小实验。
打开你的Linux终端执行以下命令$touchtest.c $mkdirmydir $ls-l -rw-rw-r--1user user0Jan1114:22 test.c drwxrwxr-x2user user4096Jan1114:22 mydir仔细观察输出结果普通文件test.c的权限是-rw-rw-r--转换成八进制就是664目录mydir的权限是drwxrwxr-x转换成八进制就是775这时候你可能会问为什么默认是这些权限为什么不能给我全部权限
7
2 起始权限与权限掩码的概念要理解这个问题我们需要引入两个重要概念起始权限和权限掩码。
起始权限是指系统在创建文件或目录时理论上应该赋予的初始权限。
在Linux中普通文件的起始权限是666即rw-rw-rw-目录的起始权限是777即rwxrwxrwx你可能会问为什么普通文件的起始权限没有x执行权限这是因为大部分普通文件如文本文件、源代码、图片、视频等默认是不需要执行的。
只有二进制可执行文件才需要x权限而这种文件相对较少。
所以系统默认不给普通文件赋予执行权限如果你确实需要可以手动用chmod添加。
而目录的起始权限是777这是因为进入目录需要x权限这是刚需。
如果新建目录没有x权限我们就进不去那还要这个目录有什么用
3 权限掩码umask的作用既然起始权限是666或777那为什么我们实际看到的权限是664和775呢这就要说到**权限掩码umask**了。
权限掩码是一个八进制数它决定了哪些权限应该被屏蔽去掉。
我们可以通过umask命令查看当前的权限掩码$umask0002输出结果是0002这是一个八进制数。
其中第一个0表示这是八进制格式我们暂时不用管它重点关注后面的三位数字002。
权限掩码的核心作用凡是在权限掩码中出现的权限都要在起始权限中去掉。
4 权限计算的数学原理权限的计算公式如下最终权限 起始权限 (~权限掩码)也就是说最终权限等于起始权限与权限掩码按位取反后的结果进行按位与运算。
让我们以普通文件为例详细演示计算过程第一步转换为二进制起始权限666 110 110 110权限掩码002 000 000 010第二步权限掩码按位取反~002 111 111 101第三步进行按位与运算110 110 110 (起始权限
111 111 101 (~权限掩码) ------------- 110 110 100 (最终权限
所以最终权限是664也就是rw-rw-r--。
可以看到other的写权限被去掉了。
同样地对于目录起始权限777 111 111 111~002 111 111 101按位与结果111 111 101
7
5 为什么要存在权限掩码现在你可能会问为什么要有权限掩码这么麻烦的东西直接从起始权限开始不就行了权限掩码存在的意义在于提供灵活性。
想象一下这个场景你是一个系统管理员需要一次性创建100个文件这些文件都只需要拥有者有读写权限其他任何人都不能访问。
如果没有权限掩码你只能创建100个文件对每个文件执行chmod 600 filename这太麻烦了有了权限掩码你只需要$umask077# 设置权限掩码为077$touchfile{
.100}.txt# 批量创建100个文件所有新创建的文件都会自动拥有600权限这就是权限掩码的强大之处。
6 修改权限掩码你可以随时修改权限掩码来满足不同的需求# 查看当前权限掩码$umask0002# 设置权限掩码为077新建文件只有拥有者有权限$umask077# 验证效果$touchtest.txt $ls-l test.txt -rw-------1user user0Jan1115:20 test.txt# 恢复默认权限掩码$umask002重要提示权限掩码的修改只在当前会话有效。
当你退出登录重新登录后系统会恢复默认的权限掩码值。
不用担心改乱了忘记恢复
7 不同系统的差异需要注意的是不同的Linux发行版、不同的用户默认的权限掩码可能不一样CentOS/RHEL默认通常是002Ubuntu默认通常是002有些系统可能是022如果你发现你的系统默认umask和别人不一样不用大惊小怪这是正常的系统配置差异。
粘滞位Sticky Bit共享目录的安全卫士
1 一个令人困惑的现象在正式讲解粘滞位之前让我们先来看一个有趣的现象。
假设用户root在普通用户whb的家目录下创建了一个文件# root用户执行$touch/home/whb/root_file.txt $chmod600/home/whb/root_file.txt $ls-l /home/whb/root_file.txt -rw-------1root root0Jan1116:00 /home/whb/root_file.txt这个文件的权限是600意味着只有root能读写其他用户包括whb都没有任何权限。
现在切换到普通用户whb尝试读取这个文件# whb用户执行$cat/home/whb/root_file.txt cat: /home/whb/root_file.txt: Permission denied# 符合预期没有读权限确实读不了符合预期。
但是如果whb尝试删除这个文件呢# whb用户执行$rm/home/whb/root_file.txt rm: remove write-protected regular emptyfile/home/whb/root_file.txt? y# 文件竟然被删除了奇怪的事情发生了一个普通用户居然能删掉root创建的文件而且这个文件对whb来说是没有任何权限的这合理吗非常合理。
2 文件删除的真正决定因素这个问题的核心在于删除一个文件与文件本身的权限无关而是由文件所在目录的权限决定的。
让我们回顾一下目录权限的含义r权限可以查看目录下的文件列表执行lsw权限可以在目录下创建新文件或删除已有文件x权限可以进入目录执行cd在上面的例子中root_file.txt位于/home/whb目录下而/home/whb是whb用户的家目录whb对这个目录拥有完整的rwx权限特别是拥有w写权限。
正是因为whb对目录有写权限所以他可以删除目录下的任何文件无论这个文件是谁创建的也无论这个文件本身的权限是什么。
用一个生活中的例子来理解假设有一天一个陌生人跑到你家把一堆旧衣服扔进了你家的洗衣机。
你作为房子的主人虽然你不能穿这些衣服相当于没有读权限也不能修改这些衣服相当于没有写权限但你绝对有权把这些衣服扔出家门删除文件。
因为这是在你的房子里你对这个空间有完全的控制权。
3 共享目录下的安全隐患理解了文件删除的原理后我们来看看实际工作中可能遇到的问题。
在Linux系统中不同用户之间有时需要共享文件。
比如你和同事需要协作完成一个项目你们需要一个共同的目录来存放项目文件。
但是如果共享目录对所有用户都开放写权限就会出现一个严重的问题任何人都可以删除别人的文件# 假设/shared是共享目录所有用户都有写权限$ls-l /shared -rw-r--r--1user1 group11024Jan1117:00 user1_important.txt -rw-r--r--1user2 group22048Jan1117:01 user2_important.txt# user3对user1的文件没有任何权限但他可以...$rm/shared/user1_important.txt# 成功删除这显然是不能接受的。
你可能会想那把目录的写权限去掉不就行了不行如果去掉写权限用户就无法在目录下创建新文件了这就失去了共享的意义。
这时候我们就需要**粘滞位Sticky Bit**来解决这个问题。
4 粘滞位的原理与设置粘滞位是一种特殊的目录权限它的作用是在设置了粘滞位的目录中只有文件的拥有者、目录的拥有者或root用户才能删除文件其他用户即使有写权限也不能删除别人的文件。
设置粘滞位非常简单# 给目录添加粘滞位$chmodt /shared# 或者使用八进制表示法在原有权限前加1$chmod1777/shared# 查看效果$ls-ld /shared drwxrwxrwt2root root4096Jan1118:00 /shared注意到权限字符串的最后一个字符变成了t这就是粘滞位的标志。
设置了粘滞位后我们再来看看效果# user1创建文件$touch/shared/user1_file.txt# user2尝试删除user2对目录有写权限但不是文件拥有者$rm/shared/user1_file.txt rm: cannot remove/shared/user1_file.txt:Operation not permitted# 删除失败# user1自己删除$rm/shared/user1_file.txt# 成功完美粘滞位成功保护了用户的文件不被他人误删。
5 /tmp目录与粘滞位实际上Linux系统中早就有一个自带粘滞位的目录——/tmp临时目录。
$ls-ld /tmp drwxrwxrwt10root root4096Jan1119:00 /tmp/tmp目录对所有用户都开放读写执行权限rwxrwxrwx并且设置了粘滞位t。
这意味着任何用户都可以在/tmp下创建临时文件但只能删除自己的文件不能删除别人的文件。
这就是为什么我们在编写程序时临时文件通常都放在/tmp目录下的原因之一。
6 粘滞位的使用场景粘滞位主要适用于以下场景多用户共享目录如项目协作目录、公共文件交换区等临时文件目录如/tmp防止用户误删系统或其他用户的临时文件FTP上传目录允许用户上传文件但不能删除别人的文件
Linux软件包生态与包管理器
1 从应用商店说起在正式开始讲Linux软件包之前让我们先回想一下手机上的应用商店。
你打开手机上的应用商店如App Store、华为应用市场、小米应用商店搜索你想要的APP点击下载安装几秒钟后就可以使用了。
整个过程非常简单你不需要知道APP的源代码在哪里不需要知道怎么编译更不需要处理各种依赖关系。
Linux的包管理器如yum、apt本质上就是Linux系统的应用商店。
2 评估一款操作系统的好坏在深入讲解包管理器之前我想先问大家一个问题如何评估一款操作系统的好坏可能有的同学会说看性能、看稳定性、看安全性。
这些答案都对但不完全。
让我讲一个场景假设你是公司的技术负责人老板让你在一周内选一款Linux发行版作为公司的服务器操作系统。
你会怎么选如果你说“老板我选Ubuntu因为我在学校学过这个。
” 老板肯定不满意。
这不是一个专业的技术决策。
评估一款操作系统最重要的是看它的生态。
一个优秀的操作系统应该具备活跃的社区和论坛遇到问题能快速找到解决方案完善的官方文档学习和维护成本低丰富的软件体系需要的软件都能方便地获取及时的更新维护安全漏洞能及时修复庞大的用户群体特别是大公司都在用为什么生态这么重要因为一款操作系统做出来最重要的是要有人用。
如果没人用这款操作系统就不可能持续发展。
华为鸿蒙系统就是一个很好的例子。
华为为什么先卖手机后推操作系统因为如果没有庞大的用户基础直接推操作系统是活不下来的。
只有当用户量足够大时各大APP厂商才会愿意为你的系统开发应用你的生态才能建立起来。
3 Linux软件包的来源理解了生态的重要性后我们来看看Linux软件包是怎么来的。
Linux是开源的全球的开发者都在为Linux贡献代码。
这些开发者编写源代码开发各种应用程序、工具、库等编译打包将源代码编译成二进制文件打包成软件包如rpm包、deb包上传到软件包服务器将打包好的软件上传到社区维护的软件包服务器用户使用包管理器下载安装通过yum、apt等工具从服务器下载并安装这个过程形成了一个完整的生态链开发者 → 源代码 → 编译打包 → 软件包服务器 → 包管理器 → 用户
4 为什么推荐用包管理器安装软件在Linux中安装软件有多种方式源代码安装下载源代码自己编译安装rpm/deb包安装下载预编译的安装包手动安装包管理器安装使用yum、apt等工具自动安装为什么强烈推荐使用包管理器第一自动解决依赖问题。
软件之间是有依赖关系的。
比如你要安装软件A但A依赖于软件B和CB又依赖于D和E。
如果手动安装你需要先把B、C、D、E都装好才能安装A。
这非常麻烦而且你根本不知道A依赖了什么。
包管理器会自动分析依赖关系把所有需要的软件都一并安装好。
第二统一管理。
包管理器会记录系统中安装的所有软件方便后续的更新、卸载等操作。
第三安全可靠。
包管理器从官方或可信的软件源下载软件避免了从不明来源下载软件的安全风险。
5 软件源与镜像既然包管理器要从软件包服务器下载软件那它怎么知道服务器在哪里呢答案是在系统中有一个配置文件里面记录了软件源的地址。
在CentOS中软件源配置文件位于/etc/yum.repos.d/在Ubuntu中软件源配置文件位于/etc/apt/sources.list但是这些软件源服务器大多在国外如美国。
如果你在国内直接访问可能会非常慢甚至无法访问。
这时候就需要镜像源了。
国内的云服务厂商如阿里云、腾讯云、高校如清华大学、中国科学技术大学会把国外的软件包服务器完整地镜像拷贝到国内然后提供国内的配置文件。
这样我们安装软件时就可以从国内的服务器下载速度大大提升。
国内常用的镜像源包括阿里云镜像站https://developer.aliyun.com/mirror/清华大学镜像站https://mirrors.tuna.tsinghua.edu.cn/中国科学技术大学镜像站http://mirrors.ustc.edu.cn/网易镜像站http://mirrors.
com/
6 yum和apt的基本使用这里简单介绍一下yumCentOS和aptUbuntu的基本用法yumCentOS/RHEL# 搜索软件包$ yum search 软件名# 安装软件$sudoyuminstall-y 软件名# 卸载软件$sudoyum remove -y 软件名# 更新所有软件$sudoyum updateaptUbuntu/Debian# 搜索软件包$aptsearch 软件名# 安装软件$sudoaptinstall-y 软件名# 卸载软件$sudoaptremove -y 软件名# 更新软件列表$sudoaptupdate# 更新所有软件$sudoaptupgrade
7 开源的本质是一种商业模式最后我想和大家聊聊开源这个话题。
很多人觉得开源就是免费就是做慈善。
其实不然开源的本质是一种商业模式。
Linux操作系统是开源的全球的开发者免费为它写代码各大公司免费为它提供服务器资源。
为什么因为这些公司都是Linux的受益者。
它们的服务器跑的是Linux它们的业务依赖于Linux。
如果Linux倒下了它们的业务也会受到影响。
所以它们愿意投入资源来维护Linux的生态。
这是一种互利共赢的商业模式用户免费获得了优秀的操作系统开发者通过贡献代码获得技术声誉和职业机会企业通过支持开源项目确保自己的业务基础稳定理解了这一点你就能理解为什么Linux生态能够如此繁荣为什么全球的开发者愿意免费为Linux做贡献。
四、
总结今天我们深入学习了Linux权限管理的两个重要概念和软件包生态
权限掩码umask起始权限普通文件666目录777权限掩码决定哪些权限需要被屏蔽计算公式最终权限 起始权限 (~权限掩码)作用为新建文件提供灵活的默认权限控制修改使用umask命令当前会话有效
粘滞位Sticky Bit核心问题删除文件由目录的写权限决定与文件本身权限无关作用在共享目录中只允许文件拥有者删除自己的文件设置chmod t 目录名或chmod 1777 目录名标志权限字符串最后一个字符变为t典型应用/tmp目录
Linux软件包生态包管理器yum/apt是Linux的应用商店评估操作系统最重要的是看生态完善程度软件包来源开发者 → 源代码 → 编译打包 → 软件包服务器 → 用户镜像源解决国内访问国外软件源慢的问题开源是一种互利共赢的商业模式写在最后权限管理是Linux系统安全的基础理解umask和粘滞位的原理能够帮助你更好地管理文件权限避免在实际工作中出现安全问题。
软件包生态的理解则能让你对Linux系统有一个更宏观的认识不仅仅是会用命令更要知道这些命令背后的原理和整个系统的运作方式。
希望这篇文章对你有所帮助。
如果你有任何问题欢迎在评论区留言讨论。
我们下节课再见