gpt4 book ai didi

apache - Cgit 中的访问控制

转载 作者:行者123 更新时间:2023-12-02 05:56:43 27 4
gpt4 key购买 nike

我想在cgit的cgi启动后引入对cgit的访问控制。这个想法是列出 gitolite 中可用的所有存储库,但根据用户身份验证启用/禁用目录列表。

我设法在 apache 执行 cgit cgi 之前获得访问控制:

 AllowOverride None
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /var/lib/git_alfonso/passwords

Options +ExecCGI
Order allow,deny
Allow from all

Alias /cgit.png /var/www/htdocs/cgit/cgit.png
Alias /cgit.css /var/www/htdocs/cgit/cgit.css
ScriptAlias /cgit "/var/www/htdocs/cgit/cgit.cgi"
RewriteRule ^$ / [R]
RewriteRule ^/(.*)$ /cgit.cgi/$1****

但是我不知道如何在访问存储库路径后获得相同的效果,我尝试使用目录指令并在那里添加身份验证,但是一旦启动 cgit,apache 就不会应用 http 中所述的任何其他指令.conf 文件。

有任何关于如何实现它的线索吗?

提前非常感谢。

Br阿方索。

最佳答案

我已经在我自己的cgit config中做到了这一点。 .

# CGit on @PORT_HTTP_CGIT@
Listen @PORT_HTTP_CGIT@
<VirtualHost @FQN@:@PORT_HTTP_CGIT@>
ServerName @FQN@
ServerAlias @HOSTNAME@
SetEnv GIT_HTTP_BACKEND "@H@/usr/local/apps/git/libexec/git-core/git-http-backend"
DocumentRoot @H@/cgit
Alias /cgit @H@/cgit
<Directory @H@/cgit>
SetEnv GIT_PROJECT_ROOT=@H@/repositories
AddHandler cgi-script .cgi .pl
DirectoryIndex cgit.pl

(@xx@ 是值的模板占位符)

这个想法是用自定义脚本cgit.pl包装cgit.cgi(这里是perl脚本,但您可以使用任何其他脚本)您想要的脚本语言),这将:

  • 调用gitolite
  • 只显示gitolite授权的内容

您可以查看完整的cgit.pl script here .

这是当您尝试访问特定存储库时:

if ($request_uri ne "/cgit/" && $request_uri ne "/cgit/cgit.pl/") {
(my $repo)=($path_info =~ /\/([^\/]+)/);
my $perm = "R";
if ($repo ne "") {
my $aperm = access( $repo, $user, 'R', 'any' );
# my ($aperm, $creator) = &repo_rights($repo);
$perm=$aperm;
}
if ($perm !~ /DENIED/) {
system("@H@/cgit/cgit.cgi");
}
}

这是当您在没有存储库的情况下调用 cgit 时:它应该仅列出您有权查看的存储库。
为此,调用 native cgit.cgi,然后过滤输出,删除与“被拒绝”存储库对应的任何行:

    my $fname="$user.".timestamp().".tpl";
system("@H@/cgit/cgit.cgi > $fname");
open(INFO, $fname); # Open the file
@lines = <INFO>; # Read it into an array
close(INFO);
unlink($fname);
pop(@lines);
foreach (@lines) {
my $line=$_;
(my $repo)=($line =~ /title='([^']+)'/); #'
my $perm = "R";
if ($repo ne "") {
my $aperm = access( $repo, $user, 'R', 'any' );
# my ($aperm, $creator) = &repo_rights($repo);
$perm=$aperm;
}
if ($perm !~ /DENIED/) {
print $line;
}
}

关于apache - Cgit 中的访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17782419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com