代码之家  ›  专栏  ›  技术社区  ›  jl6

我可以在r中禁用system()命令吗?

  •  1
  • jl6  · 技术社区  · 8 年前

    我有一个安装了Microsoft R Open的服务器。我可以限制使用 System() 命令,以便用户无法从r内部调用shell命令?

    如果这是不可能的,那是因为特定于Microsoft R Open的原因,还是我要求的任何R实现根本不可能?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Hack-R    7 年前

    从安全的角度来看,我认为最好的做法是让一个用户帐户只有您想要的特权(即不是管理员,没有不适当的读/写等),然后以该用户的身份运行r。

    在评论中巧妙地建议屏蔽功能将是一个修补程序,但对于阻止任何知识渊博的人利用这一功能几乎没有作用。奥思也许你可以两者结合。

    下面是一个“黑客”如何击败功能屏蔽的小例子:

    system <- function(x) {print("I am masked!")}
    system()
    [1] "I am masked!"
    rm(system); print("Take off the mask!")
    [1] "Take off the mask!"
    system() # not masked now
    Error in system() : argument "command" is missing, with no default
    

    评论中有人问过一些非特权命令,比如 ls .如果您还想禁用诸如 负载感应 我可能会采用基于安全性/用户的方法,然后

    1. 限制对r数据/代码的指定沙盒的文件夹访问(类似于对kaggle的访问)和/或
    2. 询问 http://serverfault.com (姐妹栈交换站点)如何限制非特权命令(更新-我已经问了这个问题,它正在等待回复)

    更新:

    为了说明如何简单地掩盖 rm 也不是解决方案:

    system <- function(x) {print("I am masked!")}
    system("cmd.exe")
    rm(system); print("Take off the mask!")
    system("cmd.exe")
    rm <- function(x){print("Now I masked rm")}
    remove(rm)
    rm(system)
    system("cmd.exe")