linux超级用户权限 rwx_Linux的RWX权限管理实现详解及chmod使用

linux超级用户权限 rwx_Linux的RWX权限管理实现详解及chmod使用前文我们对Linux操作系统的权限管理进行了简要的介绍。今天我们就详细介绍一下关于RWX权限管理的更多细节。很多同学对RWX权限都有一些了解,但是要说出子丑来恐怕就不那么容易了。Linux的RWX权限控制又称为DAC(DiscretionaryAccessControl,自主访问控制)。DAC机制就是指对象的拥有者可以任意修改或授予此对象相应的权限。从主体和客体的角度来说,就是主体对其拥有的…

大家好,又见面了,我是你们的朋友全栈君。

前文我们对Linux操作系统的权限管理进行了简要的介绍。今天我们就详细介绍一下关于RWX权限管理的更多细节。很多同学对RWX权限都有一些了解,但是要说出子丑来恐怕就不那么容易了。

Linux的RWX权限控制又称为DAC(Discretionary Access Control,自主访问控制)。DAC 机制就是指对象的拥有者可以任意修改或授予此对象相应的权限。从主体和客体的角度来说,就是主体对其拥有的客体,有权决定自己和其他主体对该客体应具有怎样的访问权限。比如在Linux中的某个用户A可以随意设定UGO(即:本用户、本用户组、其他用户)对该文件的RWX(即:读、写、执行)权限。

本文将从RWX最基本的使用和原理入手,然后深入Linux操作系统内核实现,深层次的剖析RWX的实现细节。

RWX权限基本组成及原理

RWX访问控制恐怕是我们见得最多的访问控制了。当我们通过ls命令获取文件的详细信息时,其前面的rwx字符串就是对文件权限的标示,而后面跟的itworld13 itworld123则是其所属用户和组的信息。如图1就是RWX的一个实例。

177166354_1_20191203084602878

图1 RWX权限示例

RWX的组成及含义如图2所示。整个权限描述分为4段,第一段用于描述该文件的类型,可以是常规文件(-)、目录(d)、块设备(b)、链接(l)和字符设备(c)等等。

177166354_2_2019120308460334

图2 RWX权限属性含义

后面三段是文件具体的权限描述信息了,分别是文件主权限、组用户权限和其它用户(UGO)的权限。通过上述三段的组合就可以实现比较复杂的权限控制。比如允许某个用户的文件可以被其它用户读,但是不可以改写和执行等等。

上述权限控制信息中包含rwx-四种字符,具体含义如下:r表示对于该用户可读,对于文件来说是允许读取内容,对于目录来说是允许读取其中的文件;

w表示对于该用户可写,对于文件来说是允许修改其内容,对于目录来说可以写信息到目录中,即可以创建、删除文件、移动文件等操作。

x表示对于该用户可执行,对于文件来说就是可以执行该文件,对于目录来说则是可以进入目录;可以搜索(能用该目录名称作为路径名去访问它所包含的文件和子目录)

从用户角度来说文件的权限是通过rwx字符串表示的,其实在底层实现就是一些标示位。如果该位置1则表示有该权限,否则没有该权限。这些信息保持在文件的inode信息中。

图3中的宏定义就是Linux内核中对文件权限属性的宏定义,例如S_IRUSR表示主权限可读的标示。这里需要理解的是每个标示占用一个位,本文暂时不过多介绍,这里先有个概念就可以了。

177166354_3_20191203084603128

图3 权限宏定义

另外一个需要注意的是目录内文件对目录属性的集成性。也就是如果目录属于用户itworld123,而其中的文件属于itworld123t1。如果itworld123对该文件没有写权限,那么强制写的情况下文件的权限会变为itworld123。

RWX权限管理的内核实现

前面我们看到了内核中定义的一些宏定义。接下来我们深入的分析一下,在内核中操作系统是如何控制用户和进程的访问权限的。

操作系统API及说明

任何文件的访问都涉及到文件打开的动作,因此我们先从文件系统的打开接口讲起。在Linux操作系统中打开接口是open函数,该函数的原型如下:int open(const char *pathname, int flags, mode_t mode);

该函数中第一个参数是文件名,第二个参数flags是打开文件的属性,包括O_RDONLY、 O_WRONLY或者O_RDWR,也即只读、直写和可读写。

第三个参数则是mode是在创建的时候使用的,可以指定文件的RWX访问权限属性。具体属性的定义在前面代码中展示过,包括如下宏定义:S_IRWXU 00700 用户(文件所有者)具有读、写和执行权限。S_IRUSR 00400 用户有读权限S_IWUSR 00200 用户有写权限S_IXUSR 00100 用户有执行权限S_IRWXG 00070 组具有读、写和执行权限。S_IRGRP 00040 组有读权限S_IWGRP 00020 组有写权限S_IXGRP 00010 组有执行权限S_IRWXO 00007 其他用户具有读、写和执行权限。S_IROTH 00004 其他用户具有读权限。S_IWOTH 00002 其他用户具有写权限。S_IXOTH 00001 其他用户具有执行权限。

这些旗标可以通过或的方式进行组合,从而创建具有期望访问权限的文件。文件的UG属性则是继承自进程的用户和组。例如我们通过一个小程序实现创建文件的功能,当分别用root用户和zhangsn用户创建文件时,得到文件的属性如下所示。

177166354_4_20191203084603331

该小程序的代码如下,请作为参考。

177166354_5_20191203084603378

当我们在zhangsn用户下,通过该程序访问test_root的时候,open函数会返回13的错误码。该错误的含义是拒绝访问。因为test_root是属于root用户的文件,只能被该用户访问,因此会返回拒绝访问的错误。

内核代码解释

对于操作系统的API来说,打开文件的整个流程如图所示。最终do_last函数会调用到一个名为may_open的函数,而该函数则调用inode_permission函数。该函数实现了具体的权限检测功能。

177166354_6_20191203084603503

基本的权限检查是在acl_permission_check函数中完成的,整个调用过程为inode_permission->do_inode_permission->generic_permission->acl_permission_check。

该函数的逻辑也比较简单,可以看出,该函数先检查具体的用户关系,然后检查组关系,最后检查权限是否允许。

177166354_7_20191203084603566

对于RWX权限控制,其代码实现还是比较简单的。当然,除了打开文件外,还有其它API也涉及到权限控制相关的内容,比如重命名、删除文件和创建目录等等。由于原理都是相似的,本文不再赘述。

以下是付费内容

修改文件的权限的常用工具

介绍了RWX权限管理的原理和内核代码实现,我们接下来看看如何对文件和目录的权限进行调整。这部分内容相对比较简单,我们只介绍一下主要内容,更详细的使用请参考man手册。

当然,为了调整资源的所属关系,我们经常需要调整文件的权限属性。经常使用命令包括chmod和chown等,这些命令就是用来修改文件的访问权限信息的。其中chmod用于修改文件权限熟悉,而chown则用于修改文件所属的用户和组。

chmod命令

例如我们想让文件b具有执行权限,那么可以执行如下命令:sudo chmod x b

执行后结果如图4所示,可以对比图中上下两部分,看到文件b的权限熟悉发生了变化。其中增加了可执行属性。

177166354_8_20191203084603691

由于底层是二进制的方式存储的,chmod也是支持通过数字的方式修改其权限属性的。比如执行如下命令:sudo chmod 777 b

由于777其实就是使所有的RWX为1,也即可以被任何用户和组访问。执行效果如下。

177166354_9_20191203084603769

chown命令

命令chown用于修改文件的所属用户信息,比如将属于root的文件test3改为属于itworld123,那么可以执行如下命令。sudo chown itworld123:itworld123 test3

chgrp命令

从名字上可以看出,命令chgrp用于修改文件的所属组信息。使用方法很简单,本文不再赘述。

关于RWX的权限访问控制就先介绍到这里。其实除了RWX权限控制之外,还有其它类型的权限控制,本文暂时不做介绍。后续我们在详细介绍关于Linux文件系统的其它方面的内容。文章后期可能会进行错误更正和内容更新,关注我们更方便了解内容变化。177166354_10_20191203084603831这是一个有温度的公众号177166354_12_20191203084603941

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138732.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python数据分析的过程记录(二)

    Python数据分析的过程记录(二)Python数据分析的过程记录(二)文章目录Python数据分析的过程记录(二)一、需求介绍二、需求分析三、代码实现一、需求介绍二、需求分析三、代码实现

  • Google资深工程师深度讲解Go语言-内建容器(三)[通俗易懂]

    Google资深工程师深度讲解Go语言-内建容器(三)

  • adb安装教程(详细)

    adb安装教程(详细)adb安装适用系统安装包安装教程适用系统windows安装包adb官网下载:https://developer.android.com/studio/releases/platform-tools.htm:百度网盘安装包地址:链接:https://pan.baidu.com/s/1FCCnZuL3LuRbyS-zOfUgDQ提取码:zvv5安装教程解压安装包(1)可将安装包解压到电脑的任一路径下(最好不是C盘)添加路径到环境变量下(1)添加的路径:打开adb文件夹,

  • 站点开发和企业级开发有什么差别?[通俗易懂]

    站点开发和企业级开发有什么差别?

  • ssh配置命令_ssh config配置

    ssh配置命令_ssh config配置文章目录Linux_day05一.运行模式1.init2.systemd==二.用户与用户组管理==1.用户管理**a.添加用户**(linux中允许一个用户属于多个用户组)·b.修改用户信息c.设置密码d.**删除用户**2.用户组管理a.用户组添加b.用户组修改c.删除用户组三.网络设置扩展:创建快捷方式==四.ssh服务==1.远程终端2.通过ssh进行远程文件互相传输Linux_day05一.运行模式也称运行级别在过去Linux中存在一个进程:init(initialize,初始化);

  • 计算机病毒的分类

    计算机病毒的分类病毒与木马病毒:指编制或在计算机程序中插入的破坏计算机功能或破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或程序代码。木马:是一种后门程序,被黑客用作控制远程计算机的工具。木马与病毒不同的是,木马不会自我繁殖,并不会刻意地感染其他文件,它的作用就是为黑客打开远程计算机的门户,从而可以让黑客来远程控制计算机,使黑客获取有用的信息。病毒是自动破坏目标计算机,而木马需要人为的去操控…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号