如何允许使用备用密码通过“sudo”进行身份验证?

如何允许使用备用密码通过“sudo”进行身份验证?

我的公司为我的 Ubuntu 系统提供了一个很长的密码。这个密码在重复验证时输入起来比较麻烦sudo

我是否可以sudo使用与我的用户帐户关联的密码以外的密码进行身份验证,或者sudo完全启用无密码身份验证?

答案1

您可以将sudo身份验证与所管理的密钥的知识联系起来ssh-agent。这可以通过以下方式实现聚丙烯酰胺pam_ssh_agent_auth模块。您可以生成单独的密钥对专门用于sudo身份验证。密码将是用于加密私钥的密码。

要配置pam_ssh_agent_auth模块,请将以下内容添加到/etc/pam.d/sudo 任何其他authinclude指令:

auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys

您还需要通过添加以下内容(通过)来告诉sudo不要删除环境变量:SSH_AUTH_SOCK/etc/sudoersvisudo

Defaults    env_keep += "SSH_AUTH_SOCK"

现在将您想要充当身份验证令牌的密钥的公共部分添加到/etc/security/authorized_keys。您可能还想将-t开关添加到ssh-add添加密钥时具有适当的短生命周期,以ssh-agent模仿默认sudo行为(如果自上次输入以来已过了一定时间则提示密码确认),或者甚至在-c每次使用密钥进行身份验证时使用开关来触发密码确认。

请注意,Ubuntu 中默认使用GNOME 钥匙圈据我所知,用于 SSH 密钥管理目前不允许设置按键超时。您可以通过添加以下内容来完全禁用 GNOME Keyring 中的 SSH 密钥管理~/.config/autostart/gnome-keyring-ssh.desktop

[Desktop Entry]
Type=Application
Name=SSH Key Agent
Comment=GNOME Keyring: SSH Agent
Exec=/usr/bin/gnome-keyring-daemon --start --components=ssh
OnlyShowIn=GNOME;Unity;MATE;
X-GNOME-Autostart-Phase=Initialization
X-GNOME-AutoRestart=false
X-GNOME-Autostart-Notify=true
X-GNOME-Autostart-enabled=false
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-keyring
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=3.10.1
NoDisplay=true
X-Ubuntu-Gettext-Domain=gnome-keyring

它覆盖了/etc/xdg/autostart/gnome-keyring-ssh.desktop,主要区别在于这一行:

X-GNOME-Autostart-enabled=false

答案2

如果可以在 Ubuntu 系统上启用 root 帐户,则可以将sudo以下内容配置为提示输入 root 密码而不是调用用户的密码/etc/sudoers(使用visudo):

Defaults rootpw

Ubuntu 默认情况下禁用 root 帐户锁定其密码。要启用它,只需设置一个新密码root

$ sudo passwd root

即使您想使用 root 密码启用身份验证sudo,也可以通过清空(或注释掉)中的所有内容来在本地控制台设备上禁用 root 登录/etc/securetty。然而,空白的 /etc/securetty 文件不会不是防止root用户使用OpenSSH或其他不受影响的方式远程登录pam_securetty.so(例如su,,,,,,)。​可以专门配置 OpenSSH 以防止通过中的节进行 root 登录,但如果您决定这样做,您应该了解一下sudosshscpsftpPermitRootLogin no/etc/ssh/sshd_config任何其他影响这可能与您的情况相关。

答案3

为什么不通过改变 sudo 的行为来放松输入密码,如下所示:

这是取自ChromiumOS 提示和技巧页面:让 Sudo 更宽松一些

cd /tmp
cat > ./sudo_editor <<EOF
#!/bin/sh
echo Defaults \!tty_tickets > \$1          # Entering your password in one shell affects all shells 
echo Defaults timestamp_timeout=180 >> \$1 # Time between re-requesting your password, in minutes
EOF
chmod +x ./sudo_editor 
sudo EDITOR=./sudo_editor visudo -f /etc/sudoers.d/relax_requirements

如果您不知道做了什么,tty_tickets is now false这意味着您不需要在每个 tty 上进行身份验证。 Timestamp_timeout is set to every 3 hours,表示您每三个小时输入一次密码。从您输入密码到三小时限制之间,sudo some command在限制到期之前,不会要求您输入密码。

relax_requirement现在可以用来控制 sudo。可用选项位于苏多尔手册。查找粗体部分苏多尔选项。除了我描述的选项之外,还有很多选项。这样做不需要对 PAM 等进行修改,并且可以在任何有或没有 PAM 的系统上工作。

答案4

/etc/sudoers您可以使用您选择的编辑器编辑该文件,或者仅执行visudo并添加行以允许您的特定用户sudo无需密码即可使用该命令。就像是:

user ALL = NOPASSWD : ALL

相关内容