我目前正在使用简单文本文件中管理的组来允许对各种资源进行读写访问:
res1-r: alice bob
res1-w: zak
此文件与指令一起使用AuthGroupFile
。随着组文件稳步增长,我想建立某种“子组”。假设alice
和bob
是团队的成员,我想授予整个团队读取权限。实际上,我想写类似以下内容的内容:
ateam: alice bob
res1-r: @ateam
这可能吗 - 直接或通过某种解决方法?
答案1
这可能吗?可能吧。这是个好主意吗?不。
看起来你正在尝试重新发明轮子。Apache 支持各种各样的身份验证后端,而且由于你的组织似乎已经以 Active Directory 的形式实现了 LDAP,因此我建议你看一下修改 LDAP 服务器。从长远来看,我愿意赌上实施、维护和安全的基于文本文件的系统所花的时间将远远超过与目录服务团队合作所花的时间。
答案2
最后我使用下面的perl脚本来完成这项工作:
#!/usr/bin/perl
use strict;
use warnings;
if ($#ARGV != 0) {
die "Usage: agc <target file>\n";
}
our %groups;
my $dstfilename = "$ARGV[0]";
my $srcfilename = "$ARGV[0].src";
open (SRCFILE, $srcfilename) or die "Could not open $srcfilename.\n";
while (<SRCFILE>) {
chomp;
if ($_ =~ /^(.*)\s*:\s*(.*)$/) {
$groups{$1} = $2;
}
}
close (SRCFILE);
open (DSTFILE, ">$dstfilename") or die "Could not open $dstfilename.\n";
print DSTFILE "# CAUTION: This file was generated from $srcfilename.\n";
print DSTFILE "# DO NOT EDIT MANUALLY - all changes will be lost upon re-generation.\n";
print DSTFILE "# Instead, edit $srcfilename and run 'agc $dstfilename'.\n";
foreach my $key (sort (keys (%groups))) {
print DSTFILE "$key:";
my @elems = split(/\s/, $groups{$key});
foreach my $elem (@elems) {
if ($elem =~ /^@(.*)/) {
print DSTFILE " " . $groups{$1};
} else {
print DSTFILE " $elem";
}
}
print DSTFILE "\n";
}
close (DSTFILE);