最近我开始维护另一个公司网络,其中 BIND 已安装在专用 VM 中(表面上是出于安全考虑)。该公司使用 Debian 作为服务器系统。
我不得不说这个概念让我很感兴趣。除非您有 BIND 专用盒子(我没有),否则将其安装在 VM 主机(两个,因为它们位于主动/被动集群中)是了解 BIND 漏洞历史的一种安全风险。我知道它在 Debian (?) 中已被 chroot,但仍然如此。
你认为这是个好主意吗?优点缺点?鉴于当前的 BIND 版本,它真的需要还是基本上没有意义?
最近我开始维护另一个公司网络,其中 BIND 已安装在专用 VM 中(表面上是出于安全考虑)。该公司使用 Debian 作为服务器系统。
我不得不说这个概念让我很感兴趣。除非您有 BIND 专用盒子(我没有),否则将其安装在 VM 主机(两个,因为它们位于主动/被动集群中)是了解 BIND 漏洞历史的一种安全风险。我知道它在 Debian (?) 中已被 chroot,但仍然如此。
你认为这是个好主意吗?优点缺点?鉴于当前的 BIND 版本,它真的需要还是基本上没有意义?
我在 Debian 10 中通过 null-modem 电缆启用了串行控制台,如下所示:
/etc/default/grub
:
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8"
GRUB_TERMINAL=console
然后systemctl enable [email protected]
。
这就是它的全部。然而,虽然现在我可以通过串行方式查看所有启动消息(初始内核消息和systemctl
服务启动消息),但在出现登录提示之前,监视器(虚拟 tty)上没有显示任何内容。
是否可以在监视器和串行连接上显示这些启动消息?
在 KVM 主机上,我有一些带有不监听 ACPI 关闭事件的旧版操作系统的虚拟机。就像在 Debian 9.5 主机上发生的那样,关闭libvirt-guests.service
时每个此类 VM 等待 5 分钟,然后将其销毁。
为了避免这种情况并干净地关闭它们,我创建了自定义 VM 关闭服务,其中包含使用特殊方法关闭它们的脚本:
% cat /etc/systemd/system/multi-user.target.wants/vm_stop.service
[Unit]
Description=vm_shutdown
Before=libvirt-guests.service
[Service]
ExecStart=/bin/true
ExecStop=/usr/local/bin/vm_shutdown_all.sh
[Install]
WantedBy=multi-user.target
但是,在 libvirt-guests.service
关闭时,尽管Before=
上述服务中进行了设置,但该服务似乎仍在运行。
现在,我测试了自定义服务确实在关机时运行 - 它touch
是一个测试文件,我可以在其中验证它。
问题:我如何确保它在之前运行libvirt-guests.service
?
我有这个脚本:
#!/bin/bash -x
NEW_ARGS=()
for (( i=1; i <= "$#"; i++ )) do
if [ -f "${!i}" ]; then
NEW_ARGS+=" $(basename ${!i})"
else
NEW_ARGS+=" ${!i}"
fi
done
wine /usr/local/bin/red-063.exe ${NEW_ARGS[@]}
注意 中的前导空格NEW_ARGS+=" ${!i}"
。
如果我不这样做,请${NEW_ARGS[@]}
连接并作为一个参数传递给wine /usr/local/bin/red-063.exe
,例如:
redwin -t -f /home/mark/projects/learn/red_learn/a.red
...
wine /usr/local/bin/red-063.exe -t-fa.red
我可以添加这些空间,但感觉“不自然”。有没有办法像传递一样将数组传递给 Bash 中的命令$*
?
最后.bashrc
我补充说:
touch /tmp/bash_noninteractive_test
跑:
/usr/bin/ssh -v -C [email protected] 'ls'
在主机上(之前以交互方式登录):
% ls -l /tmp/bash_noninteractive_test
ls: cannot access /tmp/bash_noninteractive_test: No such file or directory
我认为~./bashrc
总是来源于非交互式外壳,比如通过 SSH?我该如何解决?
受影响的系统:
% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
% lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.11 (jessie)
Release: 8.11
Codename: jessie
我需要在主动-被动模式下构建 2 节点集群(类似?)解决方案,即一台服务器处于活动状态,而另一台服务器处于被动(备用)状态,不断从活动中复制数据。基于 KVM 的虚拟机将在活动节点上运行。
如果主动节点由于任何原因不可用,我想手动切换到第二个节点(成为主动节点和另一个被动节点)。
我看过这个教程:https ://www.alteeve.com/w/AN!Cluster_Tutorial_2#Technologies_We_Will_Use
但是,我没有足够的勇气相信全自动故障转移并构建复杂的东西并相信它可以正常运行。脑裂情况的风险太大,复杂性以某种方式失败,数据损坏等,而我的最大停机时间要求并不严重到需要立即自动故障转移。
我无法找到有关如何构建这种配置的信息。如果您已经这样做了,请在答案中分享信息/HOWTO。
或者也许可以使用 Linux 节点构建高度可靠的自动故障转移?Linux 高可用性的问题在于,就像 8 年前一样,人们似乎对这个概念产生了浓厚的兴趣,而且许多教程现在已经很老了。这表明 HA 在实践中可能存在实质性问题,一些/许多系统管理员干脆放弃了它。
如果可能,请分享如何构建它的信息以及您在生产中运行集群的经验。
我在成功执行脚本时遇到问题。
~/.monitrc
:
check host example.com with address example.com
if failed url http://example.com/startpage and content == "mainBaner"
timeout 10 seconds
then exec "/usr/local/bin/monit_example_error.sh"
else if succeeded then exec "/usr/local/bin/monit_example_ok.sh"
如果出现错误,它似乎会运行脚本,但在没有错误时不会运行。
日志显示测试已运行并成功,/var/log/monit.log
:
[CEST Jun 8 12:24:52] debug : 'example.com' succeeded testing protocol [HTTP] at INET[example.com:80/startpage] via TCP
[CEST Jun 8 12:25:22] debug : 'example.com' succeeded connecting to INET[example.com:80/dlibra] via TCP
[CEST Jun 8 12:25:46] debug : HTTP: Regular expression matches
[CEST Jun 8 12:25:46] debug : 'example.com' succeeded testing protocol [HTTP] at INET[example.com:80/startpage] via TCP
[CEST Jun 8 12:26:16] debug : 'example.com' succeeded connecting to INET[example.com:80/dlibra] via TCP
[CEST Jun 8 12:26:39] debug : HTTP: Regular expression matches
我检查了运行是否/usr/local/bin/monit_example_ok.sh
按预期工作(在相关目录中创建相关状态文件)。
操作系统:
% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
% uname -a
Linux ql 3.13.0-119-generic #166-Ubuntu SMP Wed May 3 12:18:55 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
监控:
ii monit 1:5.6-2 amd64 utility for monitoring and managing daemons or similar progra
在 SA wiki 上执行此操作的传统方法将 shell 脚本称为内容过滤器。
嗯,这是对每封电子邮件的额外fork
系统调用,并且将通过机器的流量很大。更不用说 shell/bash 脚本本身几乎没有效率。
在 Postfix 中是否有更有效的垃圾邮件过滤方法?
(不,Amavis 不是一个选项——这是交给我的明确要求)。
主机:Debian 7.2 x64。
来宾 Win 7 Pro 32 位。Virtio 磁盘驱动程序可以完美运行,但是 virtio net(netkvm 之类的)驱动程序存在问题。Virtio 驱动程序来自virtio-win-0.1-74.iso
.
此网卡在 win7 客户机中完美运行:
<interface type='bridge'>
<mac address='52:54:00:ea:39:d5'/>
<source bridge='br0'/>
<model type='e1000'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
这个没有:
<interface type='bridge'>
<mac address='52:54:00:70:c9:64'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</interface>
显然我已经从 ISO 安装了驱动程序,它们在设备管理器中显示为正常工作。卡“只是”似乎没有与主机通信 - 例如,它没有显示arp -n
在主机的输出中。
我也在使用 virtio 的同一台主机上使用 Linux 来宾,它们可以正常工作,那么它可以与主机配置有关吗?
我该如何解决?
我似乎在 Debian 7.2 x64 的 /etc 中的任何地方都找不到 MAXWAIT 设置(网桥初始化时间)。有时由于某种原因默认的 20 秒太短了,我想设置更长的时间。
我在 ZFS 上为 VM 定义了存储池:
virsh # pool-dumpxml zfs
<pool type='dir'>
<name>zfs</name>
<uuid>b2fba550-467f-8133-dee8-44ada7d0a807</uuid>
<capacity unit='bytes'>210316853248</capacity>
<allocation unit='bytes'>32768</allocation>
<available unit='bytes'>210316820480</available>
<source>
</source>
<target>
<path>/winvm/win1</path>
<permissions>
<mode>0700</mode>
<owner>4294967295</owner>
<group>4294967295</group>
</permissions>
</target>
</pool>
为 vms 创建 RAW 图像文件:
host /winvm/win1 % l
total 3.5K
drwxrwxr-x. 2 root root 3 Jan 3 14:03 .
drwxr-xr-x 3 libvirt-qemu libvirt-qemu 3 Dec 30 13:45 ..
-rw-------. 1 libvirt-qemu libvirt-qemu 20G Jan 3 14:03 t1.raw
定义了 t1 VM,但是当我尝试启动它时:
host /winvm/win1 % virsh start t1
error: Failed to start domain t1
error: internal error process exited while connecting to monitor: char device redirected to /dev/pts/13
kvm: -drive file=/winvm/win1/t1.raw,if=none,id=drive-sata0-0-0,format=raw,cache=none: could not open disk image /winvm/win1/t1.raw: Invalid argument
VM的存储文件不断将所有者更改为root:root:
host /winvm/win1 % ls -l
total 1
-rw-------. 1 root root 21474836480 Jan 3 14:03 t1.raw
我在那台机器上禁用了 SELinux:
host /winvm/win1 % sestatus
SELinux status: disabled
甚至更改了用户和上下文:
host /winvm/win1 % chcon -t virt_image_t -u libvirt-qemu t1.raw
而且我仍然不断收到上面的错误。为什么?SELinux 禁用后如何影响文件访问?
我已将 BIND 和 ISC DHCPD 配置为一起工作(使用密钥进行更新)。现在并不是说它根本不起作用:最常添加前向地图等。
然而,很多时候,没有明显的原因,该区域的 .jnl 文件(日志)被保留在那里,并且主区域文件没有更新。这导致在获取 DHCP 租约后某些主机无法解析(如果这些主机最初不在区域文件中,或者它导致旧地址)。
权限如下所示:
-rw-r--r-- 1 bind bind 691 Dec 10 11:06 myzone.zone
-rw-r--r-- 1 bind bind 765 Dec 10 12:17 myzone.zone.jnl
这不应该是权限问题,因为该区域确实(经常)通过 DHCP/DDNS 更新?
这个问题的根源和解决方法是什么?
操作系统:debian 7.2 x64,稳定版本绑定和 isc-dhcp 服务器。
我需要一个入门级虚拟化服务器供几个人使用,我喜欢富士通的这种线,但它们似乎都有内置的 SATA 磁盘接口。我想使用 SAS 磁盘,显然有一些 SAS 接口我可以使用的卡,但我从未使用过此类卡,想知道这是否是个好主意(重新可靠性和性能)还是应该使用集成 SAS 控制器?
我正在构建仅二进制包:
dpkg-buildpackage -b -us -uc
该构建实际上运行成功,但我已经删除了该软件包的先前版本,现在 dpkg-genchanges 抱怨:
dh_builddeb
dpkg-deb: building package `zzz' in `../zzz_01-4_amd64.deb'.
dpkg-genchanges -b >../zzz_01-4_amd64.changes
dpkg-genchanges: binary-only upload - not including any source code
dpkg-genchanges: error: cannot fstat file ../zzz_01-1_amd64.deb: No such file or directory
dpkg-buildpackage: error: dpkg-genchanges gave error exit status 2
有没有办法跳过这一步?我真的不需要它,因为我正在构建 deb 包以供本地使用,而以前的版本是不必要的。
在 saslsauthd 重新启动时,我不断获得对/var/run/saslauthd
dir 的以下权限:
drwx--x---
这使得例如 Exim 无法与 saslauthd 交谈。
如果我像这样更改权限:
chmod o+x /var/run/saslauthd
..Exim 可以再次与 saslauthd 交谈。但是,正如我所写,/etc/init.d/saslauthd restart
足以再次将权限更改为 710。
我没有在/etc/init.d/saslauthd
脚本中找到任何东西来实现这一点。这里发生了什么?
操作系统:Debian 7.0。