我可以在R中禁用System()命令吗?

时间:2018-07-10 13:13:18

标签: r security

我有一台安装了Microsoft R Open的服务器。我是否可以限制使用System()命令,以使用户无法从R内调用Shell命令?

如果这不可能,是由于Microsoft R Open所特有的原因,还是我所要求的任何R实施都根本不可能实现?

1 个答案:

答案 0 :(得分:5)

从安全角度来看,我认为最佳实践是创建仅具有所需特权(即没有管理员,没有不适当的读/写等)权限的用户帐户,然后以该用户身份运行R。

注释中掩盖该功能的巧妙建议将是一个修补程序,但并不能阻止任何知识渊博的人利用该功能。 OTOH也许您可以将两者结合起来。

这是一个“黑客”如何击败功能屏蔽的简单例子:

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之类的非特权命令。如果您还想禁用诸如ls之类的非特权命令,我可能会采用基于安全性/用户的方法,然后选择

  1. 限制文件夹访问R数据/代码(类似于在Kaggle上所做的操作)和/或
  2. http://serverfault.com(Stack Exchange的姊妹站点)上询问如何也限制非特权命令(更新-我已经继续询问这个问题,正在等待答复)

更新:

为了说明简单地屏蔽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")