更安全的crontab,通过alias别名禁止crontab -r

说明:
之前有写过一篇文章,别名alias禁止crontab -r清空定时任务。但这有个问题,按照这个做完后,crontab只对crontab -r,-l,-e有反应。如果我想使用crontab -u 用户查看用户的定时任务,crontab直接没反应。
因为更新了这个加强版的safecron.sh。

脚本:

#!/bin/sh  
# remove -r function from crontab
# carl 20150513 1st
#PATH

if [[ "$*" =~ "-r" ]] ; then
        echo "My God! Dangerous..."  
        echo "Exit..."  
        exit 2
else
        /usr/bin/crontab $*
        exit 0
fi

 
解释:
通过$*判断crontab参数里是否包含-r参数,如果有就退出。
没有,就执行crontab所有参数

附录:
附录1.Shell传入参数的处理$*,$@和$#的说明
有脚本test.sh 传入3个参数 1 2 3
运行test.sh 1 2 3后
$*为”1 2 3″(一起被引号包住)
$@为”1″ “2” “3”(分别被包住)
$#为3(参数数量)

附录2. 自动化脚本,只需保存以下内容为safecron.sh,然后sh safecron.sh执行后,退出重新登陆即可!

#!/bin/bash
# Program:
#      frobidden crontab -r 
# History:
# 2015/05/13    guo   First release
#PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
#export PATH

cat << EOF > /usr/bin/cron.sh 
#!/bin/sh  
# remove -r function from crontab
# carl 20150513 1st
#PATH

if [[ "\$*" =~ "-r" ]] ; then
        echo "My God! Dangerous..."  
        echo "Exit..."  
        exit 2
else
        /usr/bin/crontab \$*
        exit 0
fi
EOF

chmod +x /usr/bin/cron.sh

echo "alias crontab='/usr/bin/cron.sh'" >> /etc/bashrc

发表评论

邮箱地址不会被公开。 必填项已用*标注