我在使用以下 Puppet 清单时遇到问题,该清单旨在启用passwdqcRHEL-6 系统上的pam 模块(使用 Puppet 0.25.5 和 augeas 0.7.2):
augeas { 'authconfig':
context => '/files/etc/sysconfig/authconfig',
changes => [
'set USEPASSWDQC yes',
'set USECRACKLIB no',
],
notify => Exec['authconfig-all'],
}
exec { 'authconfig-all':
command => '/usr/sbin/authconfig --updateall',
refreshonly => true,
}
Run Code Online (Sandbox Code Playgroud)
如果我运行此清单,它似乎成功完成:
info: Applying configuration version '1311189237'
notice: //Augeas[authconfig]/returns: executed successfully
info: //Augeas[authconfig]: Scheduling refresh of Exec[authconfig-all]
notice: //Exec[authconfig-all]: Triggering 'refresh' from 1 dependencies
Run Code Online (Sandbox Code Playgroud)
但如果我检查目标文件,更改尚未应用:
# egrep 'PASSWDQC|CRACKLIB' /etc/sysconfig/authconfig
USECRACKLIB=yes
USEPASSWDQC=no
Run Code Online (Sandbox Code Playgroud)
如果我notify => ...从清单中删除该行,它会完全按预期工作。也就是说,鉴于此:
augeas { …Run Code Online (Sandbox Code Playgroud) 我需要知道我的服务器是否安装了 TPM。它离我 10000 英里,所以去那里查看 BIOS 不是一种选择。无论如何,戴尔网站或维基百科上也没有对其进行描述。因此,请仅在您知道如何通过远程桌面确定我的服务器上是否安装了 TPM时才回答。谢谢
我需要自动配置一个云实例(运行 Fedora 17),以下初始事实为真:
cloud)sudo.手动配置就像登录和运行sudo su -并拥有它一样简单,但我想完全自动化这个过程。诀窍是系统默认为requiretty启用该选项sudo,这意味着尝试执行以下操作:
ssh remotehost sudo yum -y install puppet
Run Code Online (Sandbox Code Playgroud)
将失败:
sudo: sorry, you must have a tty to run sudo
Run Code Online (Sandbox Code Playgroud)
我现在正在解决这个问题,首先推送一个将在伪终端上运行命令的小型 Python 脚本:
import os
import sys
import errno
import subprocess
pid, master_fd = os.forkpty()
if pid == 0:
# child process: now that we're attached to a
# pty, run the given command.
os.execvp(sys.argv[1], sys.argv[1:])
else:
while True:
try:
data …Run Code Online (Sandbox Code Playgroud) 我想通过 Dovecot 中的一组公共只读邮箱提供对某些邮件列表的访问。我的 dovecot (dovecot-2.0.9) 配置中有一个公共命名空间定义,如下所示:
namespace {
type = public
separator = .
prefix = news.
location = maildir:/var/spool/news
subscriptions = no
}
Run Code Online (Sandbox Code Playgroud)
我想将此命名空间中的所有邮箱设为只读。我有 ACL 插件的以下配置:
plugin {
acl = vfile:/etc/dovecot/acls:cache_secs=300
}
Run Code Online (Sandbox Code Playgroud)
仔细阅读文档后,我似乎有一个/var/spool/news/.foo.bar可以将以下内容放入
的邮件文件夹
/var/spool/news/.foo.bar/dovecot-acl:
anyone rl
Run Code Online (Sandbox Code Playgroud)
但这没有任何影响。我也尝试创建一个/usr/local/etc/dovecot/acls/news.foo.bar具有相同内容的文件
,但这也没有任何作用。我打开了邮件调试:
mail_debug = yes
Run Code Online (Sandbox Code Playgroud)
但日志不会产生任何与 ACL 处理相关的内容。我很想知道是否有人让它正常工作,如果是这样,您是否可以提供一些配置示例。
此外,如果有任何不涉及每个邮箱配置的方法(例如,将 ACL 应用于news.*或其他内容的能力),那就太棒了。获取默认 ACL 工作的记录行为将是朝着正确方向迈出的一步。
我在一个大学环境中工作,该环境过去几乎只为已经在中央用户数据库中拥有“正式”帐户的大学附属机构提供服务。我们越来越多地向不适合这种传统模型的外部合作者(托管的 Subversion/git 存储库、Wiki 访问等)提供服务。
我正在寻找一种工具,可以让我们管理“轻量级”帐户,其中“轻量级”的意思是:
默认情况下,拥有帐户不会授予对任何内容的访问权限(授权将通过组成员身份或特定服务 ACL 获得)。这是流行的 Web 服务的一个非常典型的模型,但我没有太多运气找到一个开箱即用的工具(而且我们真的没有时间或资源自己编写一个)。
有许多工具可以提供自助式密码更改和元数据编辑,但我还没有找到一种可以处理注册部分的工具。我希望 FreeIPA 能够处理这个问题,但据我所知它没有。
您是否知道可以启用此模型的任何工具?我对商业解决方案持开放态度,如果您对类似的事情有很好的经验。
FreeBSD 下的 ZFS 允许将文件系统分配给监狱,这样监狱中具有适当权限的帐户可以访问文件系统,创建新的从属文件系统,等等。至少在 8-STABLE 中,这些功能没有集成到现有/etc/rc.d/jail脚本中。基本流程类似于:
sysctl -w security.jail.enforce_statfs=0
sysctl -w security.jail.mount_allowed=1
zfs set jailed=on <filesystem>
zfs jail <jid> <filesystem>
Run Code Online (Sandbox Code Playgroud)
并且还需要暴露zfs监狱内的设备节点。
与此同时,似乎有大量工具(ezjail、jailer、warden 和一般/usr/ports/sysutils/*jail*)声称更容易/更好/更强大/等等,但其中大多数似乎只是轻微维护而不是与标准监狱脚本相比,这确实是一场胜利。
我想避免重新发明轮子。是否有与 ZFS 集成良好的监狱管理工具?我正在寻找一些可以在启动 jail 时设置必要的 devfs 规则、sysctl 设置和 zfs 属性的东西……并且理想情况下允许对 jails 进行基于名称的引用,尽管许多第三方都支持这种引用 -可悲的是,库存监狱脚本中缺少派对工具。
我们有一个本地 LDAP 目录,提供有关我们用户社区的基本联系信息。我们希望将其集成到一些第三方托管服务中,这些服务允许我们实现运行任意 Javascript 的小部件。
为了将 Javascript 连接到我们的 LDAP 目录,我想设置一个简单的 LDAP-to-HTTP 代理,该代理将接受 HTTP GET 请求,将它们转换为适当的 LDAP 查询,并以 JSON 编码数据的目录信息作为响应。
在理想的世界中,是这样的:
GET /ldap?mail=bob@example.com
Run Code Online (Sandbox Code Playgroud)
会给我这样的东西:
{
"cn": "Bob Person",
"title": "System Administrator",
"sn": "Person",
"mail": "bob@example.com",
"telepehoneNumber": "617-555-1212",
"givenName": "Bob"
}
Run Code Online (Sandbox Code Playgroud)
(这显然假设 Web 应用程序在本地配置了有关要使用的基本 DN、如何进行身份验证等的信息)。
我想我可以写一个……但肯定已经存在这样的东西了吗?
我在一个学术环境中工作,我们提供各种 ssh 可访问的计算资源。我们还提供git存储库托管,我们需要 ssh 来对存储库进行读/写访问。
我们针对 OS X 和 Linux 用户的说明相对简单,最重要的是,与 OS X 和大多数现代 Linux 发行版保持一致,OpenSSH都是开箱即用的,更重要的ssh-agent是,预配置为在任何桌面运行时运行会话处于活动状态。我们通常鼓励人们为他们的密钥分配密码,因此没有身份验证代理的生活很快就会变得烦人。
目前,我们为 Windows 用户提供的解决方案总体上更加分散且更加复杂。过去人们一直在使用PuTTY,但这需要额外的步骤来生成与 OpenSSH 兼容的密钥。这也使得使用git命令行工具变得更加困难——尽管不是,我意识到,不可能——使用命令行工具,当与 ssh 可访问的存储库交互时,它最适合与 OpenSSH 一起使用。
我们只想让人们安装msysgit,但我们正在寻找一种集成ssh-agent到 Windows 桌面环境的好方法。最常见的解决方案是通过 中的条目启动代理.bashrc,但这充其量看起来很笨拙,这意味着我们必须指导大部分非技术用户完成.bashrc在 Windows 下编辑他们的过程。
另一个复杂之处是它WinSCP通常用作文件传输工具——当然这不会与ssh-agent. 它将pagent与 PuTTY 人员交谈,但pagent不说话,ssh-agent因此无法从命令行工作。
其他人做了什么来为不同平台上的用户提供一致的环境?您是否刚刚举手并决定为 Windows 用户维护一组单独的文档?
更新
我发现有两个程序充当 OpenSSH 和 pagent 之间的垫片。你有任何的经验夏利或SSH-PAGENT?
我有一个 Puppet 类,它设置了许多服务和配置文件。在大多数情况下,可以使用默认服务器,但也可以为每个服务配置显式服务器。我发现自己一直在这样做:
class myclass (
$default_server = 'server.example.com',
$server_for_thing1 = undef,
$server_for_thing2 = undef,
$server_for_thing3 = undef
) {
if $server_for_thing1 {
$real_server_for_thing1 = $server_for_thing1
} else {
$real_server_for_thing1 = $default_server
}
# ...and so forth...
}
Run Code Online (Sandbox Code Playgroud)
随着可能的服务数量越来越大,这种语法变得笨拙。有没有更好的方法来做到这一点?我真的想要一些类似的东西:
$server_for_thing1 = $server_for_thing1 || $default_server
Run Code Online (Sandbox Code Playgroud)
...但不能在 Puppet 中重新分配变量。有没有更好的方法来做到这一点?
在设置我们的 OpenStack 环境时,我遇到了一个问题,即阻止实例联系在主机上运行的服务器。元数据服务(暴露 HTTP API)在主机的 8775 端口上运行,OpenStack 网络代码添加以下 DNAT 规则以通过端口 80 上的特殊地址授予访问权限:
-A PREROUTING -d 169.254.169.254/32
-p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8775
Run Code Online (Sandbox Code Playgroud)
实例通过本地桥接设备连接到主机,并169.254.169.254分配给lo.
虽然此规则成功匹配来自尝试访问的来宾实例的数据包http://169.254.168.254/,但它们永远不会到达侦听服务。
用基本上等效的 REDIRECT 替换此 DNAT 规则可使一切正常工作:
-A PREROUTING -d 169.254.169.254/32
-p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8775
Run Code Online (Sandbox Code Playgroud)
我试图理解为什么 REDIRECT 起作用而 DNAT 失败。从 iptables 文档中不清楚该DNAT规则是否适用于本地目标流量。我希望这里有人可以提供权威的答案,最好有文档支持,或者可以建议我的配置中可能有什么问题阻止了 DNAT 规则按预期工作。