runuser& / dev / stdout上的权限被拒绝

时间:2013-05-25 07:31:08

标签: bash permission-denied

我在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,米兰,意大利

2 个答案:

答案 0 :(得分:2)

  

如果命令被触发,为什么用户“stefano”无法写入/ dev / stdout   按root?

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

答案 1 :(得分:0)

在你的if语句中

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

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

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

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

请注意,这仅适用于您是“stefano”用户而非root用户,因为您根据用户名进行验证。