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


11

语境

我喜欢在笔记本电脑上公开工作,但我也喜欢不带密码使用sudo。根据我现在所知道的,我将NOPASSWDsudoers文件中使用该选项,但是当然任何人都可以根据需要使用sudo。

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

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

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

因此,这是我从这个问题得出的三个问题:

  1. sudo可以这样吗?
  2. 如果没有,我是否可以编写一个程序来执行此操作?
  3. 如果是这样,哪种语言可能是编写此程序的最佳选择?

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

注意

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


1
pam_usb是否满足您的需求?
StrongBad

@StrongBad哦...是的。它看起来像它不会立即做只是须藤,一点登录,并一起执行sudo,但是这并不重要我。谢谢!
Gage Sorrell

2
好的,请澄清一下,您想保持登录状态,并且只是防止他人在您的帐户下使用sudo。
StrongBad

@StrongBad正确。
Gage Sorrell,

您可能可以使用文件中的rootpw标志来配置某些内容/etc/sudoers并设置pam_usb为root登录。
RubberStamp

Answers:


3

我不确定我是否理解为什么该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会话-拔掉闪存驱动器是不够的。虽然我猜您也可以设置一个预命令挂钩来检查私钥,如果不存在(或无效),则自动退出。


一个简单的答案,可以弄清楚为什么要这样做。对于此服务器,我试图重新进入,我只有root密钥,没有root ssh访问权限,我已锁定到ec2-user中,而sudo要求的是我没有的pw。我将我的根密钥scp'd到服务器,所以理想情况下,我现在现在想使用此密钥来获取sudo acces,然后我就可以解决问题。
Brian Thomas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.