perl - cpan对.local目录的使用可以重定向吗?

标签 perl cpan setuid

我有一个 setuid 程序,然后代表用户以 root 身份调用 cpan。这适用于像 yum 这样的命令,但不适用于 cpan。我的问题是用户的主目录是 NFS 挂载共享,并使用 root-squash 选项,因此 root 无法访问用户的主目录。

Cpan 尝试在用户的主目录中创建一个 .local 目录,但由于 root-squash 而失败。

有没有办法配置 cpan,使其使用另一条路径作为构建包的基础?或者,有没有办法将 root 设置为记录的用户标识,以便 cpan 尝试在那里创建 .local 文件?

示例输出:

./cloudSoftware cpan foobar mkdir/home/auto/ts00086/.local:权限在/usr/share/perl5/CPAN/HandleConfig.pm 第 589 行被拒绝。

最佳答案

cpan_home_dir_candidates 生成目录列表。

  1. 使用列表中包含 CPAN/MyConfig.pm 的第一个目录。
  2. 否则,使用列表中存在的第一个目录。
  3. 否则,使用列表中的第一个目录。

那么这个列表是如何构建的呢?

if ($CPAN::META->has_usable('File::HomeDir')) {
    if ($^O ne 'darwin') {
        push @dirs, File::HomeDir->my_data;
        # my_data is ~/Library/Application Support on darwin,
        # which causes issues in the toolchain.
    }
    push @dirs, File::HomeDir->my_home;
}
# Windows might not have HOME, so check it first
push @dirs, $ENV{HOME} if $ENV{HOME};
...

选项包括:

  • 更改 HOME 环境变量(如果未安装 File::HomeDir)。
  • 编辑 CPAN/HandleConfig.pm 中的 cpan_home_dir_candidates 以添加 push @dirs, "/alt/dir";
  • ...

关于perl - cpan对.local目录的使用可以重定向吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43235998/

相关文章:

python - 未应用于 setuid ed 进程的用户的 Linux 组调度

c - seteuid(0) 之后调用 popen 失败

perl - 构建 dssp 时找不到 Data/Dumper.pm - perl 已安装但找不到?

perl - 有没有更干净的方法可以有条件地将 'last' 排除在这个 Perl 循环之外?

java - 内联::java 和草莓 Perl

perl - Perl 中的核心、供应商和站点位置有什么区别?

linux - 在 Linux 中,可执行文件的位置是否会影响 setuid 位的解释方式?

linux - 对表格文件中的 block 进行排序

regex - perl 匹配并删除行数

windows - Perl Windows CPANM 代理问题