我已经设置了 .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 user
或sudo su user
。
笔记上述方法有效,但安全性较差。任何能够以“dimas”或“sherry”用户身份访问代码的脚本都可以执行 sudo 来获得 root 访问权限。ssh 中的错误允许远程用户无视设置登录,Firefox 等程序中的远程代码执行,或任何其他允许以用户身份运行不需要的代码的缺陷现在都可以以 root 身份运行。Sudo 应该始终需要密码,否则您可能还是以 root 身份登录,而不是以其他用户身份登录。
答案1
ssh
和sudo
彼此无关。设置ssh
身份验证方法不会对 产生任何影响sudo
。 sudo
不会理解ssh
密码。
passwd -l
旨在锁定用户的帐户,这样用户就无法再通过密码进行身份验证。这与您想要的完全相反,您想要的是让用户无需密码即可进行身份验证。
我认为你想要的NOPASSWD
是你的sudoers
文件。
(PS,没有理由运行cd
带有的命令sudo
。 cd
不会传播到父进程,因此一旦退出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
这绝对不建议但是。如果您有特定命令需要此服务器执行,请仅授予他们访问该命令的权限。或者更好的是,找到一种不需要打安全漏洞的其他方法来完成您想要做的事情。