Mac automator - TouchID 用于解决系统磁盘访问的 sudo 问题

问题描述 投票:0回答:2

目标是允许 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 中没有出现该错误。

感谢您的帮助。

更新:

因此,通过使用 gnu-sed(通过 Homebrew 安装)解决了终端问题,并尝试在首选项中允许 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
2个回答
2
投票

类似的问题。我一直在使用

patch
作为将线条添加到
/etc/pam.d/sudo
的工具。升级到 macOS 12.4 后,我遇到了与您相同的错误
Operation not permitted
,因为
/etc/pam.d/sudo
不可写。

我在终端 (iTerm) 中运行 patch 命令。通过允许 iTerm“完全磁盘访问”解决了该问题。

也许您的问题可以通过允许 Automator“完整磁盘访问”(在系统偏好设置 -> 安全和隐私 -> (选项卡)完整性下)来解决?


0
投票

它现在受到操作系统的支持(至少从索诺玛开始)。

确保

/etc/pam.d/sudo
包含行:

auth       include        sudo_local

然后将以下行放入

/etc/pam.d/sudo_local

auth       sufficient     pam_tid.so

操作系统永远不会重置对

sudo_local
的更改,因此从现在开始将启用 sudo 的 TouchID。

© www.soinside.com 2019 - 2024. All rights reserved.