我在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,米兰,意大利
答案 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用户,因为您根据用户名进行验证。