far*_*ace 16 linux ssh sudo ubuntu
我已经设置了 .ssh/authorized_keys 并且能够使用 pub/private 密钥使用新的“用户”登录......我还将“用户”添加到 sudoers 列表中......我现在遇到的问题是什么时候我尝试执行一个 sudo 命令,简单的像:
$ sudo cd /root
Run Code Online (Sandbox Code Playgroud)
它会提示我输入我输入的密码,但它不起作用(我使用的是我设置的私钥密码)
另外,我已经禁用了用户的密码
$ passwd -l user
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
某处我最初的评论被误解了......
我正在尝试强化我的系统......最终目标是使用公钥/私钥进行登录而不是简单的密码身份验证。我已经想出了如何通过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
Run Code Online (Sandbox Code Playgroud)
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 身份而不是其他用户身份登录。
And*_*nda 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
Run Code Online (Sandbox Code Playgroud)
编辑 sudo 配置:
$ sudo visudo
Run Code Online (Sandbox Code Playgroud)
添加以下内容:
Defaults env_keep += SSH_AUTH_SOCK
Run Code Online (Sandbox Code Playgroud)
继续更改 sudo PAM 设置:
$ sudo vi /etc/pam.d/sudo
Run Code Online (Sandbox Code Playgroud)
添加(就在@include 行上方):
**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account
Run Code Online (Sandbox Code Playgroud)
con*_*yer 10
ssh
并且sudo
彼此没有任何关系。设置ssh
身份验证方法不会对sudo
. sudo
不会理解ssh
密码。
passwd -l
旨在锁定用户的帐户,使他无法再通过密码进行身份验证。这与您想要的几乎相反,即让用户无需密码即可进行身份验证。
我想你想要什么是NOPASSWD
在选择您的sudoers
文件。
(PS,没有理由运行cd
带有sudo
. 的命令cd
不会传播到父进程,因此一旦sudo
退出,您就会回到开始的地方。)
编辑: 您一直说要锁定帐户密码并希望 sudo 了解公钥/私钥。抱歉,sudo 不会使用 ssh 密钥。这不是 ssh。如果您不希望用户能够使用他们的密码登录,我认为答案是禁用 ssh 密码验证,而不是锁定帐户。然后您可以为用户保留一个密码,他们可以在通过 ssh authorized_keys 登录后使用该密码进行 sudo。
小智 5
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
Run Code Online (Sandbox Code Playgroud)
安装后,如果您想将这个 PAM 模块与 sudo 一起使用,您必须配置 sudo 的设置和 PAM 配置,在 Ubuntu 12.04 中,您可以通过创建以下两个文件来实现:
/etc/sudoers.d/pam-ssh-agent-auth :
Defaults env_keep+="SSH_AUTH_SOCK"
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Chef,则可以使用我的食谱自动执行上述过程,可在以下两个位置之一找到:
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,并且在使用其他版本/发行版时应该是一个有用的起点。