问题:backuppc 的 Web 界面缺少必要的菜单项。缺少“编辑主机”、“编辑配置”等项。
backuppc
安装在 Ubuntu 14.04.4 LTS 上。我甚至完全删除了该backuppc
应用程序(使用dpkg --purge backupppc
),然后重新安装它(apt-get install backuppc)。菜单项仍然缺失。
当在 CLI 中直接运行 /usr/lib/backuppc/cgi-bin/index.cgi 时,我确实得到了缺失的菜单项。index.cgi 的 HTML 输出包括:
<a href="?action=editConfig">Edit Config</a>
<a href="?action=editConfig&newMenu=hosts">Edit Hosts</a>
我尝试以 root、backuppc 和 www-data 的身份在命令行上运行 de index.cgi,所有输出都相同。(我必须为 www-data 启用登录 shell)
backuppc
但是,从浏览器的控制台访问管理员时缺少此功能。
文件 /etc/backuppc/config.pl 包含:
$Conf{CgiAdminUserGroup} = 'backuppc';
$Conf{CgiAdminUsers} = 'backuppc';
当我改为$Conf{CgiAdminUsers}
而'*'
不是 时'backuppc'
,它可以工作,但我不想向所有用户授予管理员访问权限,因此这只能作为临时解决方法。
通过安装 backuppc 包,apache 的配置是默认的:
<Directory /usr/share/backuppc/cgi-bin/>
AllowOverride None
Allow from all
Options ExecCGI FollowSymlinks
AddHandler cgi-script .cgi
DirectoryIndex index.cgi
AuthUserFile /etc/backuppc/htpasswd
AuthType basic
AuthName "BackupPC admin"
require valid-user
</Directory>
以上内容位于/etc/backuppc/apache.conf
其中,符号链接自/etc/apache2/conf.d/backuppc.conf
。
为了分析问题,我添加了以下脚本/usr/lib/backuppc/cgi-bin/debug.cgi
:
#!/usr/bin/perl
printf("My userid is $> (%s)\n", (getpwuid($>))[0]);
error.log
身份验证后,在 apache 中写入的输出为:
My userid is 33 (www-data)
因此,用户 ID 被错误地传递给了 BackupPc。传递的用户 ID 正是www-data
我预期传递给 BackupPc 的经过身份验证的用户 ID,因为backuppc
后者是我用来登录的。所以,这可能是 apache 配置问题。
我添加了第二个 cgi 脚本printenv.cgi
,用于输出环境变量。该脚本包含:
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}
输出内容如下:
REMOTE_USER="$REDIRECT_REMOTE_USER="
其中,backuppc 要求此环境变量REMOTE_USER
包含经过身份验证的用户(backuppc
在我的示例中)。结果发现,不正确的设置REMOTE_USER
是导致问题的原因。
诊断脚本被放置在 中,/usr/lib/backuppc/cgi-bin/
并从 进行符号链接/usr/share/backuppc/cgi-bin/
。它们的所有权为backupc:www-data
,并被授予 chmoda+x
和u+s
权限。
答案1
根据 的输出,我在下面的配置脚本中REMOTE_USER="$REDIRECT_REMOTE_USER="
执行了 grep 操作。我发现一个文件包含以下内容:REMOTE_USER
/etc/apache2/conf-enabled
.conf
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
该.conf
脚本与 backuppc 无关。在 REMOTE_USER 行前面加上#
,然后重新启动服务
# apachtectl restart
# service backuppc restart
解决了这个问题。