如何使用OPSI快速捕获世界或管理Windows计算机网络

免责声明:
作者喜欢拐弯抹角的短小拐杖,并且还喜欢自由开放软件,以提供灵活性和可伸缩性。本文的目的是希望推广以及谈论OPSI(开放式PC服务器集成)软件管理系统,这在俄罗斯Internet上是未知的。


当Ilon Mask打电话给我时,我正坐在办公室里喝咖啡,用纯俄语告诉我,这已经足够忍受了,是时候集合最好的思想来对抗某种病毒了,现在,五分钟后,我正在该办公室将配备100台计算机,我急需部署10台Windows,明天早晨,来自世界各地的科学家将来到办公室开始研究防病毒软件。好吧,这不是我一生都在等待的东西吗?一个好的工具值得挑战。

为了实施该计划,我将使用OPSI系统-Open PC Server Integration。

OPSI用德国的python编写,显然,免费和可扩展的拐杖也非常喜欢它。

基本系统功能:

  1. 自动软件部署

    它的工作方式如下:分析安装程序并制作出opsi软件包,以正确的方式安装程序。它最适合与msi软件包一起使用,它还知道其他几种格式。它可以运行bat文件或powershell脚本,但原则上可以运行任何解释器。有内置的注册表系统,通常是完整填充,可能是系统的最佳部分。
  2. 自动安装操作系统

    我只使用从映像安装,这是最快的方法,但是有一些选项可以从头开始进行脱机安装。


  3. , , , , windows. , , windows, , .
  4. 几个方便的管理界面,可以灵活集成

    一个带有图形界面的程序,一个可以向其发送命令的http界面,可以从服务器控制台控制OPSI,将命令嵌入脚本中,可以从python访问后端,但是我很不幸,虽然我没有这样的魔力。
  5. 支持多个软件仓库服务器(这些服务器直接包含正在进行部署的软件)。

    您可以将许多服务器添加到每个子网或计算机组,每个服务器都将为自己的网络服务。

由模块实现的系统功能(有免费和付费模块):

  1. LDAP连接器(收费)将

    域和opsi连接到一个整体的连接器
  2. ()

    : , ...
  3. MySQL ()

    OPSI mysql , 300
  4. Nagios ()

  5. ()

    , opsi , , .
  6. ()

    .
  7. ()

    , , , . , ansible puppet, . linux windows .
  8. WAN ()

    , .
  9. ()

  10. OTRS::ITSM ()

  11. ()

    , , , « », , .

您可以在此处详细了解。

他们的货币化模型如下:他们出售模块,直到他们收集到一定数量的免费模块。

将计算机带入我的办公室并组装好后,我将AD服务器安装在Windows服务器上,并在其上提升domain.local域以及DNS和DHCP。

您可以在工作组和域中安装OPSI,我们将在域中安装OPSI,但不绑定到AD(LDAP连接器)。

我们将按照以下方案将Windows 10部署到计算机网络:我们将准备包含所有程序的可部署Windows 10映像,通过opsi通过网络启动,使用clonezilla将其自动保存到文件,然后将所有计算机设置为通过opsi自动安装,通过网络自动启动我们将通过tftp将这个文件传播到广播网段中的所有计算机上。

为此,在DHCP服务器区域上,我们将在未来的opsi服务器192.168.1.229的ip中设置参数编号66

图片

,并将参数67带到linux / pxelinux.0。

在DNS中,在其静态地址192.168.1.229下添加opsiserver.domain.local
然后,我们将在铁板上为opsi服务器创建一个虚拟机,该虚拟机可以承受您的负载并在速度方面适合您。欢迎使用SSD和数张网卡。

Opsi不支持所有系统;可在此处找到兼容性列表

我们会立即在英语语言环境中安装,我强烈建议您不要在此服务器上的任何地方使用西里尔字母。

我最喜欢的debian 10发行版以最小配置安装,名称为opsiserver。

安装并重新启动后,以防万一,我们配置语言环境:

dpkg-reconfigure locales

我选择有de_ en_和ru_系统离开en_US.UTF8的所有内容。

进一步的安装是该教程适应此任务的重述

如果服务器名称与我们需要的名称不同,请更改它:

hostname opsiserver.domain.local

验证:

hostname -f

让我们将/ etc /主机设置为以下形式:

127.0.0.1 localhost
127.1.1.1 localhost.localdomain
192.168.1.229 opsiserver.domain.local opsiserver

而且我们将永远忘记它的存在,因为opsi要求该文件的内容,并且当它被更改时,它有时会开始反叛并撒满错误。

安装所需的软件包:

apt install wget host pigz mc -y

apt install samba samba-common smbclient cifs-utils -y 

我们默认安装了mysql服务器,maria-db为我起床,它也将正常工作。

apt install default-mysql-server -y

sudo mysql_secure_installation

我们肯定地回答问题,更改root密码并记住该密码。

将OPSI存储库添加到系统中:

echo "deb http://download.opensuse.org/repositories/home:/uibmz:/opsi:/4.1:/stable/Debian_10/ /" > /etc/apt/sources.list.d/opsi.list

wget -nv https://download.opensuse.org/repositories/home:uibmz:opsi:4.1:stable/Debian_10/Release.key -O Release.key
apt-key add - < Release.key

更新:

apt update

如果是tftpd,则将其删除,因为OPSI会与之冲突:

apt remove tftpd

我们从inetd中删除了tftp支持,因为如果支持,则OPSI将与之冲突:

update-inetd --remove tftp
apt install opsi-tftpd-hpa

并直接安装opsi服务器:

apt install opsi-server

在此过程中,他们将要求创建自签名证书所需的数据,而自签名证书又是客户端与服务器的加密连接所必需的。
安装Windows支持:

apt install opsi-windows-support

配置mysql后端:

opsi-setup --configure-mysql

图片

我们设置服务器地址(localhost),代理的用户(root),mysql中的root密码(我们之前记得),opsi数据库的名称(opsi),将在该数据库中工作的用户的名称(opsi),该用户的密码(我们发明了新)。

接下来,对于debian 10,您需要将/ usr / sbin添加到PATH:

PATH=$PATH:/usr/sbin

并将同一行添加到主目录中的.bashrc。如果不这样做,则在下一步中,您将收到错误“ chpasswd not found”。

我们初始化系统并为系统的文件和目录设置必要的权限:

opsi-setup --init-current-config
opsi-set-rights

服务重启:

systemctl restart opsiconfd.service
systemctl restart opsipxeconfd.service

配置samba:

opsi-setup --auto-configure-samba

OPSI客户端通过端口4447上的https连接到主服务器,如果您需要调用某种安装方式,则客户端将从opsi服务器安装samba ball并从中安装软件。为了实现这一点,我们允许OPSI重新配置samba。

桑巴重启:

systemctl restart smbd.service
systemctl restart nmbd.service

设置pcpatch系统用户的管理员密码:

opsi-admin -d task setPcpatchPassword

现在创建一个用户来管理系统:

useradd -m -s /bin/bash adminuser

为他创建一个密码:

passwd adminuser

现在,我创建的samba密码与系统中的相同:

smbpasswd -a adminuser

添加到群组:

usermod -aG pcpatch adminuser

如果我们要对根下的OPSI进行操作,则需要将根添加到组中:

usermod -aG pcpatch root

一些拐杖:

opsi-setup --patch-sudoers-file

现在,您可以将软件包下载到系统中,然后在装入时喝咖啡。

opsi-package-updater -v install

随后,可以使用以下命令更新软件包:

opsi-package-updater -v update

现在转到
https://download.uib.de/opsi4.1/misc/helper/,从那里下载并安装由opsi配置的管理界面,以

opsi-configed-setup.exe

输入服务器,输入服务器地址,我们的adminuser用户和他的密码,

https://opsiserver.domain.local:4447/

我们就在系统中。

至此,服务器已安装!

图片

1-连接到该服务器的所有客户端,可以将它们分解为多个组,包括嵌套的组,将分配立即应用于整个组。
2-带有客户端的选项卡,这是由opsi控制的那些计算机的列表。3-
客户端是一个列表,在这里您可以按照应用目的以任何顺序选择它们
4-“产品配置”-翻译的受害者。实际上,有一些软件包可以用opsi术语安装在Windows中-localboot产品
5-Netboot产品-这是通过网络下载的所有内容
6-opsi-mac-address-计算机的罂粟是网络引导期间确定的内容
7-opsiHostKey是opsi系统中客户端的“密码”(如果从其中删除)计算机opsi客户端,然后重新安装它,将无法使用,因为密码将保持旧状态并且不合适。这既是错误,又是功能。那你会怎么做?

现在,我们将准备将要溢出的Windows 10图像。我们将使用的Clonezilla不如acronis好,但是它仍然知道如何将映像从较小的磁盘溢出到相同或更大的磁盘。

我们将所有需要的程序以及Windows 10的远程服务器管理工​​具放入系统中。我安装了Windows 10 1903,安装了1803,并需要启动所有程序。你可以在这里下载:https://www.microsoft.com/zh-cn/download/details.aspx?id=45520
对于netdom实用程序,我们需要它,它使您可以自动将计算机输入域。

为此,我们从此处https://github.com/valmont2k/renamejoin下载文件到c:\ renamejoin目录。我们在域控制器上创建一个域管理员,该域管理员只能使用Joinadmin登录名(密码为password1234QWE)将计算机输入域。如果攻击者拦截了该密码,则他只能将计算机带入我们的域。

在完全准备好的Windows的管理控制台中,从createtesk.txt运行该行,这将创建一个在启动时启动的任务。

整个方案将如下工作:
当我们将映像拆分到所有计算机时,在第一次启动时,Windows将启动一个任务C:\renamejoin\step1.cmd该任务将计算机重命名为win-%random%,重新引导计算机,删除C:\renamejoin\step1.cmd并重命名C:\renamejoin\step2.cmdC:\renamejoin\step1.cmd。下次启动时,Windows将启动C:\renamejoin\step1.cmd,这将使该计算机进入域,重新启动它并删除它C:\renamejoin\step1.cmd。我们可以稍后从域计算机中删除潜在危险的任务。当然要通过OPSI!

图片

现在是时候将准备好的Windows转换为映像了。

通过带有加号的计算机图标,将我们的计算机添加到opsi opsi配置的管理界面中,设置其罂粟地址。救。我们传递给Netboot产品,在clonezilla对面放置“设置”。在客户端的配置中,我们公开了所有内容,如屏幕截图所示:文件名和用于将整个磁盘填充到映像中的命令。在装有Windows的计算机的BIOS中,我们设置从网络下载。重新启动组件。如果一切操作正确,您将无需借助手动即可查看Windows如何流入图像。

图片

同时,计算机是组装在一起的,但是需要将它们作为客户端与它们的罂粟地址一起添加到opsi中,用笔添加它们根本不是一成不变的事情,对吗?

解决方案是:

apt install tcpdump

在opsiserver上运行:

tcpdump -n udp -vvvvv -e port 69 > /var/log/tftp

并且,为所有计算机设置BIOS设置以通过网络引导(同时通过网络从PCI-E设备唤醒,您将了解稍后的原因),然后加载它们。如果在引导过程中出现opsi引导菜单的蓝色窗口,

图片

则说明您所做的一切正确。

引导时,计算机访问我们的服务器,tcpdump将其罂粟地址写入文件/var/log/tftp,然后https://github.com/valmont2k/opsi-hosts-importer在所有计算机都标记为opsi并将其罂粟地址保留在其中之后,使用repo脚本在opsiserver上运行。该脚本使用https://download.uib.de/opsi4.1/experimental/documentation/html/opsi-api-documentation/opsi_API.html中的opsi API 和一些魔术。启动后,您将以win%random32%.domain.local的形式在opsiserver上拥有客户端

下一步是将Windows映像(应该已经完成​​)投射到所有计算机。

图片

为此,选择您需要在其上安装Windows的所有计算机,然后对面的clonezilla我们按照屏幕截图中的设置值。您关闭计算机,然后依次打开其中的几台计算机,并观察Windows如何自动滚动到计算机上,将它们本身重命名并输入到域中。

如果您也想自动执行此操作,请放入etherwake并编写一个脚本,该脚本以指定的延迟从/ tmp / newmacs文件中获取mac地址,并唤醒其主机,以便轮流滚动Windows。参见更新1

当我用Ilon Mask再次打电话并添加以下内容时,我从广告洗发水中做出了罗纳尔多的手势,并且已经在打包咖啡。

-是的,我忘了说,明天所有计算机上都必须有%program%最新版本,您能处理吗?
-当然,一切都会在明天!
我无法让技术专家的偶像感到不安,因此您需要重新动动脑筋。

如果计算机在启动时为自己设置了一个名为opsi-client-agent的opsi客户端,那就太好了。这可以通过域组策略来完成。

为此,在安装过程中无需输入密码即可完成此操作,您需要
/var/lib/opsi/depot/opsi-client-agent/files/opsi/cfg/config.ini在opsiserver上文件中
添加用户密码作为service_hidden_​​password的值adminuserbase64

[installation]
service_user=adminuser
service_password=none
service_hidden_password=base64HERE

接下来,将组策略添加到setupOPSI域中,并从此处获取脚本。https://github.com/valmont2k/opsi-install-opsi-client-agent-over-active-directory-domain-policy
记住在脚本中插入您的值。

图片

如果一切操作正确,则在域中的第一次重新引导时,客户端将进行安装opsi-client-agent,重新引导并win-%random%在OPSI管理界面中的名称下显示具有相同罂粟地址的老客户可以删除。

现在您可以继续进行安装了%program%

我们在这里https://forum.opsi.org/viewtopic.php?f=22&t=7573找到指向该软件包的链接*.opsi,其名称packagebuilder类似于"opsi PackageBuilder Windows (opsi Paket)"

将软件包下载到/var/lib/opsi/workbenchopsiserver 上的目录

cd /var/lib/opsi/workbench

wget https://opsipackagebuilder.s3.amazonaws.com/opsiPackageBuilder/python/opsipackagebuilder_8.4.4-1.opsi 

并安装:

opsi-package-manager -d ALL -i opsipackagebuilder_8.4.4-1.opsi

现在,在opsi管理界面中,单击更新按钮,然后看到我们有新的软件包opsipackagebuilderopsi-setup-detector

我们将它们通过Windows下测试计算机上的控制界面进行放置。

当程序opsipackagebuilderopsi-setup-detector建立,运行opsi-setup-detector在安装程序和渔翁得利它windirstat,从官方网站预先计划下载。

在安装之前,您需要配置程序设置。我们将球安装在测试计算机\\ opsiserver.domain.local \ opsi_workbench上,作为驱动器z:在指定字段中写入我们的名称和邮件:

图片

OPSI可以同时使用32和64个安装程序制作一个软件包,并根据系统容量进行设置,我们到处都有64位,因此请单击“分析单个文件...”:

图片

我们看到检测器不理解安装目录,我们可以尝试通过安装程序来安装程序,从而自己找出原因。但是他检测了安装程序的类型,程序的版本,以组装和部署形式出现的应用程序的大小,脱机安装密钥,脱机删除密钥和名称卸载程序。

图片

我们自己进入安装目录,然后单击“下一步”:
图片

在这里您可以添加产品名称,其ID,描述并设置软件包的版本,即进行我们尝试组装的软件包(在本例中为首次尝试):

图片

您可以放下依赖项,意味着要安装当前软件包,将安装我们的要求中所述的那些软件包以进行安装:

图片

创建OPSI软件包:

图片

我们创建了该软件包,现在需要转到以下目录中的opsiserver:/var/lib/opsi/workbench/windirstat

收集包裹:

opsi-makepackage

安装它:

opsi-package-manager -d ALL -i windirstat-1.1.2-1.opsi

如果一切顺利,则在经过opsi配置的管理界面中,单击“更新”按钮,然后看到我们有一个新软件包windirstat,可以将其安装在网络上的选定计算机上。

答对了!第一包组装好了!

为了使我们的任务复杂化,我们将使用Powershell在Windows防火墙中创建一条规则,该规则可允许客户端访问端口4441和4447,并且将通过注册表调整为用户自动加载此应用程序,就好像它是使者一样。

打开opsi软件包构建器:

图片

选择打开软件包,然后使用windirstat打开我们的软件包:

图片

默认情况下,OPSI的行为如下:当从uninstall.opsiscript中删除程序时,将调用delsub.opsiscript来删除该程序。从setup.opsiscript安装程序时,将调用delsub.opsiscript,该程序将删除该程序,然后setup.opsiscript将其安装。因此,我们进行编辑以在setup.opsiscript中创建某些内容,并进行编辑以删除delsub.opsiscript中的某些内容。

这些脚本的所有魔力都体现在文档https://download.uib.de/opsi4.1/documentation/html/en/opsi-winst-manual/opsi-winst-manual.html

setup.opsiscript中,可以通过铅笔图标打开,然后通过脚本树的delsub.opsiscript。

图片

这是完整的文件菜单。

图片

每次构建软件包的尝试都应增加一次。

图片

我们将程序添加为通过opsi自动加载,为此,请在setup.opsiscript中插入以下行:

Registry_changes  /AllNTUserdats /64bit
[Registry_changes]
OpenKey [Software\Microsoft\Windows\CurrentVersion\Run]
Set "WinDirStat" = "C:\Program Files (x86)\WinDirStat\windirstat.exe"

在delsub.opsiscript中,插入以下行:

Registry_changes  /AllNTUserdats /64bit
[Registry_changes]
OpenKey [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
;Set "WinDirStat" = "C:\Program Files (x86)\WinDirStat\windirstat.exe"
DeleteVar "WinDirStat"

我们通过运行powershell脚本将规则添加到防火墙,为此,请在setup.opsiscript中插入以下行:

DosInAnIcon_PowerShell_ExecutionPolicy
ExecWith_PowerShell_NichtPDCAktionen powershell.exe winst /sysnative
[DosInAnIcon_PowerShell_ExecutionPolicy]
echo "powershell set-executionpolicy RemoteSigned ..."
powershell.exe set-executionpolicy RemoteSigned
exit %ERRORLEVEL%

[ExecWith_PowerShell_NichtPDCAktionen]
; hier Dein PS-Code

New-NetFirewallRule -DisplayName 'OPSI-Inbound' -Profile @('Domain', 'Private', 'Public') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('4441', '4447')

在delsub.opsiscript中,插入以下行:

DosInAnIcon_PowerShell_ExecutionPolicy
ExecWith_PowerShell_NichtPDCAktionen powershell.exe winst /sysnative
[DosInAnIcon_PowerShell_ExecutionPolicy]
echo "powershell set-executionpolicy RemoteSigned ..."
powershell.exe set-executionpolicy RemoteSigned
exit %ERRORLEVEL%

[ExecWith_PowerShell_NichtPDCAktionen]
; hier Dein PS-Code
Remove-NetFirewallRule -DisplayName 'OPSI-Inbound'

完整的代码可以在这里查看:

https : //github.com/valmont2k/WinDirStatOpsiPackageTest

我已经放松了,看着opsi将%program%最新版本发布到整个网络,因为Ilon再次打断了我的想法。
-下周将再有500人到来,办公室已经被租用,计算机正在被导入,有一个网络连接器,您需要在城市的六个分支机构中部署Windows网络,您能应付吗?
-好吧,当然,这不是火箭科学-我很疲倦地开玩笑作为回应。

我们使用管理程序克隆opsiserver服务器,并将其部署在分支中。
我们假定中心办公室通过VPN以至少10 Mbps的速度连接到分支机构。

现在,我们将创建一个仓库服务器,即,用于在分支机构中存储软件包的服务器。分支机构中的客户端将在主服务器上打开https,如果您需要安装软件,他们会将仓库服务器安装到分支机构中并从分支机构中进行安装,尤其是这样做是为了节省办公室和分支机构之间的Internet通道。

我们在分支服务器opsiserver-2上配置了来自本地网络的静态地址,并/etc/network/interfaces根据新网络更改了文件

更改主机名和主机:

sed -i 's/opsiserver/opsiserver-2/' /etc/hostname
sed -i 's/opsiserver/opsiserver-2/g' /etc/hosts

在/ etc / hosts中,我们通过输入新的IP地址来更新数据

reboot

使用opsi重命名opsi服务器:

opsi-admin --no-depot -d method host_renameOpsiDepotserver opsiserver.domain.local opsiserver-2.domain.local

在服务器opsiserver-2.domain.local中,我们将其作为仓库连接到opsiserver.domain.local:

opsi-setup --register-depot

指定将新仓库连接到的主服务器的名称,管理员和密码:您

图片

无需在此处进行任何更改

图片

可以通过opsi-configed验证所有操作均已正确完成:

图片

接下来,您需要配置系统,以便客户端自己选择仓库服务器。我们选择所有客户并将其设置为动态仓库。默认情况下,客户端查看其IP地址并从其网络中选择软件仓库。

图片

现在,我们配置所有将来的客户端立即动态选择仓库:

图片

就是说,新仓库服务器的设置已完成,您可以使用与之前在总公司中安装的脚本相同的脚本为本地网络上的计算机安装opsi-client-agent。忘记更改脚本中的IP地址。

在每个分支中,我们都设置一个域控制器(您可以只读),进行自己的网络寻址,将Windows域内的默认站点划分为多个子站点,每个站点都构成我们的子网,我们的组策略及其opsi-client-agent安装脚本。

然后我们在新分支中重复。

我喝完咖啡回家后,网卡上的LED指示灯指示新设备和新系统即将推出,这已经降到了散热器的噪音......

更新1:
事实证明,无需编写脚本,经过opsi配置的鼠标可以通过sheduler单击唤醒客户。

All Articles