Virsh管理kvm虚拟机认证和加密

前提:使用virsh管理kvm虚拟机的时候出现需要使用密码的情况

[root@a-kvm-t-1 ~]# virsh list --all
Please enter your authentication name: root
Please enter your password: 
error: Failed to reconnect to the hypervisor
error: no valid connection
error: authentication failed: authentication failed

原因分析使用了sasl认证

# 解决
[root@a-kvm-t-1 ~]# saslpasswd2 -a libvirt admin
Password:  # 输入密码
Again (for verification): # 确认密码
[root@a-kvm-t-1 ~]# virsh list --all            
Please enter your authentication name: admin
Please enter your password: #密码
 Id    Name                           State
----------------------------------------------------
 1     kvm-1                          running
 2     kvm-2                          running
 -     kvm-3                          shut off
# 可以看出创建密码后可以通过virsh正常管理kvm虚拟机

下面详细介绍摘自:IBM

使用 SASL 认证和加密进行远程管理

Simple Authentication and Security Layer (SASL) 提供了安全认证和数据加密,但是允许与传统或外部认证和授权服务集成。 在其最简单的形式下,SASL 可用来定义用于进行授权的凭证的数据库。在较复杂的场景中,它可与外部认证服务(例如 Kerberos 或轻量级目录访问协议 (LDAP))一起工作以对用户进行认证。在这两种场景中,如果远程管理请求并非在受保护的传输层安全性 (TLS) 连接上面运行,那么 libvirtd 守护程序通过需要“类属安全性服务”应用程序编程接口 (GSSAPI) 作为 SASL 方法来提供机密性。libvirtd 守护程序可将 DIGEST-MD5 而不是 GSSAPI 用作 SASL 方法。但是,MD5 散列被视为不安全,不应该使用。SASL 的这些变体支持对推送的数据进行加密。为简便起见,此示例将 DIGEST-MD5 用作 SASL 方法。 要在最简单的场景(没有外部认证或 TLS 安全性)中使用 SASL 配置远程管理,请完成下列步骤:

  1. 登录到 KVM 主机。
  2. 保存 /etc/libvirt/libvirtd.conf 文件和 /etc/sysconfig/libvirtd 文件的副本。
  3. 编辑 /etc/libvirt/libvirtd.conf 文件,并进行下列更改:
    • 通过将 listen_tls 配置伪指令设置为 0 来禁用该伪指令(因为没有配置任何 TLS 证书)。否则,libvirtd 守护程序启动会失败。
    • 确保通过将配置伪指令 listen_tcp 设置为 1 来启用该伪指令。
    • 将 auth_tcp 配置伪指令设置为 sasl,以启用通过 TCP 进行 SASL 认证。

以下示例显示了这些参数(与股票 libvirtd.conf 文件对比),突出显示了要删除 (-) 和增加 (+) 的更改:

--- libvirtd.conf.orig  2012-01-04 11:28:32.000000000 -0600
+++ libvirtd.conf       2012-01-04 11:34:02.000000000 -0600
@@ -19,7 +19,7 @@
 # using this capability.
 #
 # This is enabled by default, uncomment this to disable it
-#listen_tls = 0
+listen_tls = 0
 # Listen for unencrypted TCP connections on the public TCP/IP port.
 # NB, must pass the --listen flag to the libvirtd daemon process for this to
@@ -30,7 +30,7 @@
 # DIGEST_MD5 and GSSAPI (Kerberos5)
 #
 # This is disabled by default, uncomment this to enable it.
-#listen_tcp = 1
+listen_tcp = 1


@@ -143,7 +143,7 @@
 # Don't do this outside of a dev/test scenario. For real world
 # use, always enable SASL and use the GSSAPI or DIGEST-MD5
 # mechanism in /etc/sasl2/libvirt.conf
-#auth_tcp = "sasl"
+auth_tcp = "sasl"
 # Change the authentication scheme for TLS sockets.
 #
  • 编辑 /etc/sysconfig/libvirtd 文件并启用 –listen 参数,以便 libvirtd 守护程序侦听 TCP/IP 连接:
--- libvirtd.orig       2012-01-04 11:41:37.000000000 -0600
+++ libvirtd    2012-01-04 11:31:33.000000000 -0600
@@ -3,7 +3,7 @@

 # Listen for TCP/IP connections
 # NB. must setup TLS/SSL keys prior to using this
-#LIBVIRTD_ARGS="--listen"
+LIBVIRTD_ARGS="--listen"

 # Override Kerberos service keytab for SASL/GSSAPI
 #KRB5_KTNAME=/etc/libvirt/krb5.tab
  • 重新启动 libvirtd 守护程序,以使更改生效:
# /etc/init.d/libvirtd restart
Stopping libvirtd daemon:                                  [  OK  ]
Starting libvirtd daemon:                                  [  OK  ]
  • 既然 libvirtd 守护程序接受 TCP 连接,请将一些用户添加至 SASL 数据库。以下示例使用 saslpasswd2 命令将 admin 用户添加至 libvirt 凭证数据库。
# saslpasswd2 -a libvirt admin
Password:
Again (for verification):

注: libvirt 是 libvirtd 守护程序认证域的 SASL 数据库的预期名称。请勿将任何其他名称用于此数据库。 请使这些凭证保持安全状态,因为此数据库中的每个用户都有权登录并运行远程虚拟机管理。

  • 如果 KVM 主机正在运行防火墙,请确保该防火墙允许传入的流量通过 libvirtd 守护程序 TCP 侦听端口。在缺省情况下,该侦听端口为 16509。
  • 通过使用 SASL 认证(以指示启用了 libvirt 的应用程序与 TCP 传输进行连接)来验证设置是否已成功。以下示例从远程管理站运行 virsh 命令,并以新创建的用户 admin 的身份登录,来在 kvmhost.company.org 系统中启动 guest02 实例:
# virsh -c qemu+tcp://kvmhost.company.org/system start guest02
Please enter your authentication name:admin
Please enter your password:
Domain guest02 started 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nummy

Tornado入门(八)【运行和部署】

由于Tornado自身提供了HTTPServer, 所以它的运行和部署与其他Python Web 框架不一样。我们可以直接写一个main()方法来启动一个服务器...

732
来自专栏Pythonista

nginx+uWSGI+django+virtualenv+supervisor发布web服务器

大家都学过了django,用django写了各种功能,写了bbs项目,写了路飞学城。

1044
来自专栏HappenLee的技术杂谈

Linux下双网卡Firewalld的配置流程

实验室拟态存储的项目需要通过LVS-NAT模式通过LVS服务器来区隔内外网的服务,所以安全防护的重心则落在了LVS服务器之上。笔者最终选择通过firewalld...

944
来自专栏腾讯移动品质中心TMQ的专栏

【腾讯 TMQ】零基础学习 Fiddler 抓包改包

Fiddler 是一款 HTTP 协议调试代理工具,它能够抓取记录本机所有 HTTP(S) 请求,通过设置断点等方法我们可以任意修改进出 Fiddler 的数据...

1.2K0
来自专栏ytkah

帝国cms如何调用栏目别名作为分类标题?[!--classname--]标签不能用

  用帝国cms建站安全性和生成速度会比dedecms好些,但ecms有个比较不方便的地方就是后台默认模板栏目那边没有一个seo标题设置的输入框,列表模板用的是...

3526
来自专栏数据小魔方

ggplot2又添新神器——ggthemr助你制作惊艳美图

今天在浏览ggplot扩展插件目录的时候,又发现了一款神器——ggthemr。 这是继ggplot的ggtheme包、RColorBrewer包之后(不算ggt...

3305
来自专栏A周立SpringCloud

Docker系列教程16-network命令

本文是一篇翻译,原文 https://docs.docker.com/engine/userguide/networking/work-with-network...

8028
来自专栏Fundebug

Fundebug支持错误与事件数据导出

Fundebug控制台的过滤器给大家快速定位错误提供了方便,为了进一步给用户提供更加灵活的错误分析方式,Fundebug提供了导出数据功能,希望能为大家分析bu...

763
来自专栏Laoqi's Linux运维专列

nginx keepalive_timeout 设置策略问题分析

1457
来自专栏哎_小羊

初试 Kubernetes 暴漏服务类型之 Nginx Ingress

目录 Ingress 介绍 环境、软件准备 部署 Default Backend 部署 Ingress Controller 部署 Ingress Name ...

8438

扫码关注云+社区