普通用户sudo echo权限依旧写入不了文件
分类: 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写入文件,提示权限不够。
脚本内容为:
echo "$pjname,$versioncode">>$nginxroot/$pjname/version.txt
增加 sudo后依然提示权限不够
解决方法:
sudo tee version.txt <<< "要插入内容"更多推荐
所有评论(0)