由于最近出现了一些蓝牙问题,我需要能够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
时才有意义。你可以使用来让某些东西运行sudo
sudoers
sudo
无密码。
......但听起来这样做会有巨大的安全风险。
这取决于你如何去做。
如果您允许
pkill
无需密码那么是的,您将允许pkill
和pkill 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 foo
或sudo pkill bluetoothd foo
仍会要求您输入密码(除非它们符合另一条NOPASSWD
规则或您的凭据正在被缓存)。
在构建你的时sudoers
,请记住如果有多个匹配,则使用最后一个匹配(不一定是最具体的匹配)。
[…] 但我担心该文件可以在没有权限的情况下进行编辑,从而再次带来巨大的安全风险。
如果您使用上述解决方案那么您将不需要这样的文件。
一般来说,如果您需要这样的文件,则将该文件创建为 root 所有,仅可由其所有者写入,并放置在 root 所有且仅可由其所有者写入的目录中。允许其他用户读取和进入该目录;允许其他用户读取并(如果您愿意)执行该文件。
例如: 目录及其中的文件归 拥有root:wheel
。目录的模式为755
,文件的模式为755
。只有以 root 身份才能编辑、覆盖、删除或替换此类文件。