MacOS初识SIP——解决快捷指令sh脚本报错Operation not permitted

news2024/12/23 11:04:37

前言

因为一些原因,设计了一套快捷指令,中间涉及到一个sh脚本的运行,通过快捷指令运行时就会报错:operation not permitted

奇怪的是在快捷指令窗口下运行一切正常,但是从其他地方直接调用,例如通过Command+Space 打开Spotlight Search下执行就换出现报错。

以测试用快捷指令”Mytest“为例,快捷指令窗口下运行成功截图:

1

通过Spotlight Search运行Mytest失败截图:

在这里插入图片描述

接下去记录下整个排查过程。

省流:解决办法:换个目录,将脚本从系统目录移动到用户目录下。

mv /users/xavier/Downloads/tmp/test.sh /users/xavier/MyScripts/test.sh

文章目的:分享排查思路和过程、介绍SIP

Step 1:初步检查

遇到 “operation not permitted” 错误,这通常意味着系统安全设置或权限设置阻止了脚本的执行。

接下去进行了如下检查:

  1. 脚本内容:检查脚本内容,确保脚本中没有尝试执行需要更高权限的操作。没问题。
  2. sh脚本执行权限chmod 755 test.sh,具有可执行权限。没问题
  3. 系统偏好设置:打开“系统偏好设置” > “安全性与隐私” > “隐私”标签页,检查“完全磁盘访问”列表,给快捷指令应用或终端应用(terminal)访问磁盘上文件的权限。 没问题。
  4. Gatekeeper 设置:在“安全性与隐私” > “通用”标签页中,设置允许从“App Store 和被认同的开发者”或“任何来源”安装应用。没问题
  5. 管理员权限:尝试以管理员身份运行sh脚本。无影响,还是不行。

在我当前已有认知中所有可能的方法都不能解决问题,那么要尝试定位问题产生的原因。

Step 2:日志调查

这是一个超出我当前认知的一个问题,需要一步步排查定位问题,目前快捷指令给出的反馈.../test.sh: Operation not permitted太粗糙,需要找更精细的报错日志。

使用MacOS的 控制台应用(Console.app)以获取更多关于错误的详细信息。

又重复执行了一边快捷指令,使用Console.app抓取日志信息,然后通过搜索test.sh定位到详细的日志内容:

在这里插入图片描述

BackgroundShortcutRunner进程就是快捷指令app,注意到在它上面有一条kernel进程的报错信息,内容如下:

System Policy: bash(1538) deny(1) file-read-data /Users/xavier/Downloads/tmp/test.sh

接下去就是搜索该报错信息是什么意思,怎么解决。

Step 3:定位问题

System Policy: bash(1538) deny(1) file-read-data /Users/xavier/Downloads/tmp/test.sh

通过搜索得知,这个日志信息表明 macOS 的系统策略(很可能是 SIP,即 System Integrity Protection)阻止了 bash 进程(进程ID为1538)读取 /Users/xavier/Downloads/tmp/test.sh 文件数据。

问题就在这个SIP策略。当脚本位于受 SIP 保护的目录中,或者脚本试图执行被 SIP 保护的操作,就可能会遇到权限问题。

这次遇到的情况就是因为我们的脚本被放在了受SIP保护的目录中,因此解决办法非常简单。

在解决问题之前,我想先了解下SIP。

SIP是什么?

SIP ,即系统完整性保护(System Integrity Protection),是 macOS 的一个安全功能,用于保护系统文件和目录,防止这些文件及目录被没有特定权限的进程修改,包括root用户或拥有root权限的用户。

SIP通过一系列内核强制实施的机制来达成这一目标,它限制了关键系统文件的可写性,并对特定关键文件系统位置中的组件进行只读限制。

SIP的保护范围包括多个重要的系统目录和文件,例如/System、/usr、/bin、/sbin以及OSX的预装应用。这些目录和文件在系统启动时会被加载,并且对于保持系统的稳定性和安全性至关重要。SIP确保这些文件和目录不会被恶意代码或其他未经授权的进程修改。

Step 4:解决问题

之前说了这次遇到的问题就是因为我们的脚本被放在了受SIP保护的目录中,因此解决办法非常简单,只需要将脚本换个位置,放到用户目录下即可,SIP 通常不会阻止读取用户目录下的文件。

移动脚本到用户目录

mv /users/xavier/Downloads/tmp/test.sh /users/xavier/MyScripts/test.sh

当然还有一种办法,就是禁用SIP,但是强烈不推荐,后果自负,我没试过

  • 如果确定需要禁用 SIP 来运行脚本,请小心操作,因为这可能会降低系统的安全性。
  • 在终端运行 sudo csrutil status 检查 SIP 的状态,
  • 使用 sudo csrutil disable ,禁用SIP(需要重启)。

总结

在排查问题过程中,要尽可能找细节全面的日志信息进行辅助判断。

写程序过程中也要注意报错信息处理,能帮助我们更快定位和解决问题。

(又水一篇文章~ 😆 )

  • 原文:https://bthoughts.top/posts/macos-%E5%88%9D%E8%AF%86sip/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1581631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

典型新能源汽车热管理系统方案分析

目前行业具有代表性的热管理系统有PTC电加热方案、热泵方案(特斯拉八通阀热泵、吉利直接式热泵)、威马的柴油加热方案以及以理想为代表的插电式混动车方案。 小鹏P7整车热管理方案分析(PTC电加热方案) 小鹏P7作为小鹏汽车的第2款…

免费Docker容器服务Koyeb和Zeabur介绍及推荐

想搭建个演示站点仅是演示用。在哪找免费的云服务?还是有很多的。前面介绍过replit,这里介绍下几个提供免费云服务的的PaaS平台Koyeb和Zeabur,Zeabur平台或许是最好的选择。比如把个人的博客免费部署上去,也是个不错的选择呢。 前…

JVM字节码与类的加载——类的加载过程详解

文章目录 1、概述2、加载(Loading)阶段2.1、加载完成的操作2.2、二进制流的获取方式2.3、类模型与Class实例的位置2.4、数组类的加载 3、链接(Linking)阶段3.1、链接阶段之验证(Verification)3.1.1、格式检查3.1.2、字节码的语义检查3.1.3、字节码验证3.1.4、符号引用验证 3.2、…

PVE下安装配置openwrt和ikuai

开端 openwrt 和 ikuai 是比较出名的软路由系统。我最早接触软路由还是因为我的一个学长要改自己家里的网络,使用软路由去控制网络。我听说后便来了兴致,也在我家搞了一套软路由系统。现在我已经做完了,就想着写个文章记录一下。 软路由简介…

GFS部署实验

目录 1、部署环境 ​编辑 2、更改节点名称 3、准备环境 4、磁盘分区,并挂载 5. 做主机映射--/etc/hosts/ 6. 复制脚本文件 7. 执行脚本完成分区 8. 安装客户端软件 1. 安装解压源包 2. 创建gfs 3. 安装 gfs 4. 开启服务 9、 添加节点到存储信任池中 1…

应急响应-拒绝服务钓鱼指南DDOS压力测试邮件反制分析应用日志

知识点 1、CC攻击分析 2、钓鱼邮件分析 3、内网渗透分析 一、演示案例-内网应急-日志分析-爆破 MSSQL-1433 SMB-445 二、演示案例-红队APT-钓鱼邮件-内容&发信人&附件 如何分析邮件安全性: 1、看发信人地址 2、看发信内容信息 3、看发信内容附件 看后…

2011年认证杯SPSSPRO杯数学建模B题(第一阶段)生物多样性的评估全过程文档及程序

2011年认证杯SPSSPRO杯数学建模 B题 生物多样性的评估 原题再现: 2010 年是联合国大会确定的国际生物多样性年。保护地球上的生物多样性已经越来越被人类社会所关注,相关的大规模科研和考察计划也层出不穷。为了更好地建立国际交流与专家间的合作&…

UML2.0在系统设计中的实际使用情况

目前我在系统分析设计过程中主要使用UML2.0来表达,使用StarUML软件做实际设计,操作起来基本很顺手,下面整理一下自己的使用情况。 1. UML2.0之十三张图 UML2.0一共13张图,可以分为两大类:结构图-静态图,行…

学习Rust的第一天:基础知识

Introduction 介绍 I am Shafin Murani is a software development student and I am documenting every single day of my progress in learning rust. This is the first article of the series. Shafin Muranishi 是一名软件开发专业的学生,这是他在30天内记录学…

苹果电脑(Mac)怎么清理 itunes 备份?

苹果电脑用户广泛利用 iTunes 应用程序对 iPhone 或 iPad进行定期备份,以确保珍贵的数据安全无虞。然而,随着备份历史的增长,它们会在磁盘上积累大量空间,尤其当您频繁为多台设备备份时,存储资源可能会迅速消耗殆尽。为…

Docker部署Logstash同步Mysql数据到ES

1、准备配置文件文件夹 2、部署logstash & elasticsearch docker pull docker.elastic.co/logstash/logstash:7.15.0 ## 替换{你的ES地址}为ES地址 docker run -d --name logstash -p 5044:5044 -p 9600:9600 -v D:\logstash\data\:/usr/share/logstash/data -v D:\logst…

服务器数据恢复—V7000存储raid5数据恢复案例

服务器数据恢复环境: P740AIXSybaseV7000存储阵列柜,阵列柜上有12块SAS机械硬盘(包括1块热备盘)。 服务器故障: 管理员在日常巡检过程中发现阵列柜中有一块磁盘发生故障,于是更换磁盘并同步数据&#xff0…

Kafka基础/1

Kafka 概念 Kafka 是一个分布式的流媒体平台。 应用:消息系统、日志收集、用户行为追踪、流式处理 特点:高吞吐量、消息持久化、高可靠性、高扩展性 术语: broker:Kafka 的服务器,Kafka 当中每一台服务器&#xf…

Visual Studio Code 终端为管理员权限

第一部 1、 Visual Studio Code 快捷方式启动选项加上管理员启动 第二步 管理员方式运行 powershell Windows 10的任务栏自带了搜索。或者开始菜单选搜索只需在搜索框中输入powershell。 在出来的搜索结果中右击Windows PowerShell,然后选择以管理员方式运行。 执…

《前端面试题》- JS基础 - call()、apply()、bind() 的区别

call 、bind 、 apply 这三个函数的功能都是改变this的指向问题,但是也存在一定的区别。 call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,apply 的所有参数都必须放在一个数组里面传进去bind 除了返回是函数以外,它 的参数和…

Training - 使用 WandB 配置 可视化 模型训练参数

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137529140 WandB (Weights&Biases) 是轻量级的在线模型训练可视化工具,类似于 TensorBoard,可以帮助用户跟踪…

js语法---简单理解promise

promise语法结构 创建一个promise对象 let p new Promise(function(resolve,reject){// 执行的操作...// 判断操作的结果并执行对应的回调函数if(){resolve()}else{reject()} } 以上实例化了一个promise对象,其中包含了一个参数function,这个函数会在…

【配电网故障定位】基于二进制粒子群算法的配电网故障定位 12节点配电系统故障定位【Matlab代码#76】

文章目录 【获取资源请见文章第5节:资源获取】1. 配电网故障定位2. 二进制粒子群算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 配电网故障定位 配电系统故障定位,即在配电网络发生故障的时候&…

了解Vue中的 computed 计算属性

目录 1. computed计算属性介绍和基础语法 1.1. 概念 1.2. 语法 2. “计算属性”和“方法”的对比 2.1. computed 计算属性 2.1.1. 作用 2.1.2. 语法 2.2. methods 方法 2.2.1. 作用 2.2.2. 语法 2.2.3. 缓存特性(提升性能) 3. computed 计算…

ssm“最多跑一次”微信小程序

采用技术 ssm“最多跑一次”微信小程序的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 系统实现的功能 本次设计任务是要设计一个“最多跑一次”微信小程序,…