<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>sudo on 梓晨's Blog</title><link>https://blog.dawnwl.com/tags/sudo/</link><description>Recent content in sudo on 梓晨's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><copyright>梓晨科技</copyright><lastBuildDate>Sat, 10 Oct 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://blog.dawnwl.com/tags/sudo/index.xml" rel="self" type="application/rss+xml"/><item><title>macOS 一键开启 sudo 的 Touch ID 验证</title><link>https://blog.dawnwl.com/posts/macos-sudo-touch-id/</link><pubDate>Sat, 10 Oct 2026 00:00:00 +0800</pubDate><guid>https://blog.dawnwl.com/posts/macos-sudo-touch-id/</guid><description>&lt;p&gt;在支持 Touch ID、且已录入指纹的 Mac 上，可以通过 PAM 的 &lt;code&gt;pam_tid.so&lt;/code&gt; 模块为 &lt;code&gt;sudo&lt;/code&gt; 增加指纹验证。下面两种方法选择一种执行。&lt;/p&gt;
&lt;h2 id="一键修改-sudo-配置"&gt;一键修改 sudo 配置
&lt;/h2&gt;&lt;p&gt;在 macOS 的 Zsh 或 Bash 终端中执行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sed -i &lt;span class="s2"&gt;&amp;#34;.bak&amp;#34;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2s/^/auth sufficient pam_tid.so\&amp;#39;$&amp;#39;\n/g&amp;#39;&lt;/span&gt; /etc/pam.d/sudo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;命令使用 macOS 自带的 BSD sed，在 &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt; 第二行前插入：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;auth sufficient pam_tid.so
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;原配置自动备份为 &lt;code&gt;/etc/pam.d/sudo.bak&lt;/code&gt;。&lt;code&gt;$'\n'&lt;/code&gt; 由 Zsh/Bash 转换为换行，不能直接照搬到不支持这种语法的 Shell。&lt;/p&gt;
&lt;p&gt;此命令适用于尚未添加该规则的配置；重复执行会重复插入，并更新备份。直接修改的系统文件可能在 macOS 更新时被替换。&lt;/p&gt;
&lt;h2 id="可选使用系统的-sudo_local-配置"&gt;可选：使用系统的 sudo_local 配置
&lt;/h2&gt;&lt;p&gt;如果 &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt; 包含 &lt;code&gt;auth include sudo_local&lt;/code&gt;，且系统提供 &lt;code&gt;/etc/pam.d/sudo_local.template&lt;/code&gt;，可以使用下面的一键方法。系统模板将 &lt;code&gt;sudo_local&lt;/code&gt; 定义为供本地配置使用、在系统更新后保留的文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sh -c &lt;span class="s1"&gt;&amp;#39;test -e /etc/pam.d/sudo_local || cp /etc/pam.d/sudo_local.template /etc/pam.d/sudo_local&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo sed -i &lt;span class="s2"&gt;&amp;#34;.bak&amp;#34;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;s/^#\(auth[[:space:]]*sufficient[[:space:]]*pam_tid\.so\)/\1/&amp;#39;&lt;/span&gt; /etc/pam.d/sudo_local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;命令在 &lt;code&gt;sudo_local&lt;/code&gt; 不存在时复制系统模板，然后自动取消模板中 Touch ID 规则的注释，备份为 &lt;code&gt;/etc/pam.d/sudo_local.bak&lt;/code&gt;。已有文件会保留；该方法要求文件中包含模板的对应规则。&lt;/p&gt;
&lt;h2 id="验证效果"&gt;验证效果
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo -k
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo whoami
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;sudo -k&lt;/code&gt; 清除已有的授权缓存，再次执行时可测试指纹验证，成功后输出 &lt;code&gt;root&lt;/code&gt;。Touch ID 需要本机支持的交互环境，SSH 等会话不能直接等同于本机终端的指纹验证。&lt;/p&gt;
&lt;p&gt;配置依据：macOS 系统文件 &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt; 与 &lt;code&gt;/etc/pam.d/sudo_local.template&lt;/code&gt;。&lt;/p&gt;</description></item></channel></rss>