运行ruby脚本时错误的"不安全的世界可写dir foo在PATH中"

Nat*_*han 1 ruby linux warnings

当我运行ruby脚本时,它给了我这个:

[nathanb@nathanb-box ~] myscript .
/u/nathanb/bin/myscript:173: warning: Insecure world writable dir /usr/software/test/bin in PATH, mode 043777
/u/nathanb/bin/myscript:74: warning: Insecure world writable dir /usr/software/test/bin in PATH, mode 043777
/u/nathanb/bin/myscript:79: warning: Insecure world writable dir /usr/software/test/bin in PATH, mode 043777
Run Code Online (Sandbox Code Playgroud)

此消息是错误的,因为/ usr/software以只读方式挂载:

software:/vol/software/  on  /usr/software             type  nfs         (ro,noatime,intr,rsize=32768,wsize=32768,timeo=600,nolock,addr=10.60.132.45,nfsvers=3,proto=tcp,mountproto=udp)
Run Code Online (Sandbox Code Playgroud)

我可以验证这个:

nathanb@nathanb-box /usr/software/test/bin] touch foo
touch: cannot touch `foo': Read-only file system
Run Code Online (Sandbox Code Playgroud)

我相信我的挂载点具有正确的权限:

[nathanb@nathanb-box /usr] ls -ld /usr/software
drwxr-xr-x 27 root root 4096 2010-09-10 17:12 /usr/software
Run Code Online (Sandbox Code Playgroud)

所以有两个问题:

  • 这可以合法地被认为是Ruby中的错误吗?
  • 我怎么关闭它?有没有办法只禁用此特定警告?

Con*_*Kay 6

我们在工作中遇到了这种情况,尽管修复权限会很好,但这在我们的环境中是不可能的.相反,我为ruby创建了以下包装器脚本来抑制错误.

#!/bin/bash
(ruby.orig "$@" 3>&1 1>&2 2>&3 | grep -v 'Insecure world writable dir'; exit ${PIPESTATUS[0]}) 3>&1 1>&2 2>&3
Run Code Online (Sandbox Code Playgroud)

只需将ruby可执行文件重命名为ruby.orig,然后将此脚本放入ruby bin目录中即可.

有关其工作原理,请参阅此优秀说明.


此问题的另一个修复(避免了包装脚本)是CPPFLAGS="-D ENABLE_PATH_CHECK=0"在运行时使用set 编译Ruby ./configure.


Jim*_*ris 2

你可以关闭所有警告

> ruby -W0 ...
Run Code Online (Sandbox Code Playgroud)

但这可能隐藏其他问题。而且您确实说过您只想隐藏特定的警告,而且我认为除了解决问题之外没有其他方法可以做到这一点,我认为这是由于 NFS 安装没有正确中继实际掩码。当我使用 NFS 在 Linux 上安装非 Linux 服务器时,我看到了这一点。

比如snao服务器或者不支持unix风格属性的东西。

另外,由于错误报告它不喜欢路径中的世界可写目录,您可以将其从路径中删除,并使用前缀来访问该目录中的任何内容吗?

编辑...另一个想法是用类似的东西过滤 ruby​​ 脚本的输出...

> ruby ... | egrep -v "warning: Insecure world writable dir"
Run Code Online (Sandbox Code Playgroud)

这将打印除特定警告之外的任何输出(-v)。

然而,该警告是一个安全警告,在您的路径中拥有一个世界可写目录是一个坏主意,因为任何人都可以在其中放置恶意脚本或可执行文件。同样糟糕的是安装了一个 bin 目录,尤其是你在 PATH 中无法控制的目录。在这种情况下,问题与目录是否可写无关,而是您的 PATH 中有一个外部目录。

好的做法是,将挂载的目录从 PATH 中删除,警告就会消失。如果您需要执行该目录中的某些内容,请显式提供脚本或可执行文件的完整路径。

这实际上并不是 Ruby 问题,而是安全问题。

  • 我认为仅仅说“好的做法会要求您将该安装的目录从您的 PATH 中取出,并且警告将会消失”是不公平的。我正在维护一个基于 Ruby 的工具,数百名开发人员都在使用该工具。成为他们的路径目录权限的策略执行者,这不是我的工作,也不是 ruby​​ 的工作。正如您所说,-W0 掩盖了其他更紧迫的问题,这些问题与草率的权限行为无关。对于这个不需要的消息应该有一个更有针对性的解决方案。 (9认同)