3

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

 #!/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,米兰,意大利

4

2 回答 2

4

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

这可能是因为终端设备归root所有,没有其他人的写权限。试试/dev/tty吧。

于 2013-10-31T10:25:35.310 回答
0

在你的 if 语句中

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

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

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

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

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

于 2013-05-25T08:28:47.757 回答