【问题标题】:Perl6: run command as a different userPerl6:以不同用户身份运行命令
【发布时间】:2019-05-19 16:34:43
【问题描述】:

Perl6 如何以不同的用户身份运行命令?

上下文zef module manager 以普通用户身份安装,有些命令需要以 root 身份运行。

临时解决方案:以下功能允许以不同用户身份运行 shell 命令:

unit module Repo::Utils::RunAsUser; 
sub RunAsUser( Str $user, Str $command, --> Proc ) is export {
  return shell "su -c \'$command\' $user";
}

问题:

  • 是否有其他语法可以从 Perl6 脚本以 root 身份运行命令?
  • 用户能否以 root 身份运行某些 IO::Path 方法和子例程(如 unlink 或 mkdir)?

谢谢!

【问题讨论】:

  • 我认为没有。要么使用 shell,要么使用对 Posix 函数的 Native 调用,它们的作用几乎相同。不过,我不知道这样的事情是否已经发表。我刚刚发现了这个:modules.perl6.org/dist/IO::Path::Mode:cpan:JSTOWE 这可能对这种事情有用。
  • 让我们假设有像run-as-root 这样的函数——现在任何人都可以发布一个模块,以在安装该模块的任何人的系统上以root 身份执行任何操作。这忽略了run-as-root 也需要一种方法来处理的事实,例如窗户。
  • @ugexe:你是对的!同时,假设模块 A 需要以 root 身份运行,而模块 A 使用模块 B、C 和 D。要运行模块 A,zef 必须以 root 身份安装,所有其他模块将以 root 身份运行。拥有以 root 身份运行的功能(如示例)可确保只有某些代码以 root 身份运行。
  • @ugexe:AppleScript 有一个方便的 with administratorprivilege 子句,可以标记到 shell 命令上:do shell script 'rm important-file.foo' with administrator privileges,类似于 shell 'rm important-file.foo' :elevated(将nix *root 和 Windows Administrator 通用)。在 AS 中,每次运行脚本都会触发管理员密码提示,错误的密码会导致脚本失败。在 P6 中复制(对于内置或模块)可能不是一个糟糕的模型,并且至少需要用户对模块进行干预。
  • 理想情况下不会有脱壳期。特别是对于删除/修改目录。而且由于大多数其他使用 shell 的东西也有替代方案(例如 Prove vs TAP.pm6),我看不出它如何以稳健的方式工作。

标签: io root raku


【解决方案1】:

也许不是 100% Perl6 解决方案,但您可以使用用 Perl6 编写的 Sparrow6 在用户下运行命令。

例子:

https://github.com/melezhik/Sparrow6/blob/master/documentation/dsl.md#zef-modules

https://github.com/melezhik/Sparrow6/blob/master/documentation/dsl.md#bash-commands

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 2019-02-24
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2017-06-11
    相关资源
    最近更新 更多