语境
我喜欢在公共场合使用笔记本电脑工作,但我也喜欢使用无需密码的 sudo。根据我现在所知道的,我会使用NOPASSWD
我的文件中的选项sudoers
,但当然任何人都可以按照自己的意愿使用 sudo 。
一个重要的想法我想到的是存在锁定程序。 但是,我更喜欢使用闪存驱动器(并且仅将其用于 sudo),因为 (1) 它更快,(2) 比输入密码更容易,并且 (3) 我不关心人们访问我的内容或进行邪恶的事情事情:笔记本电脑将在其他人周围公开,而我的笔记本电脑上唯一的知识产权是一个非常基本的 Angular 项目。
此外,我自己和其他人可能希望防止在未运行 X 或 Wayland 环境的计算机上滥用 sudo。我目前的工作需要一个现代的网络浏览器,但如果我有机会不使用 X 而只使用多路复用器,我就会这样做——我的笔记本电脑有点旧而且速度慢。
问题
我想做的是将密钥文件放在闪存驱动器上,当我在笔记本电脑旁时只需插入闪存驱动器,当我离开笔记本电脑时将其取出。
所以这是我从这个问题衍生出来的三个问题:
- 这可以用 sudo 实现吗?
- 如果没有,我能编写一个程序来做到这一点吗?
- 如果是这样,哪种语言最适合编写这个程序?
(4.[也许是一个无关的问题]这个包可以是单独的还是需要是 sudo 的一个分支?)
笔记
如果相关的话,我的设置是带有 bspwm 的 Arch Linux,没有桌面环境。我的大部分工作是在 urxvt / vim 中进行 Web 开发并使用 Chrome 进行检查。
答案1
我不确定我是否理解为什么该NOPASSWD
选项本身不能满足您的要求,但如果您想要求闪存驱动器的存在,我可以想到几乎可以满足您的要求的东西。
这更多的是一种解决方法,但您可以创建一个本地管理用户,例如superuser
,并授予该用户无密码sudo
权限,即将以下行添加到您的/etc/sudoers
文件中:
superuser ALL=(ALL) NOPASSWD:ALL
然后,您可以禁用密码登录并为该用户配置仅密钥 SSH 身份验证,即运行passwd -l superuser
以下节并将其添加到您的/etc/ssh/sshd_config
:
Match user superuser
PasswordAuthentication no
然后为此用户创建 SSH 密钥对。将公钥添加到闪存驱动/home/superuser/.ssh/authorized_keys
器并将私钥放在闪存驱动器上。然后,当您想要使用该superuser
帐户时,请插入闪存驱动器并superuser
使用您的私钥通过 ssh 登录到该帐户。瞧!您现在sudo
为您的用户设置了无密码。当然,完成后您仍然需要退出 shell 会话 - 拔出闪存驱动器是不够的。虽然我想你也可以设置一个预命令钩子检查私钥并在私钥不存在(或无效)时自动退出。