macOS:不使用 sudo 来 pkill 特定进程?

macOS:不使用 sudo 来 pkill 特定进程?

由于最近出现了一些蓝牙问题,我需要能够sudo pkill bluetoothd非常频繁地运行,因此我决定创建一个 shell 脚本快捷方式,将其放在菜单栏上以便快速访问。我通常需要在紧急情况下运行此命令,因此我希望您能理解输入密码或等待 Touch ID 最终识别我的手指很快就会变得烦人。

起初我考虑使用 blueutil,因为它不需要 sudo,但不幸的是它似乎不能正常工作(它重新连接到我的设备的速度比终止 bluetoothd 慢),所以除非有办法让 blueutil 更快,否则我想避免使用它。

然后我考虑修改我的 sudoers 文件,使 pkill 无需 sudo 即可运行,但这样做听起来会带来巨大的安全风险。因此,我想创建一个 .command 文件并在我的 sudoers 文件中指定它,但我担心该文件可以在没有权限的情况下进行编辑,这又会带来巨大的安全风险。

我正在寻找最好的方法来做到这一点,但如果有一种方法可以让 bluetoothd 无需 sudo 即可被杀死,或者让 .command 文件可执行但不可写入,请告诉我。

提前致谢! :)

答案1

然后我考虑修改我的sudoers文件以使其pkill无需运行sudo......

你不能使用sudoers来让某些东西在没有 的情况下运行sudo。当且仅当涉及sudoers时才有意义。你可以使用来让某些东西运行sudosudoerssudo 无密码

......但听起来这样做会有巨大的安全风险。

这取决于你如何去做。

  • 如果您允许pkill无需密码那么是的,您将允许pkillpkill anything,以及pkill anything and_more …

  • 如果您特别允许pkill bluetoothd不使用密码,那么您将只允许使用pkill一个参数bluetoothd;您pkill something_else甚至不允许pkill bluetoothd something_more

相关行sudoers如下所示:

arber ALL=(ALL) NOPASSWD: /full/path/to/pkill bluetoothd

重点是sudo pkill foosudo pkill bluetoothd foo仍会要求您输入密码(除非它们符合另一条NOPASSWD规则或您的凭据正在被缓存)。

在构建你的时sudoers,请记住如果有多个匹配,则使用最后一个匹配(不一定是最具体的匹配)。


[…] 但我担心该文件可以在没有权限的情况下进行编辑,从而再次带来巨大的安全风险。

如果您使用上述解决方案那么您将不需要这样的文件。

一般来说,如果您需要这样的文件,则将该文件创建为 root 所有,仅可由其所有者写入,并放置在 root 所有且仅可由其所有者写入的目录中。允许其他用户读取和进入该目录;允许其他用户读取并(如果您愿意)执行该文件。

例如: 目录及其中的文件归 拥有root:wheel。目录的模式为755,文件的模式为755。只有以 root 身份才能编辑、覆盖、删除或替换此类文件。

相关内容