二维码

快速,安全的修补程序:工具和方法

1683 人阅读 | 时间:2020年01月03日 14:04

生成企业级SSH密钥并将其加载到代理中以控制各种Linux主机。使用并行分布式外壳程序(pdsh)编写代理脚本,以实现整个服务器场的快速更改。

服务器,操作方法,安全性,SysAdmin

计算机科学界以某种程度的难以置信的态度迎接了最近与EternalBlue相关的漏洞,这些漏洞已被大量易受攻击的系统破坏。SMB漏洞利用一直在继续(最新的漏洞是在上次DEF CON上提出的SMBLoris,这会影响多个SMB协议版本,Microsoft不会对此进行修补。使用这些工具进行的攻击使关键基础设施无法工作,以至于患者甚至转身离开了英国国家卫生局。

令人非常遗憾的是,在这次SMB灾难期间,我们还了解到,著名的Samba服务器在公共Internet上提供了可利用的攻击面,数量足以使蠕虫成功传播。我以前 在Linux Journal中讨论过SMB安全性,并且我不再认为SMB服务器进程应在Linux上运行。

无论如何,所有体系结构的系统管理员都必须能够关闭易受攻击的网络服务器并对其进行快速修补。在使用大量Linux服务器时,通常需要速度和能力。无论是由于安全状况还是其他问题,都无关紧要-最需要的时间不是开始构建管理工具的时间。请注意,如果敌对方主动入侵,则取证分析可能是一项法律要求,并且在没有经过周密计划和文档编制的情况下,不得对受感染的服务器采取任何措施。尤其是在这个戴着黑帽子的新时代中,计算机专业人员必须加强自己的游戏,并能够快速保护易受攻击的系统。

安全的SSH密钥对

对异构UNIX环境的严格控制必须从最佳实践使用SSH认证密钥开始。我将以一个简单的要求打开本节。SSH私钥必须是以下三种类型之一:Ed25519,使用E-521曲线的ECDSA或3072位的RSA密钥。不符合这些要求的任何密钥都应退役(尤其是DSA密钥必须立即从服务中删除)。

Ed25519密钥格式与丹尼尔·J·伯恩斯坦,谁在现代密码学这样的卓越声誉,该领域正在成为DJB相关的单一文化Ed25519格式旨在提高速度,安全性和尺寸经济性。如果您所有的SSH服务器都足够新以支持Ed25519,请使用它,然后再考虑其他事项。

有关创建Ed25519密钥的指导,建议以“ -o”安全格式对工作因子进行100轮操作。增加轮数可以提高加密密钥抵御暴力攻击的强度(私有密钥的文件副本应落入敌对之手),但执行ssh-add时需要花费更多的工作和时间来解密密钥。尽管始终存在关于安全性改进的争议和讨论,但是我将在此处重复该指南,并建议新创建的SSH密钥的最佳格式是:

ssh-keygen -a 100 -t ed25519

您的系统可能太旧而无法支持Ed25519-Oracle / CentOS / Red Hat 7出现了此问题(7.1版本引入了支持)。如果您不能升级旧的SSH客户端和服务器,则您的下一个最佳选择可能是ECDSA密钥格式的E-521。

ECDSA曲线来自美国政府的国家标准研究所(NIST)。在所有NIST曲线中,最著名和最有效的是P-256,P-384和E-521。所有三个曲线都已被许多政府机构批准用于秘密通信,但是许多密码学家越来越怀疑 P-256和P-384曲线被污染。著名的密码学家布鲁斯·施耐尔 Bruce Schneier )表示:“我不再相信这些常数。我相信,国家安全局已通过它们与行业的关系来操纵它们。” 不过,DJB 对E-521曲线表示的赞赏有限:“说实话,我要说的是,有一条标准NIST曲线使用了一个很好的质数,即2 521– 1;但是这种质素的绝对大小使其比NIST P-256慢得多。”所有NIST曲线的“旁通道”攻击都比Ed25519具有更大的问题-P-521无疑是一个降级,而且许多人断言, NIST曲线是安全的。总而言之,存在一个强大的对手,它具有优于P-256和P-384曲线的优势,因此略微倾向于避免它们。请注意,即使您的OpenSSH( )版本具有E-521的功能,由于专利方面的考虑,您的供应商可能会将其禁用,因此在这种情况下,E-521不能选择。如果不能使用DJB的2 255 – 19曲线,此命令将生成E -521在功能强大的系统上的键:

ssh-keygen -o -a 100 -b 521 -t ecdsa

而且,不幸的是,既不支持ECDSA也不支持Ed25519的SSH服务器。在这种情况下,您必须使用更大的密钥大小才能使用RSA。绝对最小值是2048位的现代默认值,但是3072是更明智的选择:

ssh-keygen -o -a 100 -b 3072 -t rsa

然后,在最可悲的情况下,当您必须使用无法使用通过该-o选项创建的私钥工作的旧SSH客户端时, 可以删除id_rsa上的密码并创建一个裸键,然后使用OpenSSL对其进行加密Martin Kleppmann首次记录了PKCS#8格式的AES256 在下面为keygen实用程序提供一个空白的新密码,然后在OpenSSL重新处理密钥时提供一个新密码:

$ cd ~/.ssh$ cp id_rsa id_rsa-orig$ ssh-keygen -p -t rsaEnter file in which the key is (/home/cfisher/.ssh/id_rsa):Enter old passphrase:Key has comment 'cfisher@localhost.localdomain'Enter new passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved with the new passphrase.$ openssl pkcs8 -topk8 -v2 aes256 -in id_rsa -out id_rsa-strongEnter Encryption Password:Verifying - Enter Encryption Password:mv id_rsa-strong id_rsachmod 600 id_rsa

在较新的系统上创建所有这些键之后,可以比较文件大小:

$ ll .sshtotal 32-rw-------. 1 cfisher cfisher  801 Aug 10 21:30 id_ecdsa-rw-r--r--. 1 cfisher cfisher  283 Aug 10 21:30 id_ecdsa.pub-rw-------. 1 cfisher cfisher  464 Aug 10 20:49 id_ed25519-rw-r--r--. 1 cfisher cfisher  111 Aug 10 20:49 id_ed25519.pub-rw-------. 1 cfisher cfisher 2638 Aug 10 21:45 id_rsa-rw-------. 1 cfisher cfisher 2675 Aug 10 21:42 id_rsa-orig-rw-r--r--. 1 cfisher cfisher  583 Aug 10 21:42 id_rsa.pub

尽管它们相对很大,但我使用的所有OpenSSH版本都与PKCS#8格式的RSA私钥兼容。Ed25519公钥现在足够小,可以容纳80列而无需自动换行,并且既方便又高效且安全。

请注意,PuTTY在使用这些密钥的各种版本时可能会遇到问题,并且您可能需要删除密码才能成功导入PuTTY代理。

这些密钥代表可用于各种OpenSSH修订版的最安全的格式。它们确实不是用于PuTTY或其他常规互动活动的。尽管人们希望所有用户在所有情况下都可以创建强大的密钥,但是这些是大型系统活动的企业级密钥。但是,重新生成系统主机密钥以符合这些准则可能是明智的。

这些密钥格式可能会很快改变。量子计算机越来越担心其运行Shor算法的能力,该算法可用于寻找在合理时间内破解这些密钥的主要因素。最大的商用量子计算机D-Wave 2000Q有效地 显示了200量子位以下的活动,但该功能还不足以进行成功的攻击。NIST 宣布将于2017年11月截止的新型抗量子公钥系统竞赛。作为回应,包括DJB在内的团队已发布NTRU Prime的源代码看来,我们很可能会在未来两年内看到针对OpenSSH(以及可能的TLS 1.3)发布的一种量子后的公钥格式,因此请立即采取措施简化迁移。

同样,对于SSH服务器来说,限制其允许的密码,MAC和密钥交换也很重要,以免强密钥浪费在破损的加密上(3DES,MD5和arcfour应该长期禁用)。先前关于此主题的指南涉及SSH客户端和服务器配置中的以下(三行)行(请注意,sshd_config文件中的格式要求所有参数都在同一行中,且选项中没有空格;为清楚起见,在此处添加了换行符):

Ciphers chacha20-poly1305@openssh.com,
        aes256-gcm@openssh.com,
        aes128-gcm@openssh.com,
        aes256-ctr,
        aes192-ctr,
        aes128-ctrMACs    hmac-sha2-512-etm@openssh.com,
        hmac-sha2-256-etm@openssh.com,
        hmac-ripemd160-etm@openssh.com,
        umac-128-etm@openssh.com,
        hmac-sha2-512,
        hmac-sha2-256,
        hmac-ripemd160,
        umac-128@openssh.comKexAlgorithms curve25519-sha256@libssh.org,
              diffie-hellman-group-exchange-sha256

从上一版本开始,RIPEMD160可能不再安全,应将其删除。但是,较旧的系统可能仅支持SHA1,MD5和RIPEMD160。当然可以删除MD5,但是当不能选择更新的MAC时,PuTTY的用户可能会希望保留SHA1。在与现代系统一起工作时,较旧的服务器可能会给寻找合理的Cipher / MAC / KEX带来挑战。

此时,您应该具有用于保护客户端和服务器的强密钥。现在让我们使用它们。

编写SSH代理脚本

现代的OpenSSH发行版包含ssh-copy-id shell脚本,用于轻松进行密钥发行。以下是在远程帐户中安装特定的命名密钥的示例:

$ ssh-copy-id -i ~/.ssh/some_key.pub person@yourserver.comssh-copy-id: INFO: Source of key(s) to be installed:
   "/home/cfisher/.ssh/some_key.pub"ssh-copy-id: INFO: attempting to log in with the new key(s),
   to filter out any that are already installedssh-copy-id: INFO: 1 key(s) remain to be installed --
   if you are prompted now it is to install the new keysperson@yourserver.com's password:Number of key(s) added: 1Now try logging into the machine, with:
   "ssh 'person@yourserver.com'"and check to make sure that only the key(s) you wanted were added.

如果没有ssh-copy-id脚本,则可以使用以下命令手动安装密钥:

$ ssh person@yourserver.com 'cat >> ~/.ssh/authorized_keys' < \
      ~/.ssh/some_key.pub

如果启用了SELinux,则可能必须用安全类型标记一个新创建的authorized_keys文件。否则,将阻止sshd服务器守护程序读取密钥(系统日志可能报告此问题):

$ ssh person@yourserver.com 'chcon -t ssh_home_t
 ↪~/.ssh/authorized_keys'

安装密钥后,请使用-i选项一次性测试它 (请注意,您输入的是本地密钥密码,而不是远程身份验证密码):

$ ssh -i ~/.ssh/some_key person@yourserver.comEnter passphrase for key '/home/v-fishecj/.ssh/some_key':Last login: Wed Aug 16 12:20:26 2017 from 10.58.17.14yourserver $

通常,交互式用户可能会将其密钥与代理一起缓存。在下面的示例中,在上一节中创建的所有三种类型的密钥上都使用了相同的密码:

$ eval $(ssh-agent)Agent pid 4394$ ssh-addEnter passphrase for /home/cfisher/.ssh/id_rsa:Identity added: ~cfisher/.ssh/id_rsa (~cfisher/.ssh/id_rsa)Identity added: ~cfisher/.ssh/id_ecdsa (cfisher@init.com)Identity added: ~cfisher/.ssh/id_ed25519 (cfisher@init.com)

上面的第一个命令启动一个用户代理进程,该进程将环境变量(名为SSH_AGENT_SOCK和 SSH_AGENT_PID)注入到父外壳程序中(通过eval)。Shell意识到了代理并将这些变量传递给从此点开始运行的程序。

启动时,ssh-agent没有凭据,并且无法促进SSH活动。它必须通过添加键来准备,这可以通过完成 ssh-add当不带参数调用时,将读取所有默认键。也可以调用它来添加自定义键:

$ ssh-add  ~/.ssh/some_keyEnter passphrase for /home/cfisher/.ssh/some_key:Identity added: /home/cfisher/.ssh/some_key
 ↪(cfisher@localhost.localdomain)

请注意,代理不会将密码保留在密钥上。 ssh-add使用您在运行时输入的所有密码来解密找到的密钥,但是ssh-add终止时密码将从内存中清除 (它们不会发送到ssh-agent)。这使您可以在不造成任何麻烦的情况下升级到新的密钥格式,同时保持密钥的合理安全。

当前缓存的密钥可以用列出ssh-add -l(从中可以推断出“ some_key”是Ed25519):

$ ssh-add -l3072 SHA256:cpVFMZ17oO5n/Jfpv2qDNSNcV6ffOVYPV8vVaSm3DDo
     /home/cfisher/.ssh/id_rsa (RSA)521 SHA256:1L9/CglR7cstr54a600zDrBbcxMj/a3RtcsdjuU61VU
     cfisher@localhost.localdomain (ECDSA)256 SHA256:Vd21LEM4lixY4rIg3/Ht/w8aoMT+tRzFUR0R32SZIJc
     cfisher@localhost.localdomain (ED25519)256 SHA256:YsKtUA9Mglas7kqC4RmzO6jd2jxVNCc1OE+usR4bkcc
     cfisher@localhost.localdomain (ED25519)

在“启动”代理程序运行时,SSH客户端可以流畅地使用(信任)远程服务器,而无需进一步提示输入凭据:

$ sftp person@yourserver.comConnected to yourserver.com.sftp> quit$ scp /etc/passwd person@yourserver.com:/tmppasswd                              100% 2269    65.8KB/s   00:00$ ssh person@yourserver.com
   (motd for yourserver.com)$ ls -l /tmp/passwd-rw-r--r--  1 root  wheel  2269 Aug 16 09:07 /tmp/passwd$ rm /tmp/passwd$ exitConnection to yourserver.com closed.

可以锁定OpenSSH代理,以防止进一步使用其持有的凭据(这在挂起笔记本电脑时可能是适当的):

$ ssh-add -xEnter lock password:Again:Agent locked.$ ssh yourserver.comEnter passphrase for key '/home/cfisher/.ssh/id_rsa': ^C

解锁后,它将再次提供凭据:

$ ssh-add -XEnter lock password:Agent unlocked.

您还可以ssh-agent使用该-t 选项将密钥设置为在时间限制后到期,这对于需要在每天轮班后清除密钥的寿命长的座席很有用。

普通的shell用户可以使用许多不同的代理实现来缓存许多类型的密钥。除了标准的OpenSSH代理之外,用户还可以依赖PuTTY的pageant.exe,GNOME密钥环或KDE Kwallet(使用PUTTY代理可能会自行填充文章)。

但是,此处的目标是为关键服务器控件创建“企业”键。您可能不希望使用寿命长的药物来限制暴露的风险。使用“企业”键编写脚本时,将仅在活动期间运行代理,然后在活动结束时将其杀死。

有一些使用OpenSSH访问根帐户的特殊选项-该 PermitRootLogin参数可以添加到sshd_config文件(通常在/ etc / ssh中找到)。可以将其设置为简单的yes或 no, forced-commands-only这将仅允许执行显式授权的程序,或者将其等效的选项 prohibit-password或设置 without-password为允许访问此处生成的密钥。

许多人认为不应允许root用户访问。Michael W. Lucas 在SSH Mastery中解决了这个问题

有时,您似乎需要允许用户以root用户身份登录到系统。在几乎所有环境中,这都是一个非常糟糕的主意。当用户必须以普通用户身份登录然后更改为root用户时,系统日志将记录用户帐户,从而提供责任。以root用户身份登录会破坏该审计跟踪。...可以覆盖安全预防措施,并使sshd允许直接以root用户身份登录。这是一个坏主意,如果我告诉你怎么做,我会认为自己犯了渎职罪。通过SSH以root身份登录几乎总是意味着您正在解决错误的问题。退后一步,寻找实现目标的其他方法。

如果在多台服务器上需要快速采取root措施,则上述建议可能会造成痛苦的延迟。可以通过仅允许有限的一组“堡垒”服务器通过SSH发出根命令来解决卢卡斯的直接批评。应强制管理员使用无特权的帐户登录到堡垒,以建立问责制。

但是,远程“更改为root”的一个问题是Viterbi算法统计使用。 短密码,su -使用密码建立三进制网络配置命令和远程SSH调用都非常容易受到用户键盘运动的定时攻击。那些最关注安全的人将需要补偿。

对于我们其他人,我建议PermitRootLogin without-password为所有目标计算机设置设置。

最后,您可以ssh-agent 使用以下-k选项轻松地以交互方式终止

$ eval $(ssh-agent -k)Agent pid 4394 killed

考虑到这些工具以及它们的预期用途,下面是一个完整的脚本,该脚本在一个列表中为一个通用命名用户(不一定是root用户)在服务器列表上的一系列命令期间运行代理:

# cat artano#!/bin/shif [[ $# -lt 1 ]]; then echo "$0 - requires commands"; exit; fiR="-R5865:127.0.0.1:5865" # set to "-2" if you don't want
 ↪port forwardingeval $(ssh-agent -s)function cleanup { eval $(ssh-agent -s -k); }trap cleanup EXITfunction remsh { typeset F="/tmp/${1}" h="$1" p="$2";
 ↪shift 2; echo "#$h"
 if [[ "$ARTANO" == "PARALLEL" ]]
 then ssh "$R" -p "$p" "$h" "$@" < /dev/null >>"${F}.out"
  ↪2>>"${F}.err" &
 else ssh "$R" -p "$p" "$h" "$@"
 fi }    # HOST                                          PORT CMDif ssh-add ~/.ssh/master_keythen remsh yourserver.com                                  22 "$@"
     remsh container.yourserver.com                      2200 "$@"
     remsh anotherserver.com                               22 "$@"
     # Add more hosts here.else echo Bad password - killing agent. Try again.fiwait######################################################################## Examples:           # Artano is an epithet of a famous mythical being# artano 'mount /patchdir'      # you will need an fstab entry for this# artano 'umount /patchdir'# artano 'yum update -y 2>&1'# artano 'rpm -Fvh /patchdir/\*.rpm'#######################################################################

默认情况下,此脚本按顺序在主机集合上运行所有命令。如果ARTANO环境变量设置为PARALLEL,它反而会同步推出它们都作为后台进程和追加他们STDOUTSTDERR在/ tmp文件,(少于一百主机合理的服务器上时,这应该没问题)。该 PARALLEL设置不仅可用于更快地推送更改,而且可用于收集审核结果。

以下是使用yum update代理的示例此特定调用的来源必须穿越防火墙,并依赖于/etc/yum.conf文件中的代理设置,该文件使用上面的端口转发选项(-R):

# ./artano 'yum update -y 2>&1'Agent pid 3458Enter passphrase for /root/.ssh/master_key:Identity added: /root/.ssh/master_key (/root/.ssh/master_key)#yourserver.comLoaded plugins: langpacks, ulninfoNo packages marked for update#container.yourserver.comLoaded plugins: langpacks, ulninfoNo packages marked for update#anotherserver.comLoaded plugins: langpacks, ulninfoNo packages marked for updateAgent pid 3458 killed

该脚本可用于更常规的维护功能。运行XFS文件系统的Linux安装应定期进行“碎片整理”。尽管通常使用cron完成此操作,但它可以是集中式活动,存储在单独的脚本中,该脚本仅包含在适当的主机上:

&1'Agent pid 7897Enter passphrase for /root/.ssh/master_key:Identity added: /root/.ssh/master_key (/root/.ssh/master_key)#yourserver.com#container.yourserver.com#anotherserver.comAgent pid 7897 killed

以下artano脚本是一种为所有用户收集所有authorized_keys文件的内容的简便方法(此脚本对系统审核很有用,并且已编码为删除文件重复项):

artano 'awk -F: {print\$6\"/.ssh/authorized_keys\"} \
     /etc/passwd | sort -u | xargs grep . 2> /dev/null'

配置NFS挂载以将文件分发到远程节点非常方便。请记住,NFS是明文,并且敏感内容在未经加密时不应穿越不受信任的网络。在主机1.2.3.4上配置NFS服务器之后,我将以下行添加到所有客户端上的/ etc / fstab文件中,并创建/ patchdir目录。更改后,artano如果网络配置正确,则可以使用脚本批量装载目录:

# tail -1 /etc/fstab1.2.3.4:/var/cache/yum/x86_64/7Server/ol7_latest/packages
 ↪/patchdir nfs4 noauto,proto=tcp,port=2049 0 0

假设已安装NFS服务器,则可以从存储在其上的映像升级RPM(请注意,Oracle Spacewalk或Red Hat Satellite可能是更强大的修补方法):

# ./artano 'rpm -Fvh /patchdir/\*.rpm'Agent pid 3203Enter passphrase for /root/.ssh/master_key:Identity added: /root/.ssh/master_key (/root/.ssh/master_key)#yourserver.comPreparing...                          ########################Updating / installing...xmlsec1-1.2.20-7.el7_4                ########################xmlsec1-openssl-1.2.20-7.el7_4        ########################Cleaning up / removing...xmlsec1-openssl-1.2.20-5.el7          ########################xmlsec1-1.2.20-5.el7                  #########################container.yourserver.comPreparing...                          ########################Updating / installing...xmlsec1-1.2.20-7.el7_4                ########################xmlsec1-openssl-1.2.20-7.el7_4        ########################Cleaning up / removing...xmlsec1-openssl-1.2.20-5.el7          ########################xmlsec1-1.2.20-5.el7                  #########################anotherserver.comPreparing...                          ########################Updating / installing...xmlsec1-1.2.20-7.el7_4                ########################xmlsec1-openssl-1.2.20-7.el7_4        ########################Cleaning up / removing...xmlsec1-openssl-1.2.20-5.el7          ########################xmlsec1-1.2.20-5.el7                  ########################Agent pid 3203 killed

我假设我的听众已经对他们首选平台的打包工具有所了解。但是,为避免批评我几乎没有讨论补丁工具,以下是RPM操作命令的快速参考,这是企业系统上最常见的软件包格式:

  • rpm -Uvh package.i686.rpm —安装或升级软件包文件。

  • rpm -Fvh package.i686.rpm —如果安装了较旧的版本,请升级软件包文件。

  • rpm -e package —卸下已安装的软件包。

  • rpm -q package —列出已安装的软件包名称和版本。

  • rpm -q --changelog package —打印已安装软件包(包括CVE)的完整变更日志。

  • rpm -qa —列出系统上所有已安装的软件包。

  • rpm -ql package —列出已安装软件包中的所有文件。

  • rpm -qpl package.i686.rpm —列出软件包文件中包含的文件。

  • rpm -qi package —打印已安装软件包的详细说明。

  • rpm -qpi package —打印软件包文件的详细说明。

  • rpm -qf /path/to/file —列出安装了特定文件的软件包。

  • rpm --rebuild package.src.rpm —解压缩并在/ usr / src / redhat下构建二进制RPM。

  • rpm2cpio package.src.rpm | cpio -icduv —解压缩当前目录中的所有软件包文件。

编写SSH代理脚本的另一个重要注意事项是限制授权密钥的功能。有一种用于此类限制特定语法from=""子句特别令人感兴趣,该子句会将键的登录限制为一组有限的主机。声明一组“堡垒”服务器可能会很明智,这些服务器将记录非root用户登录,这些登录将逐步升级为使用企业密钥的受控用户。

以下是一个示例条目(请注意,我已经打破了这一行,这是不允许的语法,但是为了清楚起见,在此处执行):

from="*.c2.security.yourcompany.com,4.3.2.1" ssh-ed25519
 ↪AAAAC3NzaC1lZDI1NTE5AAAAIJSSazJz6A5x6fTcDFIji1X+↪svesidBonQvuDKsxo1Mx

可以对authorized_keys条目施加许多其他有用的限制 该 command=""会限制一键单个程序或脚本,将设置 SSH_ORIGINAL_COMMAND环境变量客户端的尝试呼叫脚本可以设置警报,如果变量不包含批准的内容。该 restrict选项也值得考虑,因为它会禁用大量的SSH功能,这些功能可能既多余又危险。

尽管可以将known_hosts文件中的服务器标识密钥设置为一种@revoked状态,但这不能通过authorized_keys的内容来完成。但是,可以在sshd_config中使用设置系统范围的禁止密钥文件RevokedKeys该文件将覆盖任何用户的 authorized_keys如果设置,则此文件必须存在并且可以被sshd服务器进程读取;否则,将根本不接受任何密钥(因此,如果您在有物理访问障碍的机器上进行配置,请格外小心)。设置此选项后,artano当应禁止从网络中禁用密钥时,请使用脚本将其快速添加到文件中。一个清晰方便的文件位置是/ etc / ssh / revoked_keys。

还可以为OpenSSH建立本地证书颁发机构(CA),该证书颁发机构将允许向具有到期日期的证书颁发机构注册密钥这些CA 对企业的控制可能非常复杂尽管SSH CA的维护不在本文的讨论范围之内,但是通过遵守Ed25519 / E-521 / RSA-3072的要求,由此类CA发行的密钥应该很牢固。

pdsh

存在许多用于控制服务器集合的高级工具,这些工具比我在此处介绍的脚本要复杂得多。最著名的可能是Puppet,它是用于企业控制的基于Ruby的配置管理系统。Puppet的受支持操作系统列表很短。如果您正在寻找对Android,Tomato,Linux智能终端或其他“外来” POSIX的低级控制,Puppet可能不是合适的工具。另一个流行的基于Ruby的工具是Chef,它以其复杂性而闻名。Puppet和Chef都需要在客户端和服务器上都安装Ruby,并且它们都将对找到的任何SSH密钥进行分类,因此,有关密钥强度的讨论完全适用于它们。

有几种类似的基于Python的工具,包括Ansible, Bcfg2, Fabric 和SaltStack其中,只有Ansible可以通过裸露的SSH连接运行“无代理”。其余的将需要在目标节点上运行的代理(这可能包括Python运行时)。

另一个流行的配置管理工具是CFEngine,它使用C语言进行编码,并具有很高的性能。已从CFEngine的某些部分演变而来,拥有一个虽小但正在增长的用户社区。

前面提到的大多数软件包都是商业许可的,有些是封闭源代码。

与此处介绍的活动最接近的底层工具是并行分布式外壳程序(pdsh),可以在EPEL存储库中找到它pdsh实用程序源自IBM开发的名为dsh的软件包,该软件包旨在控制计算集群。从存储库安装以下软件包以使用pdsh:

# rpm -qa | grep pdshpdsh-2.31-1.el7.x86_64pdsh-rcmd-ssh-2.31-1.el7.x86_64

SSH代理必须在使用带有加密密钥的pdsh时运行,并且没有明显的方法可以像artano脚本一样在每个主机的基础上控制目标端口下面是使用pdsh在三台远程服务器上运行命令的示例:

# eval $(ssh-agent)Agent pid 17106# ssh-add  ~/.ssh/master_keyEnter passphrase for /root/.ssh/master_key:Identity added: /root/.ssh/master_key (/root/.ssh/master_key)# pdsh -w hosta.com,hostb.com,hostc.com uptimehosta: 13:24:49 up 13 days,  2:13, 6 users, load avg: 0.00, 0.01, 0.05hostb: 13:24:49 up  7 days, 21:15, 5 users, load avg: 0.05, 0.04, 0.05hostc: 13:24:49 up  9 days,  3:26, 3 users, load avg: 0.00, 0.01, 0.05# eval $(ssh-agent -k)Agent pid 17106 killed

-w上面 的选项定义了主机列表。它允许有限的算术扩展,并且如果参数为破折号(-),则可以从标准输入中获取主机列表。PDSH_SSH_ARGS和 PDSH_SSH_ARGS_APPEND 环境变量可以用来传递自定义选项的SSH调用。默认情况下,将并行启动32个会话,并且通过在现有连接完成和关闭时启动新的主机调用来维护此“扇出/滑动窗口”。您可以使用-f选项或 FANOUT环境变量来调整“扇出”的大小有趣的是,这里有两个文件复制命令:pdcp和 rpdcp,它们类似于 scp

即使像pdsh这样的低级实用程序也缺乏一些可通过脚本编写OpenSSH获得的灵活性,因此当引入更复杂的工具时,请准备好承受更大的约束。

结论

现代Linux在多种平台上以多种方式与我们联系。如果这些系统的安全性得不到维护,其他人也可能会接触我们的平台并使其对我们不利。将任何Linux平台添加到环境中时,履行维护义务非常重要。这项义务始终存在,如果不履行,就会产生后果。

在紧急情况下,最好使用简单,开放且易于理解的工具。随着工具复杂性的增加,平台的可移植性肯定会下降,主管管理员的数量也会下降,这可能会影响执行速度。在许多其他方面,这可能是合理的交易,但是在安全性方面,它需要更仔细的分析。与正常操作相比,必须有更广泛的受众来记录和理解应急措施,并且使用更通用的工具可以促进这种讨论。

我希望这里介绍的技术将促使那些尚未面对的人进行讨论。

免责声明

本文中表达的观点和观点仅代表作者,不一定反映Linux Journal的观点

注意:

最近展示了 一种危害Ed25519的漏洞利用程序该漏洞依赖于自定义硬件更改来导出密钥的可用部分。物理硬件安全是加密完整性的基本要求,而且许多常见算法还容易受到缓存定时或其他用户可能没有特权的进程所执行的其他副信道攻击。在授予对处理敏感数据的系统的访问权限时,请小心。


©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×