可以使用密钥文件作为 sudo 的密码吗?

Gag*_*ell 11 usb sudo usb-drive

语境

我喜欢用我的笔记本电脑在公共场合工作,但我也喜欢在没有密码的情况下使用 sudo。根据我现在所知道的,我会NOPASSWD在我的sudoers文件中使用该选项,但当然任何人都可以根据需要使用 sudo。

我想到的一个重要想法是存在锁定程序。 但是,我更喜欢使用闪存驱动器(并且仅将其用于 sudo),因为 (1) 它更快,(2) 比输入我的密码更容易,以及 (3) 我不关心人们访问我的内容也不做恶意事情:笔记本电脑会在其他人周围公开,而我的笔记本电脑上唯一的知识产权是一个非常基本的 Angular 项目。

此外,我和其他人可能希望防止在未运行 X 或 Wayland 环境的计算机上滥用 sudo。我目前的工作需要一个现代的网络浏览器,但如果我有机会不使用 X 而只使用多路复用器,我会这样做——我的笔记本电脑有点旧而且速度很慢。

我想做的是将密钥文件放在闪存驱动器上,当我在笔记本电脑旁时只需插入闪存驱动器,当我离开它时将其取出。

所以这里是我从这个问题衍生的三个问题:

  1. 这可能与 sudo 一样吗?
  2. 如果没有,我是否能够编写一个程序来让我这样做?
  3. 如果是这样,编写此程序的最佳语言可能是什么?

(4. [也许是一个无关紧要的问题] 这个包可以分开还是需要是 sudo 的一个分支?)

笔记

如果相关,我的设置是带有 bspwm 的 Arch Linux,没有桌面环境。我的大部分工作是在 urxvt / vim 中进行 Web 开发并使用 Chrome 进行检查。

iga*_*gal 3

我不确定我是否理解为什么NOPASSWD选项本身不能满足您的要求,但如果您想要要求闪存驱动器的存在,我可以想到几乎可以满足您正在寻找的东西。

\n\n

这更多的是一种解决方法,但您可以创建一个本地管理用户,例如superuser,并授予该用户无密码sudo权限,即将以下行添加到您的/etc/sudoers文件中:

\n\n
superuser ALL=(ALL) NOPASSWD:ALL\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,您可以禁用密码登录并为该用户配置仅密钥 SSH 身份验证,即运行passwd -l superuser以下节并将其添加到您的/etc/ssh/sshd_config

\n\n
Match user superuser\nPasswordAuthentication no\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后为此用户创建 SSH 密钥对。将公钥添加到/home/superuser/.ssh/authorized_keys闪存驱动器并将私钥放在闪存驱动器上。然后,当您想要使用该superuser帐户时,请插入闪存驱动器并superuser使用您的私钥通过 ssh 登录到该帐户。瞧\xc3\xa0!您现在sudo为您的用户设置了无密码。当然,完成后您仍然需要退出 shell 会话 - 拔出闪存驱动器是不够的。虽然我猜你也可以设置一个预命令挂钩来检查私钥并在私钥不存在(或者无效)时自动退出。

\n