当前位置: 首页 > news >正文

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)

相关文章:

  • node.js学习
  • 2024年最佳插电式混合动力电动汽车
  • MySQLWorkbench导出sql文件
  • 【自动驾驶】ROS小车系统介绍
  • 主机加固如何应对数据世界的绑匪
  • Spark作业运行异常慢的问题定位和分析思路
  • 《骑行健身:“柳叶刀”研究揭示的健康与经济双赢策略》
  • 最适合程序员的编程字体,漂亮、独特、优雅!(2024-06-17)
  • .Net OpenCVSharp生成灰度图和二值图
  • 【Android面试八股文】sleep、wáit、yield与join的区别,wait 的线程如何唤醒它?
  • 消息队列-Rabbit运行机制
  • 美国犹他州立大学《Nature Geoscience》(IF=18)!揭示草本植物对土壤有机碳的重要贡献!
  • 【做一道算一道】目标和
  • 服务器可以充当负载均衡器
  • 从输入URL到页面加载完中间发生了什么?
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 2017-08-04 前端日报
  • fetch 从初识到应用
  • JavaScript创建对象的四种方式
  • Javascript基础之Array数组API
  • JS函数式编程 数组部分风格 ES6版
  • React as a UI Runtime(五、列表)
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 基于webpack 的 vue 多页架构
  • 使用docker-compose进行多节点部署
  • #define、const、typedef的差别
  • (1)(1.13) SiK无线电高级配置(五)
  • (145)光线追踪距离场柔和阴影
  • (2)空速传感器
  • (2015)JS ES6 必知的十个 特性
  • (C)一些题4
  • (C语言)fread与fwrite详解
  • (Git) gitignore基础使用
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (第61天)多租户架构(CDB/PDB)
  • (第一天)包装对象、作用域、创建对象
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (论文阅读40-45)图像描述1
  • (每日一问)基础知识:堆与栈的区别
  • (三) diretfbrc详解
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (算法)Game
  • (算法)前K大的和
  • (转)Android学习笔记 --- android任务栈和启动模式
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .a文件和.so文件
  • .NET 5种线程安全集合
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Framework 3.5安装教程
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET6 命令行启动及发布单个Exe文件
  • .NET的微型Web框架 Nancy