普通用户sudo echo权限依旧写入不了文件

sudo和tee 2009-03-09 21:07:38   http://blog.chinaunix.net/uid-20749137-id-718785.html

分类: LINUX

$sudo echo ‘1′ > ip_forward
bash: ip_forward: Permission denied

而以root身份就可以?

# echo ‘1′ > ip_forward

一开始没有看出原因来,后来仔细一琢磨,其实原因很简单,shell对‘>’解释干扰了对这个命令含义的判断。我们本想应该是这样的意思:让sudo执行后面的这些“echo ‘1′ > ip_forward”,而实际上是:sudo echo ‘1′,执行到这里,shell再把它的执行结果重定向到ip_forward里去!当然是无权限,因为流本身不会随echo那样被sudo“感染”上suid权限!

解决方法是什么?也很简单,就让后面那一串东西搁一起执行:

$sudo sh -c ‘echo 1 > ip_forward’

等等,还有没有更好的解决方法?有!刘洋同学认真思考了一下,觉得应该有这么个东西XX: echo ‘1′ | sudo XX ip_forward。我擦亮眼睛一看,我靠,这不就是tee(1)么!!没错,另一种解决方法就是:

$echo ‘1′ | sudo tee ip_forward

或者:

$echo ‘1′ | sudo tee ip_forward | cat > /dev/null

刘洋问tee(1)是不是和tea有关系?不是!tee其实取自大写字母T的发音,而T不正是最后一个命令中流的流向么?!多么形象的名字啊!

#!/bin/bash
#for i in {77..77}
#do
        ip=10.162.148.77
        awk -v awk_ip="$ip" '{if($1==awk_ip) print $2}' ip > /tmp/ip.tmp
        for line in `cat /tmp/ip.tmp`
        do
                #ssh unicomlabs@$ip "echo unicomlabs | sudo -S cp /var/spool/cron/root /var/spool/cron/root.bak"
                #c=$(ssh unicomlabs@$ip "echo unicomlabs | sudo -S echo \"59 23 * * * find /home/unicomlabs/${line}_bak5/done/datafiles -type f -mtime +15 -exec rm {} \;
                #ssh -t unicomlabs@$ip 'su - root -c "cp /var/spool/cron/root /var/spool/cron/root.bak"'
                #ssh -t unicomlabs@$ip 'su - root -c "rm -f /var/spool/cron/root"'
 sshpass -p unicomlabs_2017 ssh unicomlabs@$ip 'echo unicomlabs_2017|sudo -S sh -c "echo \"59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/done/datafiles -type f -mtime +15 -exec rm {} \;
59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/done/bads -type f -mtime +15 -exec rm {} \;
59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/done/logs -type f -mtime +15 -exec rm {} \;
59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/log -type f -mtime +30 -exec rm {} \;
59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/log_ast -type f -mtime +30 -exec rm {} \;
10 0 1 * * echo unicomlabs_2017|sudo -S ls -rt /data/unicomlabs/'${line}'/run/*.out | tail -1 | xargs -i cp /dev/null {}
10 0 1 * * echo unicomlabs_2017|sudo -S ls -rt /data/unicomlabs/'${line}'_ast/run/*.out | tail -1 | xargs -i cp /dev/null {}
10 0 * * 1 echo unicomlabs_2017|sudo -S find /data/'${line}'_bak -name "*.error" | xargs rm -f {}\" >>/var/spool/cron/root"'
                echo $ip '|' $line:
                #echo $c
                echo "================================================================="
        done
#done

普通用户echo权限不够问题

322人阅读 评论(0) 收藏 举报  http://blog.csdn.net/xiaoxiaonvwu/article/details/70739354
分类:

问题:

普通用户echo写入文件,提示权限不够。

脚本内容为:

echo "$pjname,$versioncode">>$nginxroot/$pjname/version.txt

增加 sudo后依然提示权限不够


解决方法:

sudo tee version.txt <<< "要插入内容" 
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值