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


15

我已经设置了.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到不同的帐户。因此,基本上“假人”可以sudo su sherry,但是“假人不能su sherry。类似地,不在sudoers列表中的任何用户也不能su usersudo su user

注意上述工作,但被认为安全性较差。任何能够以“ dimas”或“ sherry”用户身份访问代码的脚本都将能够执行sudo以获得root用户访问权限。ssh中的一个漏洞,尽管有设置,该漏洞仍允许远程用户登录;在Firefox之类的系统中执行远程代码;或者任何其他漏洞,该漏洞使不需要的代码得以运行,因为用户现在可以以root用户身份运行。Sudo应该始终要求输入密码,否则您最好以root身份登录,而不要以其他用户身份登录。

Answers:


10

sshsudo无关对方。设置ssh身份验证方法对不会有任何作用sudosudo不会理解ssh密码。

passwd -l旨在锁定用户的帐户,以使其不再能够通过密码进行身份验证。这几乎与您想要的相反,后者使用户无需密码即可进行身份验证。

我想你想要什么是NOPASSWD在选择您的sudoers文件

(PS,没有理由运行cd带有sudo。 的命令cd不会传播到父进程,因此一旦sudo退出,您便回到了开始的位置。)

编辑: 您一直说要锁定帐户密码,并希望sudo理解公共/专用密钥。抱歉,sudo不会使用ssh密钥。不是ssh。如果您不希望用户能够使用其密码登录,我认为答案是禁用ssh密码身份验证,而不是锁定帐户。然后,您可以为用户保留一个密码,当用户通过sshauthorized_keys登录后,可以使用该密码进行sudo操作。


好的,但是用户没有密码的事实是否通过:passwd -l user ...导致sudo命令不起作用?
farinspace 2010年

@farinspace是的,我更好地理解了这个问题,并在很大程度上扩大了我的言论。 passwd -l从帐户已锁定的意义上删除密码-即没有密码可用。您想在sudo中关闭密码验证。
锥杀手

逻辑如何:关闭sudoers文件中的密码仍然是安全的,因为通过pub / privkey登录加强了系统的安全性……而且只有admin才能够将用户添加到sudoers列表中
farinspace

使用私钥时,通常是为其设置密码,还是足够安全以至于根本没有设置私钥并绕过服务器登录时输入任何密码
farinspace 2010年

4
@coneslayer此答复不是100%准确。如下所示,可以将sudo配置为遵守ssh身份验证。
安德烈·德·米兰达

18

您想做的事是可能的,但是这将需要一些经验,因为您必须编译一个称为pam-ssh-agent-auth的PAM模块。

该过程相当简单:

$ 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


4
这应该是公认的答案
Christopher Monsanto,

1
这些说明(特别是/etc/pam.d/sudo说明)对于当前的Ubuntu版本已经过时。我在回答中提供了更新的说明。
克里斯·皮克

4

安德烈·德·米兰达(Andre de Miranda)的答案使用pam_ssh_agent_auth提供了一个不错的解决方案,但其中的某些部分已过时。特别是/etc/pam.d/sudo使用许多当前Linux版本时的说明。

如果您运行的是精确的Ubuntu 12.04,我实际上通过提供ppa之外的pam_ssh_agent_auth构建来简化了过程:ppa:cpick / pam-ssh-agent-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

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

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


-1

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

这样的事情将使root所有成员都具有wheel 完全访问权限,而无需输入密码:

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

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


我不介意使用密码,问题似乎出在我通过以下方式禁用了用户密码之后:passwd -l user ...我仍然可以通过pub / private密钥(私有密钥具有安全密码)登录系统,当我执行sudo时,它要求输入密码,但这似乎不是私钥中的密码,如果ive禁用了该密码,该密码在哪里设置(我宁愿避免在ssystem上维护密码,并且在私钥上)
farinspace 2010年

“如果我为用户禁用了此密码,该密码在哪里设置?” 无处。您没有密码可以输入,因为您已锁定该帐户。
锥杀手

您将必须在远程系统上重新启用该帐户,然后设置密码。无论哪种方式,您都应该在两台计算机上都维护密码。发生故障时,除了本地登录之外,没有其他原因。
杰克M.10年
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.