linux超级用户权限 rwx_Linux的RWX权限管理实现详解及chmod使用
大家好,又见面了,我是你们的朋友全栈君。
前文我们对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的一个实例。
图1 RWX权限示例
RWX的组成及含义如图2所示。整个权限描述分为4段,第一段用于描述该文件的类型,可以是常规文件(-)、目录(d)、块设备(b)、链接(l)和字符设备(c)等等。
图2 RWX权限属性含义
后面三段是文件具体的权限描述信息了,分别是文件主权限、组用户权限和其它用户(UGO)的权限。通过上述三段的组合就可以实现比较复杂的权限控制。比如允许某个用户的文件可以被其它用户读,但是不可以改写和执行等等。
上述权限控制信息中包含rwx-四种字符,具体含义如下:r表示对于该用户可读,对于文件来说是允许读取内容,对于目录来说是允许读取其中的文件;
w表示对于该用户可写,对于文件来说是允许修改其内容,对于目录来说可以写信息到目录中,即可以创建、删除文件、移动文件等操作。
x表示对于该用户可执行,对于文件来说就是可以执行该文件,对于目录来说则是可以进入目录;可以搜索(能用该目录名称作为路径名去访问它所包含的文件和子目录)
从用户角度来说文件的权限是通过rwx字符串表示的,其实在底层实现就是一些标示位。如果该位置1则表示有该权限,否则没有该权限。这些信息保持在文件的inode信息中。
图3中的宏定义就是Linux内核中对文件权限属性的宏定义,例如S_IRUSR表示主权限可读的标示。这里需要理解的是每个标示占用一个位,本文暂时不过多介绍,这里先有个概念就可以了。
图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用户创建文件时,得到文件的属性如下所示。
该小程序的代码如下,请作为参考。
当我们在zhangsn用户下,通过该程序访问test_root的时候,open函数会返回13的错误码。该错误的含义是拒绝访问。因为test_root是属于root用户的文件,只能被该用户访问,因此会返回拒绝访问的错误。
内核代码解释
对于操作系统的API来说,打开文件的整个流程如图所示。最终do_last函数会调用到一个名为may_open的函数,而该函数则调用inode_permission函数。该函数实现了具体的权限检测功能。
基本的权限检查是在acl_permission_check函数中完成的,整个调用过程为inode_permission->do_inode_permission->generic_permission->acl_permission_check。
该函数的逻辑也比较简单,可以看出,该函数先检查具体的用户关系,然后检查组关系,最后检查权限是否允许。
对于RWX权限控制,其代码实现还是比较简单的。当然,除了打开文件外,还有其它API也涉及到权限控制相关的内容,比如重命名、删除文件和创建目录等等。由于原理都是相似的,本文不再赘述。
以下是付费内容
修改文件的权限的常用工具
介绍了RWX权限管理的原理和内核代码实现,我们接下来看看如何对文件和目录的权限进行调整。这部分内容相对比较简单,我们只介绍一下主要内容,更详细的使用请参考man手册。
当然,为了调整资源的所属关系,我们经常需要调整文件的权限属性。经常使用命令包括chmod和chown等,这些命令就是用来修改文件的访问权限信息的。其中chmod用于修改文件权限熟悉,而chown则用于修改文件所属的用户和组。
chmod命令
例如我们想让文件b具有执行权限,那么可以执行如下命令:sudo chmod x b
执行后结果如图4所示,可以对比图中上下两部分,看到文件b的权限熟悉发生了变化。其中增加了可执行属性。
由于底层是二进制的方式存储的,chmod也是支持通过数字的方式修改其权限属性的。比如执行如下命令:sudo chmod 777 b
由于777其实就是使所有的RWX为1,也即可以被任何用户和组访问。执行效果如下。
chown命令
命令chown用于修改文件的所属用户信息,比如将属于root的文件test3改为属于itworld123,那么可以执行如下命令。sudo chown itworld123:itworld123 test3
chgrp命令
从名字上可以看出,命令chgrp用于修改文件的所属组信息。使用方法很简单,本文不再赘述。
关于RWX的权限访问控制就先介绍到这里。其实除了RWX权限控制之外,还有其它类型的权限控制,本文暂时不做介绍。后续我们在详细介绍关于Linux文件系统的其它方面的内容。文章后期可能会进行错误更正和内容更新,关注我们更方便了解内容变化。
这是一个有温度的公众号
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138732.html原文链接:https://javaforall.cn
相关文章
- Linux终端:实现无限行记录的奥秘(linux终端行数)
- Linux中权限配置的深度探索(linux权限配置)
- Linux 权限不足:如何解决?(linux提示权限不够)
- Linux下给文件添加用户权限(linux文件添加用户)
- 系统老机械变为新神奇:老电脑安装Linux系统(老电脑装linux)
- 管理Linux服务进程管理:高效实现服务优化(linux服务进程)
- Linux查看服务状态:从容管理系统运行(linux查看服务状态)
- 红帽Linux:实现安全且强大的计算机(红帽linux有什么用)
- 践Linux实践:实现无缝体验(linux实)
- 私房菜探索鸟哥的Linux私房菜(鸟哥的linux)
- Linux中更改文件名的方法(linux文件更名)
- 挑战Linux:源码安装你的软件(linux下源码安装软件)
- 探索Linux之路:如何自学成为专家(怎么自学linux)
- 磁盘Linux识别NTFS磁盘的方法简介(linux识别ntfs)
- 禁用Linux防火墙:如何轻松实现危险功能(关闭linux的防火墙)
- Linux下快速切换服务器实现技巧(linux切换服务器)
- 实现Linux汉语输入——安装输入法(linux装输入法)
- 我的Linux:运用操作系统技能实现个人工作和生活的完美融合(个人用linux)
- 如何在Linux上关闭声音(linux关闭声音)
- 掌握Linux下授权命令,轻松管理文件访问权限(linux下授权命令)
- Linux环境:让无权限用户获得访问权(linux授权用户组)
- Linux中锁的具体实现原理及方法简述(linux锁的实现)
- Linux培训总结:学习经验与技能分享(linux培训总结)
- 如何使用Linux启动.sh文件(linux启动sh)
- 警惕!Linux系统遭受手机攻击的危险(linux 攻击 手机)