我目前正在使用一个简单的文本文件来pipe理组,以允许读取和写入访问各种资源:
res1-r: alice bob res1-w: zak
该文件与AuthGroupFile
指令一起使用。 随着团体档案的稳步增长,我想build立某种“分组”。 假设alice
和bob
是一个团队的成员,我想授予整个团队的阅读权限。 实际上,我想写一些类似于:
ateam: alice bob res1-r: @ateam
这是可能的 – 直接或通过一些解决方法?
这可能吗? 大概。 这是个好主意吗? 不。
它看起来有点像你试图重新发明轮子。 Apache支持各种身份validation后端,因为它看起来像你的组织已经有Active Directoryforms的LDAP实现,我build议你看看mod_authnz_ldap 。 从长远来看,我敢打赌,实施,维护和保护基于文本文件的系统所花费的时间远远超过与目录服务团队一起工作的时间。
最后,我使用下面的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);