我试图将主目录的层次结构暴露给许多 FreeBSD 监狱。主目录的配置使得每个目录都是唯一的 ZFS 数据集。监狱用于开发工作,因此会定期创建和销毁。
我的第一个想法是简单地使用nullfs挂载/home到 jail,但nullfs不提供任何访问从属文件系统的方法。
我的第二个想法是通过 NFS 导出目录,然后在每个 jail 中运行自动挂载程序守护程序 (amd)。如果可以在监狱内执行 NFS 挂载,这将是有效的。但事实并非如此。
我的第三个想法是在主机上运行 amd 并将nullfs挂载到监狱中……但是 amd 对nullfs 的支持不存在。
我的第四个想法是回到使用 NFS 导出目录,因为 amd 当然可以与 NFS 一起使用,对吗?不幸的是,amd 不是在目标挂载点上挂载目录,而是喜欢在临时位置 ( /.amd_mnt/...)挂载东西,然后创建符号链接……当然,这在 jail 环境中是无用的。
那么也许您可以使用nullfs将 的子目录暴露/.amd_mnt给监狱?不!这让我们回到了我的第一次尝试,我们发现无法使用nullfs访问从属文件系统。
然后我的头爆炸了。
我正在尝试做的事情有没有好的解决方案?一个糟糕的解决方案是在启动 jail 之后运行一个脚本,该脚本将为每个主目录创建多个nullfs挂载点,但这非常笨拙——它需要定期运行以考虑新目录或删除的目录。所以基本上我将不得不编写一个糟糕的自动挂载程序。
一定会有更好的办法。帮助我,Serverfault,你是我唯一的希望!
更新 1:我突然想到我可以用 解决部分问题pam_mount,尽管这充其量是不完整的。此外,文档中不清楚是否pam_mount可以自动创建目标挂载点。如果它需要先验存在挂载点,那么这个解决方案不会比我已经提出的坏自动挂载器更好。
更新 2:如下面的答案中所讨论的,VFCF_JAILNFS 文件系统上的设置确实允许 jails 执行 NFS 挂载。不幸的是,自动挂载程序继续无用的行为,并且当在监狱中运行时,它似乎非常擅长以这样的方式陷入困境,以至于需要重新启动系统才能删除进程条目。
我最近开始尝试在最新版本的 KVM/QEMU/libvirt 中支持直通文件系统。使文件系统可用于读取访问“刚刚奏效”,但我对写入访问应该如何工作感到有些困惑。在客户机中挂载文件系统后:
# mount -t 9p -o trans=virtio /fs/data /mnt
Run Code Online (Sandbox Code Playgroud)
如果现有文件具有 mode ,我可以修改它o+w:
# cd /mnt/work
# ls -l foo
-rw-rw-rw-. 1 root root 17 Dec 20 11:16 foo
# cat foo
this is line one
# echo this is line two >> foo
# cat foo
this is line one
this is line two
Run Code Online (Sandbox Code Playgroud)
但是无论目录权限如何,我都无法创建新文件或目录:
# ls -ld /mnt/work
drwxrwxrwx. 2 root root 4096 Dec 20 11:16 /mnt/work
# cd /mnt/work
# …Run Code Online (Sandbox Code Playgroud) 我们想使用 gpg 签名来验证我们系统配置管理工具的某些方面。此外,我们希望使用“信任”模型,其中使用主签名密钥对各个系统管理员密钥进行签名,然后我们的系统信任该主密钥(并使用“信任网络”来验证我们的系统管理员的签名)。
这为我们提供了很大的灵活性,例如可以在有人离开时轻松撤销对密钥的信任,但我们遇到了问题。虽然该gpg命令会告诉您密钥是否不受信任,但它似乎不会返回指示此事实的退出代码。例如:
# gpg -v < foo.asc
Version: GnuPG v1.4.11 (GNU/Linux)
gpg: armor header:
gpg: original file name=''
this is a test
gpg: Signature made Fri 22 Jul 2011 11:34:02 AM EDT using RSA key ID ABCD00B0
gpg: using PGP trust model
gpg: Good signature from "Testing Key <someone@example.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key …Run Code Online (Sandbox Code Playgroud) 我们最近开始试验 IPv6,我们必须解决的首要问题之一是为两个协议栈处理一套完全独立的防火墙 (Linux iptables/ip6ables) 规则。我们的防火墙逻辑主要基于许多特定用途的网络(例如,10.0.0.0/24 是员工工作站网络,10.1.0.0/24 是数据库网络,10.2.0.0/24 是 Web 服务器网络等),并且 IPv6 和 IPv4 的逻辑将基本相同,以不同的网络前缀为模。
人们在做什么来管理这种情况?理想情况下,我希望能够从相同的源文件生成 iptables 和 ip6table 规则集。我已经使用 bash 拼凑了一些东西,但它不一定漂亮,我怀疑那里一定存在更好的解决方案。
我对基于 Puppet 的解决方案特别感兴趣,它充分利用了 Puppet 自己的依赖机制来实现规则(或规则组)的相对排序。
我正在为 ldap 制作备份脚本。我希望错误转到 /var/log 中的文件,并将输出转到备份文件夹中的另一个文件。目前我正在重定向到一个临时文件,然后将临时文件发送到日志。不过,我宁愿将其作为 1 个班轮使用...
/usr/bin/ldapsearch -x -LLL -b "dc=contoso,dc=com" "(objectclass=*)" -h ldap.server -v 2>>/tmp/ldaptmp.err |
gzip -c > /mnt/backups/ldap/`date +\%Y\%m\%d`.ldif.gz ||
logger -t ldapbackup -p local6.err error exit $?
cat /tmp/ldaptmp.err | grep -v "ldap_initialize( ldap://ldap.server )" |
grep -v "filter: (objectclass=\*)" |
grep -v "requesting: All userApplication attributes" >$ERR_LOG
rm -f /tmp/ldaptmp.err
Run Code Online (Sandbox Code Playgroud)
关于如何将 stderr 和 stdout 重定向到不同管道以将此命令压缩为 1 行的任何想法?或者,还有更好的方法?
我正在尝试实现一个 9000 字节的 MTU,用于 KVM 来宾和主机系统之间的存储通信。主机有一个br1具有 9000 字节 MTU的网桥 ( ):
host# ip link show br1
8: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP
link/ether fe:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ff
inet 172.16.64.1/24 brd 172.16.64.255 scope global br1
inet6 fe80::21b:21ff:fe0e:ee39/64 scope link
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
来宾有一个连接到此网桥的接口,该接口也有一个 9000 字节的 MTU:
guest# ip addr show eth2
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ff
inet 172.16.64.10/24 brd 172.16.64.255 scope global eth2
inet6 fe80::5054:ff:fe50:f355/64 scope …Run Code Online (Sandbox Code Playgroud) 我正在研究连接网络的 USB 集线器,以便在需要硬件加密狗时在虚拟化环境中运行许可软件。
是否有适用于 Linux 和 Windows 的解决方案?大多数专用设备——例如Zonet ZUH2214或(非常昂贵的)Digi AnywherUSB/2——似乎仅适用于 Windows。Linux 有USB/IP项目,似乎有 Windows 驱动程序,但该站点上的最后一个“新闻”帖子是在 2007 年,所以我对该项目的可行性并不完全有信心。
有没有人找到在两种环境中都能正常工作的解决方案?
给定使用 SVNParentPath 的典型 Subversion/Apache 配置,存储库托管/svn/如下:
<Location /svn>
DAV svn
SVNParentPath /srv/source/svn/repos
SVNReposName "Subversion Repository"
AuthzSVNAccessFile /srv/source/svn/authz
Satisfy Any
AuthType Basic
AuthBasicProvider file
AuthName "Subversion Repository"
AuthUserFile /srv/source/svn/htpasswd
Require valid-user
</Location>
Run Code Online (Sandbox Code Playgroud)
有没有办法覆盖特定存储库的此配置,而不必将它们托管在不同的路径上?也就是说,有什么办法可以添加这样的Location块...
<Location /svn/my_special_repo>
SVNPath /srv/source/svn/repos/my_special_repo
AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>
Run Code Online (Sandbox Code Playgroud)
...并让它覆盖Location块中提供的配置
/svn?我尝试使用上述配置执行此操作时,在 Apache 错误日志中遇到了奇怪且无用的错误,例如:
[Wed Feb 02 11:28:35 2011] [error] [client 10.10.209.120]
(20014)Internal error: Can't open file '/srv/source/svn/repos/svn/format':
No such file or directory
Run Code Online (Sandbox Code Playgroud)
所有这些似乎都是 mod_dav_svn 告诉我我不能做我想做的事情的方式。我愿意接受解决方案或替代方案!
编辑:嗯,我可以看到这个问题在读者中引起了很多兴奋。为了记录,我最终可能要做的是为我们所有现有的存储库生成每个存储库的配置,然后放弃SVNParentPath基于配置的配置。per-repo Apache 配置是最小的,尤其是使用类似 …
我在这样的环境中工作:有些人使用 Microsoft Exchange,有些人不使用。Exchange 发出的会议邀请包括带有 iCal 格式会议信息的文本/日历附件。它们还包括一个空的 text/plain 和一个空的 text/html 部分。
有什么方法可以配置 Exchange 以使其在 text/plain 或 text/html 部分(或两者)中填充会议摘要的人类可读版本?这将帮助使用不支持文本/日历附件的邮件客户端的人。
我编写了 active.ksh 脚本(基于expect),以便自动登录到某些 Solaris 机器并执行主机名命令(登录到虚拟 IP 以验证哪个主机名是活动机器 - 我有两个集群 solaris 机器)
问题在于expect; 期望发送密码字符串 (pass123) 并且它错过了密码问题,它仍然等待密码。
所以实际上密码(pass123)是在密码问题之后输入的。在大多数情况下,expect 脚本工作正常,但有时会错过密码。
问题示例
./active.ksh
spawn ssh 10.10.18.61
sh: /usr/local/bin/stty: not found
This computer system, including all related equipment, networks and network devices (specifically including Internet access),is provided only for authorized uss
Password: * my remark - pass123 string was missed the Password Question pass123
Password:
Run Code Online (Sandbox Code Playgroud)
#!/bin/ksh
VIP_ADDRESS=10.10.18.61
expect_for_verify_which_active_machine=`cat << EOF
set timeout -1
spawn ssh $VIP_ADDRESS
expect {
")?" { send "yes\r" …Run Code Online (Sandbox Code Playgroud)