首页 > 系统相关 >Ubuntu的文件权限介绍

Ubuntu的文件权限介绍

时间:2024-06-14 10:03:16浏览次数:19  
标签:setuid 文件 Ubuntu 用户 setgid Linux 权限

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)

标签:setuid,文件,Ubuntu,用户,setgid,Linux,权限
From: https://blog.csdn.net/brucexia/article/details/139673537

相关文章

  • 速度与激情:解锁8款免费文件传输利器,让大数据秒传成为可能
    以下是8个免费高速文件传输工具的推荐,这些工具可以帮助您彻底告别数据线,使文件传输更加便捷和高效:1、百度网盘特点:云存储和共享应用,支持多种形式的文件存储和分享,提供大容量的免费存储空间。适用性:适合个人和团队进行文件管理和共享。2、夸克网盘 阿里巴巴旗下的智能搜索......
  • Ansible(ubuntu)
    1.安装Ansiblesudoaptupdatesudoaptinstallansible2.配置ansible主机1.将本机的密钥添加到目标服务器上2.追加公钥echo'$(cat~/.ssh/id_rsa.pub)'>>~/.ssh/authorized_keys远程追加sshusername@remote_host"echo'$(cat~/.ssh/id_rsa.pub)'>>~......
  • 简单的Makefile文件解析
    Makefile文件解析#commonmakefileheader#"$(变量)"、"$makefile内置变量"表示变量值DIR_INC=../../include #头文件相对路径DIR_BIN=../../bin #可执行文件的相对路径DIR_LIB=../../libs #库的相对路径TARGET =iat_online_record_sample #目标变量BIN_TA......
  • 关于CSDN解锁VIP文章-下载文件
    众所周知csdn上的东西,互抄的东西很多。而且收费也很答辩!这里推荐一个github上的一个项目,可以解锁vip文章和下载文件源码地址:https://gitcode.com/cuckooplus/csdn_downloadpublicclassCsdnBlogHandleServiceextendsMarkDownService{    @Override  prote......
  • 【Java】 探索Java中遍历文件夹的奥秘:获取文件夹内所有文件名
    >>【痕迹】QQ+微信朋友圈和聊天记录分析工具>>(1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。>>(2)内含QQ、微信聊天记录保存到本地的方法,真正实现自己数据自己管理。>>(3)数据可视化分析QQ、微信聊天记录,提取某一天的聊天记录与大模型对话。>>下载地......
  • 使用 Docker 卷来实现替换容器内文件为宿主机上的
    要将容器内的/usr/share/nginx/html目录替换成宿主机上的/path/html目录里的内容,你可以使用Docker卷来实现。以下是你需要做的修改:停止并删除现有的前端容器(如果它正在运行):docker-composedown--remove-orphans修改docker-compose.yml文件,在frontend服务中......
  • linux用户及用户组管理,目录或文件权限管理
            在Linux系统中,用户及用户组管理以及目录或文件权限管理是非常重要的系统管理任务。正确管理用户和用户组可以确保系统安全性和数据完整性,而正确设置文件和目录权限可以控制用户对系统资源的访问权限。1.用户及用户组管理对用户进行管理,首先要了解相关的指令......
  • ABP中使用HangFire和 Magicodes.IE(文件导出)中遇到的生命周期失效的解决
    实现功能:1,通过Magicodes.IE(不错的文件导入及导出组件,使用近5年了),导出10W+的数据;2,前端VUE调用导出大数据接口,报Http499超时,考虑后端用HangFire后台作业来执行具体任务,执行完成,把执行的结果返回给前端;实现动态导出功能的服务代码如下:publicclassOutputService:ITransientD......
  • javascript - 文件上传
    最简单的文件上传接口@ControllerpublicclassExcelCtrl{@ResponseBody@RequestMapping(value="upload",method=RequestMethod.POST)publicResultimportExcel(@RequestParamMultipartFilefile,HttpServletResponseresponse)throwsIOExceptio......
  • csv - 文件内容读取
    简单读取简单读取指的是,文件不包含特殊字符。读取方式:按行读取,然后按逗号进行拆分,一般只需要注意中文乱码。标准读取标准的csv文件,应当有这些特点:csv文件不是按行读取,而是按字符读取;csv文件每一行,字段总数并不是固定的;csv文件的字段,允许包含逗号和引号,这时候字段需要......