AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 61796
Accepted
Michael Ekstrand
Michael Ekstrand
Asked: 2009-09-03 17:54:44 +0800 CST2009-09-03 17:54:44 +0800 CST 2009-09-03 17:54:44 +0800 CST

sudo 的简单多级身份验证

  • 772

我有一个启用了基于密码的 SSH 的 FreeBSD 服务器。我想启用sudo,但我不希望潜在的攻击者远离 root 访问的一个密码。我当前的解决方案是使用公钥以 root 身份登录(对 root 禁用远程密码身份验证),而我的普通用户不在轮子中,sudo也没有安装。

过去,我使用一次性密码进行 sudo 访问(我可以公开密钥进入系统,但 sudo 需要 OTP,并且有 30 分钟的超时时间让我无需重新验证所有时间)。然而,这是相当麻烦的,至少对于 OPIE/S/Key 来说是这样。使用硬件令牌可能没问题,但我目前没有。

我一直在寻找可以让我通过代理转发使用 SSH 公钥对 sudo 进行身份验证的东西。 pam_sshFreeBSD 包含的似乎并没有这样做——它只是通过查看用户是否可以解密服务器上的私钥来进行身份验证。我找到了pam_ssh_agent_auth,但我在其他地方发现很少提及它。现在是 0.9,但我有点犹豫是否相信通往根目录的程序的网关,我找不到太多人们实际使用的证据。

所以,我的问题基本上是2:

  1. pam_ssh_agent_auth在野外使用可靠吗?
  2. 是否有另一个好的解决方案来启用 sudo,同时仍然有超过登录密码的障碍?我曾想过拥有第二个具有 sudo 访问权限且没有密码身份验证的帐户,但这似乎也有些麻烦。
authentication ssh freebsd sudo private-key
  • 2 2 个回答
  • 2693 Views

2 个回答

  • Voted
  1. Andre de Miranda
    2011-08-21T21:23:17+08:002011-08-21T21:23:17+08:00

    迈克尔,

    您想要实现的目标可以通过两种方式执行:

    您发现的一种方法是使用pam_ssh_agent_auth或者您可能想使用它的“可怜的表弟”:

    ssh to localhost 与 SSH 密钥转发相关联。 此处的分步说明指向 Ubuntu 服务器,但所有命令都应该适用于您的 FreeBSD,因为它们是 OpenSSH 本身的功能。

    1.添加密钥到ssh-agent:

    user@workstation:~$ ssh-add
    Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
    

    2.将密钥复制到目标服务器上的用户帐户

    user@workstation:~$ ssh-copy-id destination-server
    user@destination-server's password: 
    Now try logging into the machine, with "ssh 'destination-server'", and check in:
    
      ~/.ssh/authorized_keys
    
    to make sure we haven't added extra keys that you weren't expecting.
    

    3.测试基于密钥的登录:

    user@workstation:~$ ssh -A destination-server
    Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64)
    
     * Documentation:  http://www.ubuntu.com/server/doc
    
    Last login: Mon Aug  8 20:38:48 2011 from 192.168.123.123
    user@destination-server:~$ 
    

    4. 现在我们将 SSH 密钥复制到:/root/.ssh/

    user@destination-server:~$ sudo cp ~/.ssh/authorized_keys /root/.ssh/
    [sudo] password for user:
    user@destination-server:~$ sudo ls -l /root/.ssh/au*
    total 4
    -rw------- 1 root root 392 2011-08-08 20:44 authorized_keys
    

    5. 回到正常的用户生活,我们检查 SSH Auth Socket 的存在:

    $ echo $SSH_AUTH_SOCK 
    /tmp/ssh-bUhwiw3004/agent.3004
    

    6. 欢乐时光! 注意:请记住,您的 SSHd 可能被配置为拒绝 root 访问。记得启用它

    user@destination-server:~$ ssh root@localhost
    Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64)
    
     * Documentation:  http://www.ubuntu.com/server/doc
    
    Last login: Mon Aug  8 21:07:29 2011 from eedev.local
    root@destination-server:~# id
    uid=0(root) gid=0(root) groups=0(root)
    

    7. 派对还没有结束...您可以通过使用别名来放松一下并玩弄一下设置:

    注意:记住 SSH 和 tty 的关系往往很麻烦

    user@destination-server:~$ alias sshudo='ssh -4 -t root@localhost'
    user@destination-server:~$ sshudo id
    uid=0(root) gid=0(root) groups=0(root)
    Connection to localhost closed.
    user@destination-server:~$ sshudo vi /etc/sudoers
    

    瞧!

    Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64)
    
     * Documentation:  http://www.ubuntu.com/server/doc
    
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    ~                                                                                                                             
    "/etc/motd" 4 lines, 114 characters
    

    8. 在你走之前......微调它:

    user@destination-server:~$ sshudo vi /root/.ssh/authorized_keys
    

    添加from="localhost"到您正在使用的 SSH 密钥的前面。这将使用该密钥限制远程用户访问并测试:

    user@destination-server:~$ sshudo id
    user@destination-server:~$ uid=0(root) gid=0(root) groups=0(root)
    user@destination-server:~$ Connection to localhost closed.
    

    注销并测试限制

    user@destination-server:~$ exit
    Connection to destination-server closed.
    
    user@workstation:~$ ssh root@destination-server
    root@destination-server's password:
    

    希望这可以帮助。

    • 4
  2. Best Answer
    evilchili
    2009-09-10T19:33:08+08:002009-09-10T19:33:08+08:00

    您已经通过 OTP 解决了这个问题(更多安全性 = 更多箍),我无法评论 pam_ssh_agent_auth。但似乎您真正关心的不是 sudo,而是网络级访问。换句话说,您似乎关心从一个或多个特定主机而不是特定系统帐户授予用户的权限。如果是这样,请考虑在 SSH 守护进程前实施端口敲门方案,这样 SSH 只能从特定 IP 和知道秘密敲门的人访问。之后,来自已知主机的常规旧公钥身份验证就足够了。如果攻击者此时仍然可以获得 shell 访问权限,那么无论如何您都可能被击败。

    我能想到的唯一另一种情况是在受信任的主机上使用 ssh 代理,当你在不受信任的网络上时,你可以将你的连接反弹掉(因为你在 bsdworld,你甚至可以在您的主机正是这样做的)。就我而言,攻击者拥有 shell 访问权限的任何盒子都完全被攻破了。他们是否获得根信任完全没有实际意义。你的努力最好花在防止第一次成功入侵上。

    干杯,-G

    • 2

相关问题

  • Windows SSH 客户端

  • 在 Windows Server 2003 上通过 SSH 启动和停止 Mongrel 服务

  • 如何以尽可能少的依赖项在 FreeBSD 上安装 Java JRE

  • 隧道 Xbox 网络流量 [关闭]

  • 为什么使用authorized_keys通过ssh自动登录不起作用?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve