【发布时间】:2022-10-16 18:08:18
【问题描述】:
目标是允许 TouchID 用于 sudo 命令而不是密码。这可以通过将行auth sufficient pam_tid.so 添加到文件/etc/pam.d/sudo 中来实现。
问题是,MacOS 在每次更新后都会重置此文件的任何更改,因此我决定使用 AppleScript 使用 Automator.app 自动执行此任务,然后在登录时运行创建的应用程序。
需要 Apple 脚本以允许管理员访问 /etc/pam.d/sudo 文件(例如,如果您要手动编辑它,则必须使用 sudo vim 而不是 vim)。
所以我的代码看起来像这样:
property SudoPath : "/etc/pam.d/sudo"
property TIDLine : "auth sufficient pam_tid.so"
property CustomPrompt : "Allow TouchID to authenticate you for sudo access"
if (do shell script ("grep -q pam_tid.so " & SudoPath & " && echo 'true' || echo 'false'")) is equal to "false" then
do shell script ("sudo sed -i '' '1i\\'$''\\n'" & TIDLine & "'" & SudoPath) with prompt CustomPrompt with administrator privileges
end if
它检查该行是否已经存在,如果不存在,则应将该行插入文件中。它应该在包含pam_smartcard.so 的行上方,但事实证明这太难了,所以我选择在第一行插入它。
我的脚本因错误sed: 1: "1i\nauth sufficie ...": extra characters after \ at the end of i command 而崩溃,我认为这与代码中的\n 字符有关,但是如果我删除第二个反斜杠,它会在编译期间变为不可见的行尾。而且我真的不知道哪些角色需要转义以及如何转义。
MacOS Monterey 似乎还有一些进一步的问题,因为即使 sed 命令是正确的,脚本也会以错误 /bin/sh: /etc/pam.d/sudo: Operation not permitted 结尾,而 Big Sur 中没有出现该错误。
谢谢你的帮助。
更新:
因此,a 通过使用 gnu-sed(通过 Homebrew 安装)解决了 endline 问题,并尝试允许 automator 和 gsed 命令在首选项中进行全盘访问。现在我得到
语法错误:/usr/local/bin/gsed:无法打开临时文件 /etc/pam.d/sedNyxhvU:不允许操作
property GnuSedPath : "/usr/local/bin/gsed" property SudoPath : "/etc/pam.d/sudo" property TIDLine : "auth sufficient pam_tid.so" property CustomPrompt : "Allow TouchID to authenticate you for sudo access" if (do shell script ("grep -q pam_tid.so " & SudoPath & " && echo 'true' || echo 'false'")) is equal to "false" then do shell script ("sudo " & GnuSedPath & " -i '2i " & TIDLine & "' " & SudoPath) with prompt CustomPrompt with administrator privileges end if
【问题讨论】:
标签: sed applescript zsh macos-monterey