linux/fs/namei.c/permission()

2023-05-16

/*
 * permission()
 *
 * is used to check for read/write/execute permissions on a file.
 * I don't know if we should look at just the euid or both euid and
 * uid, but that should be easily changed.
 */
// permission()函数用来检验当前进程对inode指向的文件是否有mask标示的权限
static int permission(struct m_inode * inode,int mask)
{
// 取出inode的i_mode,这表明了imode指向的文件本身的读写权限。
int mode = inode->i_mode;


/* special case: not even root can read/write a deleted file */
// inode->i_dev存在(i节点有对应的设备),并且inode->i_nlinks=0
// (即文件没有被引用),则表明这个文件是一个被删除了的文件。即使是
// 超级用户root也没有操作已删除文件的权限,因此return 0
if (inode->i_dev && !inode->i_nlinks)
return 0;
// 首先明白euid的含义。euid是进程task_struct中的一个short字段。一般
// 一个进程的euid等于运行这个进程的用户的uid。(同样地egid等于运行
// 这个进程的用户的gid),这样这个进程就有了运行进程的用户的权限设置了。
// 其次明白inode->i_uid的含义。i_uid用来标示inode指向的文件的uid,即这个
// 文件的宿主的uid。同样地,i_gid表明文件宿主所在的group的gid
// 当前进程的euid == inode->i_uid,表明运行进程的用户和该文件的宿主用户
// 是同一用户。此时inode文件在被自己的宿主使用,因此应该查三组权限位中的
// U(SUGO:即超级用户,宿主,宿主group,others中的U)
else if (current->euid==inode->i_uid)
// mode>>6,将U所在的三位移到了最底三位。
mode >>= 6;
// 若操作inode文件的用户不是文件宿主,但是是宿主group内的成员,则适用G权限位
else if (current->egid==inode->i_gid)
// mode>>3将G移到了最低3bit
mode >>= 3;
// 这里两个else if却没有最后的else,其实相当于是有个default的,default就是
// 对mode不做处理。因为default的情况对应着O权限位(即others),刚好是mode的
// 最低3bit,所以不用做什么处理。
// mode & 0007取出了mode的最低三位,再位与mask后,若等于mask说明mode表示的权限
// 包含mask,即当前进程有mask表示的操作权限,返回1.若不等则返回0.
// suser()宏用来判断当前进程的宿主是否是超级用户root(current->euid == 0)
// 超级用户对于所有文件具有操作权限,所以直接返回1.
if (((mode & mask & 0007) == mask) || suser())
return 1;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux/fs/namei.c/permission() 的相关文章

  • 如何用X11复制到剪贴板?

    使用 OS X 上的框架 我可以使用以下命令将 PNG 复制到粘贴板 在 C 中 显然我可以将 NSPasteboard 与 Cocoa 一起使用 include
  • gentoo crontab:为什么这个简单的 crontab 不起作用?

    我使用 GENTOO 发行版 crontab e 35 12 root php5 home www cron php 当我手动运行时 php5 php5 home www cron php 这有效 它向我发送了一封电子邮件 然后我检查日期
  • 停止服务时单元陷入故障状态(状态=143)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这是我的问题 我有 CentOS 和 java 进程在上面运行 Java进程是通过启动 停止脚本来操作的 它也创建了 java 实例的 p
  • 无法执行'x86_64-conda_cos6-linux-gnu-gcc':没有这样的文件或目录(pysam安装)

    我正在尝试安装 pysam 执行后 python path to pysam master setup py build 这个错误的产生是 unable to execute x86 64 conda cos6 linux gnu gcc
  • Inotify linux 监视子目录

    是否可以以这种模式监视目录 storage data usernames Download gt storage data Download 我需要监视每个用户的下载文件夹中是否进行了更改 也许我需要创建所有路径的列表 将其放入数组中 并在
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • 强制卸载 NFS 安装目录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案

随机推荐

  • 教程——OSMWebWizard

    教程 OSMWebWizard 有关事宜 osm web wizard提供一种最简单的方式开始sumo 基于一种openstreetmap的摘抄 你可以配置随机流量需求和可视化一种场景在sumo gui 这个教程可以指导你一步步从选择地图类
  • sumo-绕圈行驶

    绕圈行驶 在本教程中 xff0c 我们将使用 netedit 构建一个简单的圆形网络 xff0c 并使用重路由器使车辆绕圈行驶 所有定义文件都可以在 lt SUMO HOME gt docs tutorial circles 目录中找到 本
  • 教程——sumolympics

    SUMOlympics 本教程针对不同的交通模式设置了比赛 xff08 集体 100 米冲刺 xff09 您将学习如何在 netedit 中创建特殊车道和 xff08 非常简单的 xff09 红绿灯 xff0c 使用不同的车辆类别来定义车辆
  • sumo 教程——高速公路

    本教程涵盖了在多车道高速公路上创建异构流以及修改和保存视图设置的非常基本的元素 修建高速公路 编辑几何点 打开 netedit 创建一个虚构的高速公路 我们一开始就保持这个非常简单 xff0c 并考虑一个没有入口或出口的路段 按e进入边创建
  • sumo教程——Manhattan

    介绍 本教程介绍了如何在 SUMO 中构建曼哈顿移动模型 在这个模型中 xff0c 固定数量的车辆在曼哈顿电网网络上随机行驶 所有文件也可以在 lt SUMO HOME gt docs tutorial manhattan 目录中找到 创建
  • 基于51单片机的双通道DHT11温湿度显示器(LCD1602)

    基于STC89C51单片机的双通道DHT11实时温湿度显示系统 xff08 LCD1602 xff09 前言题目要求实现的功能思路介绍 代码部分注意事项驱动部分LCD1602驱动按键驱动 主要模块初始化DHT11驱动中断服务程序显示函数主函
  • 【21-7-25笔记】SR(Segment Routing)详解

    第一卷 第一章 简介 1 11 SRv6 SRv6 将SR框架应用到IPv6数据平面 SRv6对IPv6的价值至关重要 xff0c 将极大地影响未来的IP基础设施部署 xff0c 无论是在数据中心 xff0c 大规模汇聚网络 xff0c 还
  • javascript编写学生,查询学校学生

    lt DOCTYPE html gt lt head gt lt head gt lt style gt table width 400px height 400px border 1px solid red div float left
  • A-Frame基础用法

    简介 x1f170 Frame 是一个用来构建虚拟现实 xff08 VR xff09 应用的网页开发框架 由WebVR的发起人Mozilla VR 团队所开发 xff0c 是当下用来开发WebVR内容主流技术方案 WebVR是一个完全开源的
  • 双色球小程序(关于对数组的使用)

    span class token keyword package span 双色球 span class token punctuation span span class token keyword import span java sp
  • IDEA: 遇到问题Error during artifact deployment. See server log for details,解决

    目录 一 jar 包有有些没能识别 xff0c tomcat没有配置好 xff01 二 这个一般代码错了 xff1a 三 使用更低一点版本的Tomcat 在学习JavaWeb的时候 xff0c 遇到一个著名的报错 xff1a Error d
  • VNC死机的处理方法

    目录 1 打开MobaXterm并登录 2 连续输入以下命令 xff1a 1 打开MobaXterm并登录 2 连续输入以下命令 xff1a conda deactivate 回车 vncserver kill 3 回车 vncserver
  • js异步操作

    一 异步操作概述 单线程模型 单线程模型指的是 xff0c JavaScript 只在一个线程上运行 也就是说 xff0c JavaScript 同时只能执行一个任务 xff0c 其他任务都必须在后面排队等待 程序里面所有的任务 xff0c
  • 【写sql时遇到的bug:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber】

    报错 xff1a org xml sax SAXParseException lineNumber 1 columnNumbe 修改后的代码片段 在使用 64 Select 注解编写sql的时候 xff0c 原先写的 gt 61 和 lt
  • @Scheduled 定时任务不执行

    一 排查代码中添加的定时任务步骤是否正确 启动类上加 64 EnableScheduling 注解定时任务类上加 64 Component定时方法上加 64 Scheduled span class token annotation pun
  • (09)Linux命令【mkdir命令】

    09 Linux命令 mkdir命令 1 1 目录 1 目录 2 Linux系统介绍 3 Linux 应用领域 4 Linux命令 mkdir命令 5 结语 1 2 Linux系统介绍 Linux 全称GNU Linux 是一种免费使用和自
  • 银河麒麟高级服务器操作系统V10上基于Docker、x11vnc-desktop打造基于容器的在线IDEA arm64开发环境方案

    前言 在线IDE目前表现比较好的有云效 xff0c 其功能主要还是以Web方式提供在线vscode集成开发环境 xff0c 启动编辑环境初步推断为内部启动一个专用语言的虚拟机或者容器 xff0c clone源码 优点是客户端只需要一个浏览器
  • FreeRTOS--中断管理

    异常是指任何打断处理器正常执行 xff0c 并且迫使处理器进入一个由有特权的特殊指令执 行的事件 内部事件 xff08 像处理器指令运行产生的事件 xff09 引起的异常称为同步异常 异步异常主要是指由于外部异常源产生的异常 xff0c 是
  • Centos8无法联网问题解决!

    大家好我是菜鸟阿贵 xff0c 今天装了一个centos8发现不能联网 xff0c 甚至在终端都不能ping通 xff0c 在网上找了半天 xff0c 好多博主都是无脑复制别人的 xff0c 自己估计都没有研究过 xff0c 什么修改配置啊
  • linux/fs/namei.c/permission()

    permission is used to check for read write execute permissions on a file I don 39 t know if we should look at just the e