如何使共享密钥 .ssh/authorized_keys 和 sudo 一起工作?

如何使共享密钥 .ssh/authorized_keys 和 sudo 一起工作?

我已经设置了 .ssh/authorized_keys 并且能够使用 pub/private 密钥以新“用户”身份登录...我还将“用户”添加到了 sudoers 列表中...我现在遇到的问题是当我尝试执行 sudo 命令时,例如:

$ sudo cd /root

它会提示我输入密码,我输入了密码,但是不起作用(我使用的是我设置的私钥密码)

另外,我已使用以下方法禁用用户密码

$ passwd -l user

我错过了什么?

我最初的评论在某些地方被误解了......

我正在尝试强化我的系统……最终目标是使用公钥/私钥进行登录,而不是简单的密码验证。我已经弄清楚如何通过 authorized_keys 文件进行所有这些设置。

此外,我最终将阻止通过 root 帐户登录服务器。但在我这样做之前,我需要 sudo 为第二个用户工作(我将一直使用该用户登录系统)。

对于第二个用户,我想阻止常规密码登录并强制仅使用公钥/私钥登录,如果我不通过“passwd -l user...”锁定用户,那么如果我不使用密钥,我仍然可以使用常规密码进入服务器。

还有一点重要的我需要让 sudo 与已禁用密码的用户一起设置发布/私钥。


编辑:好的,我想我知道了(解决方案):

1)我已经调整了 /etc/ssh/sshd_config 并设置PasswordAuthentication no 这将阻止 ssh 密码登录(确保在执行此操作之前有一个有效的公钥/私钥设置

2)我调整了 sudoers 列表visudo并添加了

root      ALL=(ALL) ALL
dimas     ALL=(ALL) NOPASSWD: ALL

3)root 是唯一有密码的用户帐户,我正在测试两个没有设置密码的用户帐户“dimas”和“sherry”(密码为空,passwd -d user

上述操作基本上可以防止每个人使用密码登录系统(必须设置公钥/私钥)。

此外,sudoers 列表中的用户具有管理员权限。他们还可以su访问不同的帐户。因此,基本上“dimas”可以sudo su sherry,但“dimas 不能执行” su sherry。同样,任何不在 sudoers 列表中的用户都不能执行su usersudo su user

笔记上述方法有效,但安全性较差。任何能够以“dimas”或“sherry”用户身份访问代码的脚本都可以执行 sudo 来获得 root 访问权限。ssh 中的错误允许远程用户无视设置登录,Firefox 等程序中的远程代码执行,或任何其他允许以用户身份运行不需要的代码的缺陷现在都可以以 root 身份运行。Sudo 应该始终需要密码,否则您可能还是以 root 身份登录,而不是以其他用户身份登录。

答案1

sshsudo彼此无关。设置ssh身份验证方法不会对 产生任何影响sudosudo不会理解ssh密码。

passwd -l旨在锁定用户的帐户,这样用户就无法再通过密码进行身份验证。这与您想要的完全相反,您想要的是让用户无需密码即可进行身份验证。

我认为你想要的NOPASSWD你的sudoers文件

(PS,没有理由运行cd带有的命令sudocd不会传播到父进程,因此一旦退出sudo,您就会回到原点。)

编辑: 你一直说你想锁定账户密码,并希望 sudo 理解公钥/私钥。抱歉,sudo 不会使用 ssh 密钥。它不是 ssh。如果你不想让用户能够使用密码登录,我认为答案是禁用 ssh 密码验证,不锁定账户。然后,您可以为用户保留一个密码,用户通过 ssh authorized_keys 登录后可以使用该密码进行 sudo。

答案2

您想要做的是可能的,但它需要一些经验,因为您必须编译一个名为的 PAM 模块pam-ssh-代理认证

该过程相当简单:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

编辑 sudo 配置:

$ sudo visudo

添加以下内容:

Defaults env_keep += SSH_AUTH_SOCK

继续更改 sudo PAM 设置:

$ sudo vi /etc/pam.d/sudo

添加(就在@include 行上方):

**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account

答案3

Andre de Miranda 的答案提供了一个很好的解决方案pam_ssh_agent_auth,但部分内容已过时。特别是/etc/pam.d/sudo使用许多当前 Linux 版本时的说明。

如果您运行的是 Ubuntu 12.04 precise,我实际上通过提供 ppa 中的 pam_ssh_agent_auth 构建简化了该过程:ppa:cpick/pam-ssh-代理-auth

您可以通过运行以下命令来安装该包:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

安装后,如果您想将此 PAM 模块与 sudo 一起使用,您必须配置 sudo 的设置和 PAM 配置,在 Ubuntu 12.04 中,您可以通过创建以下两个文件来完成此操作:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo 命令:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

如果您正在使用 chef,则可以使用我的食谱自动执行上述过程,食谱可以在以下两个位置之一找到:
https://github.com/cpick/pam-ssh-agent-auth
http://community.opscode.com/cookbooks/pam-ssh-agent-auth

该食谱files目录包含与 Ubuntu 12.04 精确配合使用的上述文件/etc/pam.d/sudo/etc/sudoers.d/pam-ssh-agent-auth文件,并且在使用其他版本/发行版时应该是一个有用的起点。

答案4

我知道的绕过输入密码的唯一方法是在文件中禁用它sudoers

root类似这样的事情会给wheel 满的无需密码访问:

root    ALL=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   NOPASSWD: ALL

这绝对不建议但是。如果您有特定命令需要此服务器执行,请仅授予他们访问该命令的权限。或者更好的是,找到一种不需要打安全漏洞的其他方法来完成您想要做的事情。

相关内容