我们正在实施一项需要访问位于不同服务器上的三个磁盘。我已经安装了磁盘(2 个在 Windows 文件服务器上,cifs;1 个在另一台 Linux 服务器上,nfs)并且脚本现在运行正常。
我的经理对“永久挂载”不太满意,认为这是一种安全风险:如果服务器上的任何脚本被破解,挂载的磁盘就会被访问。他建议每个脚本需要磁盘,坐骑脚本开头的磁盘,以及卸载将它们放在脚本的末尾。
我不太喜欢这个想法,但我无法说服他。我尝试过以下论据:
- mount 和 umount 是有代价的 - 每次执行它们都会使脚本运行得更慢。(唉,我无法确定确切的代价)
- 如果两个脚本同时运行,一个脚本完成并卸载,而另一个脚本仍然需要磁盘,该怎么办?(当然,信号量或互斥锁可以解决这个问题)
- 如果有人入侵了服务器,他就可以访问挂载磁盘的脚本,从而自己也可以挂载它们。(他声称这是“额外的防御层”)。
有人能告诉我每次都要警惕这个挂载/卸载是否正确,或者我是否错了,这确实是可行的方法吗 - 更具体地说:为什么?
答案1
抱歉,但你是不是正确的。
- mount 和 umount 的开销不是很大。磁盘的挂载/卸载频率是多少?
- 使用锁定文件并让 mount/umount 每次只运行一次。
- 如果是我的服务器,您就无法知道我在那里做什么,也无法知道我的脚本。所以最好卸载磁盘。
问候
答案2
自动挂载网络共享意味着将凭证存储在某个mount
可以读取它们的文件中(credentials=filename
在 cifs 文件系统的情况下通过挂载选项) - 这不一定是个问题,但可能是一个安全隐患,甚至不仅仅是漏洞让某人可以访问脚本。将凭证存储在这样的文件中比直接将它们保存在脚本中更安全,因为这样当用户使用或ps
类似命令搜索任务列表时,它们就不会出现在命令行中,但确保只有脚本可以读取文件至关重要。在这种情况下,您对破坏服务器的用户的担心也没有什么不同 - 如果他们破坏了服务器,而服务器仍在运行,他们无论如何都可能访问共享。
挂载和卸载共享的成本不应该很高 - 最多只需几秒钟(如果有的话),除非您通过非常慢的高延迟连接与共享通信,并且从安全角度来看可能是更可取的,因为您没有在不需要时保持共享挂载(可能以某种方式使其他有访问权限的用户可读),并且另一端将能够在您的脚本进行身份验证和断开连接时进行记录(因此,如果在另一端检测到问题,则更容易跟踪在问题发生时可能有访问权限的内容)。
尽管脚本执行重叠,仍可以保持共享挂载,方法是将一个具有随机名称(或不太可能被另一个脚本调用重复)的文件放在某个位置(比如说 下的目录/var/run
),并在脚本的实际作业结束后删除该文件 - 然后在最后检查运行 之前该目录中没有其他文件umount
。另一种方法是通过为每个脚本提供自己的挂载点来允许对同一个共享进行多次挂载 - 这样每个脚本都有自己的共享并且不会干扰其他脚本,并且您还可以为每个脚本提供自己的身份验证凭据,这样您就可以选择在另一端以更细粒度的方式管理权限(例如,某些脚本需要读写访问权限,而有些只需要只读)。