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

shell脚本中最容易确保其不以根目录运行的是什么?

  •  10
  • Jherico  · 技术社区  · 15 年前

    我有一个从([BA] SH)shell脚本执行的Java应用程序,不幸的是,有时负责部署它并启动它的人在启动应用程序之前没有切换到合适的用户。在这种情况下,我希望应用程序至少不要运行,理想情况下发出一个警告,不要这样做。我想尝试别名Java或改变根的路径,包括一个假Java,这样做,但这可能有不良的副作用,并不会很有效,因为shell脚本指定完整的路径Java二进制。

    那么,shell脚本中是否有“如果我是根用户就不运行”的标准成语?

    3 回复  |  直到 14 年前
        1
  •  13
  •   cristis    15 年前

    bash中的示例:

    if [ `id -u` = 0 ]; then
      echo "You are root, go away!"
      exit 1
    fi
    
        2
  •  1
  •   Melody Horn    15 年前

    在bash中,可以获取 whoami 把它和 root .

        3
  •  1
  •   hillu    14 年前

    我在脚本的开头使用类似这样的东西 在服务帐户下运行:

    LUSER='my-service'
    if [ `id -un` != $LUSER ]; then
        exec su  $LUSER -s $SHELL -c "$0 $@"
    fi
    
    # actual script commands here.
    

    如果以正确的用户身份运行,执行将按计划继续。如果运行 作为根用户,权限被删除到所需的用户ID。其他用户 会得到一个密码提示,告诉他们 错了。

    su -s $SHELL ... 用于重写中设置的shell /etc/passwrd --可能设置为 /bin/false 服务帐户。

    我在Debian系统上使用过这个,使用 bash dash . 感到自由 评论是否可以改进可移植性。