【问题标题】:runuser & permission denied on /dev/stdout/dev/stdout 上的运行用户和权限被拒绝
【发布时间】:2013-05-20 18:59:58
【问题描述】:

我在 bash 脚本上有一个问题: - 由“root”在系统启动时或按需执行 - 运行具有“stefano”权限的脚本 - 如果由“root”触发,则在日志文件上重定向输出,如果由“stefano”触发,则在“/dev/stdout”上重定向输出:

 #!/bin/bash
 [ "$1" == "log" ] && log="$2" || log="/dev/stdout"

 if [ "`/usr/bin/whoami`" != "stefano" ]; then
      echo "You are not allowed"
      exit 9
 fi

 runuser -s /bin/bash stefano -c "echo I am Stefano >> $log"

在这种情况下,我得到一个bash: /dev/stdout: Permission denied

如果命令由 root 触发,为什么用户“stefano”不能在 /dev/stdout 上写入?

显然充当stefano> echo "I am Stefano" >> /dev/stdout 不会出错。

提前感谢您的帮助! Stefano,米兰,意大利

【问题讨论】:

    标签: bash permission-denied


    【解决方案1】:

    在你的 if 语句中

    if [ "/usr/bin/whoami" != "stefano" ]; then
    

    您将字符串"/usr/bin/whoami" 与字符串"stefano"(字面意思)进行比较,当然它永远不会相等,所以 if 语句中的表达式始终为真。

    您可以使用command substitution 执行命令"/usr/bin/whoami"(返回当前用户的用户名),如下所示:

    if [ "$(/usr/bin/whoami)" != "stefano" ]; then
    

    请注意,这仅在您是用户“stefano”时有效,而不是作为 root 用户,因为您根据用户名进行验证。

    【讨论】:

    • 是的,你说得对。我犯了错字/转录错误。当我尝试刷新 /dev/stdout 上的输出时,我的错误是“权限被拒绝”,我纠正了它
    【解决方案2】:

    如果命令被触发,为什么用户“stefano”不能在 /dev/stdout 上写入 通过根?

    这可能是因为终端设备是root拥有的,没有其他人的写权限。 请改用/dev/tty

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多