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

这篇具有很好参考价值的文章主要介绍了MacOS初识SIP——解决快捷指令sh脚本报错Operation not permitted。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

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

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

MacOS初识SIP——解决快捷指令sh脚本报错Operation not permitted,杂七杂八的问题,macos

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

MacOS初识SIP——解决快捷指令sh脚本报错Operation not permitted,杂七杂八的问题,macos

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

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

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定位到详细的日志内容:

MacOS初识SIP——解决快捷指令sh脚本报错Operation not permitted,杂七杂八的问题,macos

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://www.toymoban.com/news/detail-846548.html

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

到了这里,关于MacOS初识SIP——解决快捷指令sh脚本报错Operation not permitted的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • `sh -c`命令——解决命令权限问题、一条命令中执行多个指令

    sh -c 在Shell中执行一个字符串作为命令,可以在一条命令中执行多个指令。 其中, command 是要执行的命令或命令串。 **1、 sh -c 属于非交互模式 在终端上敲入命令就可以显示对应结果,这样与终端进行交互执行命令的方式就称为交互模式。 非交互模式就是调用 bash 解释器,通

    2024年03月12日
    浏览(36)
  • Linux终端执行.sh脚本,提示权限不够的解决办法

    错误提示如下: [root]# ./run_train_p bash: ./run_train_p: 权限不够 解决方法 [root]# chmod 777 ./run_train_p [root]# ./run_train_p

    2024年02月14日
    浏览(33)
  • linux里root用户权限下chmod修改文件却报错:Operation not permitted的解决方法

    root权限。在家目录里有个test的文件夹,但是这里想要用chmod命令修改该文件夹的权限,却报错 chmod: changing permissions of ‘test’: Operation not permitted 可以通过执行以下命令来检查文件系统是否已挂载为只读模式: mount | grep ’ / ’ 该命令将列出根文件系统的详细信息,包括挂载

    2024年04月24日
    浏览(36)
  • 10.docker exec -it /bin/bash报错解决、sh与bash区别

    进入容器时,报如下错误 将bin/bash换成bin/sh 制作镜像时使用了精简版,只装了sh命令,未安装bash。 Shell是一种应用程序,该应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 是一个用 C 语言编写的程序,是用户使用 Linux 的桥梁。Shell 既是一种命令

    2024年04月08日
    浏览(49)
  • mysql 报错 ERROR 1396 (HY000): Operation ALTER USER failed for root@localhost 解决方案

    2024-4-3 段子手168 mysql use mysql; mysql select user, host from user; 可以看到 root 用户的 host 是 【%】,而非 localhost mysql ALTER USER ‘root’@‘%’ IDENTIFIED BY ‘123’; 1)再次查看 mysql 数据库中 user 表的 plugin 字段: mysql select user, host, plugin from user; 2)如果发现 root 用户是 caching_sha2_password

    2024年04月24日
    浏览(44)
  • MacOS - 简体中文输入法卡死解决方案(自动化脚本)

    本文使用自动化工具创建应用程序来一键运行脚本重启简体中文输入法的进程,从而解决macOS的假死问题。如果只想看看解决方法的话,可以跳转到“使用‘自动化’工具建立应用程序”段落。 我的电脑使用习惯可谓是很差,软件一直常驻后台,电脑几乎除了系统更新都不关

    2024年01月18日
    浏览(42)
  • RabbitMQ报错:unable to perform an operation on node ‘rabbit@xxx‘. Please see diagnostics...的解决方法

    我安装好了erlang以及RabbitMQ后,在控制台也开启了插件rabbitmq-plugins.bat enable rabbitmq_management(并未出错),直到检查RabbitMQ状态时,使用rabbitmqctl status,出现以下错误(图是我截的csdn的图,因为已经解决,当时并未截图,反正都一样): 解决方法:         1 、先关闭RabbitM

    2024年02月09日
    浏览(92)
  • Java - sh 脚本启动 jar 包等服务 - sh 脚本模板 - 适用于任何类似的服务启动

    该模板,每次运行一次都会 kill 掉原来的服务,然后重新启动 jar 包服务 1. Linux重启Java进程的.sh脚本详解

    2024年02月15日
    浏览(36)
  • MacOS安装openMP报错【已解决】

    error: Target “WLBG” links to: OpenMP::OpenMP_CXX but the target was not found. Possible reasons include: * There is a typo in the target name. * A find_package call is missing for an IMPORTED target. * An ALIAS target is missing. 最开始是报这个错,我以为是cmakeLists出错了,target_link_libraries里面加了 OpenMP::OpenMP_CXX 。但是我照

    2024年04月14日
    浏览(24)
  • 报错解决 one of the variables needed for gradient computation has been modified by an inplace operation

     one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [16, 64, 256, 256]], which is output 0 of LeakyReluBackward1, is at version 1;  最近跑代码遇到了这样的一个问题,在网上找了很多方法都没有很好的解决,今天就在这个博客里面将所有的解决办法整

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包