我有一台安装了Microsoft R Open的服务器。我是否可以限制使用System()
命令,以使用户无法从R内调用Shell命令?
如果这不可能,是由于Microsoft R Open所特有的原因,还是我所要求的任何R实施都根本不可能实现?
答案 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
之类的非特权命令,我可能会采用基于安全性/用户的方法,然后选择
更新:
为了说明简单地屏蔽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")