Ubuntu的文件权限介绍

Linux系统是一个多用户系统,每个用户都会创建自己的文件。为了防止其他人擅自改动他人的文件,需要拥有一套完善的文件保护机制。在Linux系统中,这种保护机制就是文件的访问权限。文件的访问权限决定了谁可以访问和如何访问特定的文件。

为了便于读者理解后面的内容,下面首先介绍一些基础知识。

Linux的文件权限分为基本权限和特殊权限,下面分别介绍。

1. 基本权限

Linux系统将文件的基本权限分为3个权限组,分别为文件所有者、文件所属组以及其他用户。所谓文件所有者,一般是指文件的创建者,谁创建了文件,谁就默认成为该文件的所有者。通常情况下,文件所有者对该文件拥有全部权限。文件所属组是指某个用户组对该文件拥有的访问权限。同理,其他用户是指除文件所有者和所属组之外的系统中的其他用户对于该文件的访问权限。这3个权限组分别用u、g和o表示。另外,还要加上一个所有用户,用a表示。

对于每个文件或者目录,都有3种基本权限类型,分别为读、写和执行。所谓读权限,是指用户能够读取文件的内容。写权限是指用户能够写入或修改文件或目录的内容。执行权限是指用户能够执行该文件或者进入某个目录。这3种基本权限分别用字母r、w和x表示。如果没有这种权限,则用连字符-表示。除这种字母表示方法外,Linux还支持一种二进制数字表示法,即分别用二进制100、010和001表示读、写和执行权限,转换成十进制就是4、2和1。

2. 特殊权限

Linux的权限设置非常灵活,除基本权限外,还有3种特殊权限,分别是setuid、setgid和粘滞位。前面两种都是为了使得某个程序在执行时能够得到权限提升而设置的,而后者则是为了保护文件或者目录不被他人删除而设置的。

setuid和setgid分别允许用户以文件所有者和文件所属组的身份执行某个文件。这两种权限适用于某个任务所需的权限高于运行者所拥有的权限,而为了运行这个任务,允许用户暂时提高权限。

首先介绍一下setuid和setgid。setuid的全称是set user ID upon execution,也就是在程序执行时设置其用户ID。那么到底是设置成谁的用户ID呢?当然是程序所有者的用户ID。这意味着无论是哪个用户,只要有执行该程序的权限,那么在该程序执行时,都相当于该程序的所有者在执行。程序所有者所拥有的权限,程序执行者在程序执行的时候也拥有。setgid的全称是set group ID upon execution,其中组ID指的是文件所在组的ID。也就是说,在执行该程序时,只要有执行的权限,那么在程序执行的时候,程序所在组所拥有的权限,执行者同样拥有。

这两种权限通常用在执行某个特殊任务时,需要任务执行者的权限得到临时提升。例如,在Linux系统中,/etc/passwd和/etc/shadow是两个非常关键的文件。前者用来存储账号信息,后者用来存储密码。这两个文件的所有者为root用户,并且只有root用户才有写入权限。但是,我们知道,Linux系统中的每个用户都可以通过passwd命令修改自己的密码,有些非root用户可以在Linux系统中增加或者删除账号。而无论是修改密码还是增删账号都会修改/etc/shadow和/etc/passwd,那么这个功能是如何实现的呢?

实际上,这要归功于setuid权限,Linux系统为passwd命令设置了该权限,并且将passwd命令的所有者设置为root,而系统中其他的有效用户都可以执行passwd命令。这样,在其他用户执行passwd命令的时候,就会拥有root用户的权限,因此就可以修改这两个文件了。

注意:除setuid和setgid外,Linux还提供了其他的安全机制,包括普通用户不能修改其他用户的密码等。

setuid和setgid这两种特殊权限用字符s表示,其中,setuid占用所有者权限的第3个字符,即x所在的位置。setgid占用文件所在组权限的第3个字符,同样是x所在的位置。如果setuid或者setgid和x权限同时拥有,则会两种权限叠加,用小写字符s表示。如果只设置了setuid或者setgid,而没有x权限,则用大写字符S表示。

除字符表示法外,还可以使用数字表示这两种特殊权限,其中setuid在权限的最高位上用十进制数字4表示,而setgid在权限的最高位上用十进制数字2表示。

粘滞位的作用恰恰与刚才介绍的两种权限相反。例如,/tmp目录是Linux为所有的应用程序提供的临时目录,这个目录对于所有的用户来说都是可读、可写的。系统中那么多的应用程序,会不会出现某个应用程序修改或者删除其他应用程序的情况呢?如果这种情况发生的话,必然会导致Linux系统中的应用程序执行错乱。

为了防止上面所讲的现象发生,Linux系统为/tmp目录设置了粘滞位。设置了粘滞位之后,只有文件的所有者才可以修改或者删除/tmp目录中的文件。

粘滞位在文件权限中用字符t表示,占用其他用户权限的第3个字符,即x所在的位置。同样,如果同时设置了粘滞位和执行权限,则用小写字母t表示;如果只有粘滞位,而没有执行权限,则用大写字母T表示。如果用数字来表示粘滞位的话,则最高位上用十进制数字1表示。

本文节选自《Ubuntu Linux系统管理与运维实战》,获出版社和作者授权发布。

《Ubuntu Linux系统管理与运维实战(Linux技术丛书)》(张春晓,肖志健)【摘要 书评 试读】- 京东图书 (jd.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习500问——Chapter11:迁移学习(1)

文章目录 11.1 迁移学习基础知识 11.1.1 什么是迁移学习 11.1.2 为什么需要迁移学习 11.1.3 迁移学习的基本问题有哪些 11.1.4 迁移学习有哪些常用概念 11.1.5 迁移学习与传统机器学习有什么区别 11.1.6 迁移学习的核心及度量准则 11.1.7 迁移学习与其他概念的区别 11.1.8 什么…

服务器再升级!64线程服务器震撼上线,全新渲染体验等你来解锁

秉承着 “科技赋能创意,连接创造价值”的使命, 经过精心的策划和筹备, 蓝海创意云 64线程服务器, 以全新的面貌,优惠的价格, 与大家见面了! 诚邀您一起,解锁全新的渲染体验&am…

《软件定义安全》之八:软件定义安全案例

第8章 软件定义安全案例 1.国外案例 1.1 Fortinet:传统安全公司的软件定义方案 Fortinet的软件定义安全架构强调与数据中心的结合,旨在将安全转型为软件定义的模式,使安全运维能够与数据中心的其他部分一样灵活、弹性。在Fortinet看来&…

亿达四方:一站式SolidWorks代理服务,打造设计竞争力

在当今瞬息万变的设计与制造领域,高效、精准的3D设计软件已成为推动企业创新与发展的核心驱动力。作为业界知名的SolidWorks一站式代理服务商,亿达四方致力于为企业搭建从软件采购到技术应用的全方位桥梁,全面赋能设计团队,助力企…

stable-diffusion.cpp 文字生成图片

纯 C/C 中 [Stable Diffusion] 的推断 https://github.com/CompVis/stable-diffusion ## 特点 - 基于 [ggml](https://github.com/ggerganov/ggml) 的普通 C/C 实现,工作方式与 [llama.cpp](https://github.com/ggerganov/llam…

微信小程序请求request封装

公共基础路径封装 // config.js module.exports {// 测试BASE_URL: https://cloud.chejj.cn,// 正式// BASE_URL: https://cloud.mycjj.com };请求封装 // request.js import config from ../config/baseUrl// 请求未返回时的loading const showLoading () > wx.showLoadi…

蓝桥杯软件测试第十五届蓝桥杯模拟赛1期题目解析

PS 需要第十五界蓝桥杯模拟赛1期功能测试模板、单元测试被测代码、自动化测试被测代码请加🐧:1940787338 备注:15界蓝桥杯省赛软件测试模拟赛1期 题目1 功能测试用例1(测试用例)(15分) 【前期准备】 按步…

网页元素解析元素标签和style变更

前言 如何解析html标签&#xff1f; 如何给标签增加样式&#xff1f; <div class"related-tags"><span>相关主题推荐&#xff1a;</span>a<a hrefhttp://www.csdn.net/tag/标签 target"_blank">标签</a><a href"h…

【STM32】输入捕获应用-测量脉宽或者频率(方法1)

图1 脉宽/频率测量示意图 1 测量频率 当捕获通道TIx 上出现上升沿时&#xff0c;发生第一次捕获&#xff0c;计数器CNT 的值会被锁存到捕获寄存器CCR中&#xff0c;而且还会进入捕获中断&#xff0c;在中断服务程序中记录一次捕获&#xff08;可以用一个标志变量来记录&#…

CC攻击的有效应对方案

随着互联网的发展&#xff0c;网络安全问题愈发突出。CC攻击&#xff08;Challenge Collapsar Attack&#xff09;&#xff0c;一种针对Web应用程序的分布式拒绝服务&#xff08;DDoS&#xff09;攻击方式&#xff0c;已经成为许多网络管理员和网站拥有者不得不面对的重大挑战。…

Fantasy Icons Megapack(梦幻盔甲宝石图标魔法道具图标集)

所有图标都具备高质量&#xff0c;并以专业水平实施。任何幻想风格游戏的上佳选择。 - 可更新的超级资源包&#xff1b; - 每个图标的大小均为 256x256 像素 (PNG)&#xff1b; - 总计 2672 个独一无二的图标&#xff1b; - 所有图标均具有透明背景。 超级资源包内置&#xff1…

Redisson原理解析

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

如何通过“小猪APP分发”轻松实现应用分发

你是否也在为应用分发发愁&#xff1f; 还记得那些日子吗&#xff1f;你花费了大量的时间和精力开发了一款出色的应用&#xff0c;但却在分发和推广环节遇到了瓶颈。是的&#xff0c;无论你的应用多么优秀&#xff0c;如果不能顺利分发给用户&#xff0c;那一切都是徒劳的。别…

[c++刷题]贪心算法.N01

题目如上: 首先通过经验分析&#xff0c;要用最少的减半次数&#xff0c;使得数组总和减少至一半以上&#xff0c;那么第一反应就是每次都挑数组中最大的数据去减半&#xff0c;这样可以是每次数组总和值减少程度最大化。 代码思路:利用大根堆去找数据中的最大值&#xff0c;…

[数据集][实例分割]减速带分割数据集json+yolo格式5400张1类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件以及对应yolo格式txt) 图片数量(jpg文件个数)&#xff1a;5400 标注数量(json文件个数)&#xff1a;5400 标注数量(txt文件个数)&#xff1a;5400 标注类别数&#xff1a;1 标注…

体验版小程序访问不到后端接口请求失败问题解决方案

文章目录 解决方案一&#xff1a;配置合法域名解决方案二&#xff1a;开发调试模式第一步&#xff1a;进入开发调试模式第二步&#xff1a;启用开发调试 注意事项结语 &#x1f389;欢迎来到Java面试技巧专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

牛客链表刷题(一)

目录 题目一&#xff1a;反转链表 代码&#xff1a; 题目二&#xff1a;链表内指定区间反转 代码&#xff1a; 题目一&#xff1a;反转链表 代码&#xff1a; import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int …

2024 年最新 Python 使用 gewe 框架搭建微信机器人实现语音智能回复(详细教程)

Gewe 个微框架 GeWe&#xff08;个微框架&#xff09;是一个创新性的软件开发框架&#xff0c;专注于IPAD协议&#xff0c;为个人微信号以及企业信息安全提供了强大的功能和保障。GeWe的设计旨在简化开发过程&#xff0c;使开发者能够高效、灵活地构建和定制通信协议&#xff…

unity基础(五)地形详解

目录 一 创建地形 二 调整地形大小 三 创建相邻地形 四 创建山峰 五 创建树木 七 添加风 八 添加水 简介: Unity 中的基础地形是构建虚拟场景的重要元素之一。 它提供了一种直观且灵活的方式来创建各种地形地貌&#xff0c;如山脉、平原、山谷等。 通过 Unity 的地形…

力扣384. 打乱数组

Problem: 384. 打乱数组 文章目录 题目描述思路复杂度Code 题目描述 思路 打乱数组的主要算法&#xff1a; 从1 - n每次生成[i ~ n - i]的一个随机数字&#xff0c;再将原数组下标位置为i的元素和该随机数字位置的元素交换 复杂度 打乱数组的主要算法 时间复杂度: O ( n ) O(…