【问题标题】:Allowing unix user 'postgres' access to external .pm files for plperlu允许 unix 用户 'postgres' 访问 plperlu 的外部 .pm 文件
【发布时间】:2013-10-04 04:12:23
【问题描述】:

我正在将 Windows perl/postgresql Web 应用程序移植到 CentOS。

postgresql.conf 我有这些行:

custom_variable_classes = 'plperl'              # list of custom variable class names

plperl.use_strict = on

plperl.on_plperlu_init = 'require "/path/to/my/app/dev/area/MyModule.pm";'

在 Windows 2003 中,这允许我将 use MyModule; 放入 PostgreSQL 中的 plperlu 函数中,只要我转到带有 .pm 文件的路径并更改 ACL 以给用户 postgres“阅读”和“安全”选项卡中的“读取和执行”权限。

在 CentOS 6.4 上,我有点困惑。当我尝试定义一个调用 MyModule 的 plperlu 函数时,它给了我ERROR: Can't locate /path/to/my/app/dev/area/MyModule.pm in @INC

我很困惑,因为 MyModule.pm 归我所有:我拥有 664 个权限。我尝试了 665,但仍然没有运气:sudo -u postgres ls -l /path/to/my/app/dev/area/MyModule.pm 报告Permission denied。据我所知,我理解 unix 权限,665 表示“其他”具有读取和执行权限。

【问题讨论】:

    标签: perl postgresql centos file-permissions plperlu


    【解决方案1】:

    我刚刚写了这篇文章,并意识到我最近才知道答案。

    与我们的 Windows 设置不同,Linux 需要路径上所有目录的权限。于是我开始在路径上做 ls -l ,而且越来越短。一直是 644,直到接近顶部,我有一个 700。我做了 chmod 705(也 chmod 701 工作,之后我切换到那个),宾果游戏,sudo -u postgres ls 可以看到它,所以也可以我的 plperlu 函数定义。

    【讨论】:

    • 实际上,Perl 只需要执行权限,而不是读取权限。对于目录,读取访问权限可让您获得目录列表,执行访问权限可让您按名称访问文件。由于 Perl 正在寻找一个特定的文件名,它不需要获取目录列表。所以chmod 701 也会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    相关资源
    最近更新 更多