1 #!/bin/bash 2 # 3 # Copyright (c) International Business Machines Corp., 2003 4 # 5 # This program is free software; you can redistribute it and/or modify 6 # it under the terms of the GNU General Public License as published by 7 # the Free Software Foundation; either version 2 of the License, or 8 # (at your option) any later version. 9 # 10 # This program is distributed in the hope that it will be useful, 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13 # the GNU General Public License for more details. 14 # 15 # You should have received a copy of the GNU General Public License 16 # along with this program; if not, write to the Free Software 17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 # 19 # FILE: /var/spool/cron/allow 20 # 21 # PURPOSE: Test that /var/spool/cron/deny , does not allow those in the file to run cron jobs. 22 # 23 # HISTORY: 24 # 04/03 Jerone Young (jyoung5 (at] us.ibm.com) 25 # 26 27 echo "This script contains bashism that needs to be fixed!" 28 29 iam=`whoami` 30 31 tvar=${MACHTYPE%-*} 32 tvar=${tvar#*-} 33 34 if [ "$tvar" = "redhat" -o "$tvar" = "redhat-linux" ] 35 then 36 CRON_DENY="/etc/cron.deny" 37 CRON_ALLOW="/etc/cron.allow" 38 else 39 CRON_DENY="/var/spool/cron/deny" 40 CRON_ALLOW="/var/spool/cron/allow" 41 fi 42 43 TEST_USER1="cd_user1" 44 TEST_USER1_HOME="/home/$TEST_USER1" 45 TEST_USER2="cd_user2" 46 TEST_USER2_HOME="/home/$TEST_USER2" 47 48 #----------------------------------------------------------------------- 49 # FUNCTION: do_setup 50 #----------------------------------------------------------------------- 51 52 do_setup() { 53 #move any files that may get in the way 54 rm /tmp/cron_deny_test > /dev/null 2>&1 55 rm /tmp/cron_deny_test1 > /dev/null 2>&1 56 57 mv $CRON_DENY $CRON_DENY.old > /dev/null 2>&1 58 mv $CRON_ALLOW $CRON_ALLOW.old > /dev/null 2>&1 59 60 #remove users for clean enviroment 61 su $TEST_USER1 -c "crontab -r" 62 su $TEST_USER2 -c "crontab -r" 63 rm -rf /home/$TEST_USER1 64 rm -rf /home/$TEST_USER2 65 userdel $TEST_USER1 66 userdel $TEST_USER2 67 sleep 1 68 69 #create 1st user 70 useradd -m -g users $TEST_USER1 71 if [ $? != 0 ] 72 then { 73 echo "Could not add test user $TEST_USER1 to system." 74 exit 1 75 } 76 fi 77 78 #create 2nd user 79 useradd -m -g users $TEST_USER2 80 if [ $? != 0 ] 81 then { 82 echo "Could not add test user $TEST_USER2 to system." 83 exit 1 84 } 85 fi 86 } 87 88 #----------------------------------------------------------------------- 89 # FUNCTION: do_cleanup 90 #----------------------------------------------------------------------- 91 do_cleanup(){ 92 su $TEST_USER1 -c "crontab -r" 93 su $TEST_USER2 -c "crontab -r" 94 rm -rf /home/$TEST_USER1 95 rm -rf /home/$TEST_USER2 96 userdel $TEST_USER1 97 userdel $TEST_USER2 98 rm $CRON_DENY 99 mv $CRON_DENY.old $CRON_DENY > /dev/null 2>&1 100 mv $CRON_ALLOW.old $CRON_ALLOW > /dev/null 2>&1 101 rm /tmp/cron_allow_test >/dev/null 2>&1 102 } 103 104 #----------------------------------------------------------------------- 105 # FUNCTION: run_test 106 #----------------------------------------------------------------------- 107 run_test() { 108 109 if [ $iam = $TEST_USER1 ] 110 then 111 echo "TEST: $CRON_DENY should allow only allow those who are not in the file to 112 run cron jobs." 113 114 echo "(1) TEST THAT PERSON NOT IN $CRON_DENY IS ABLE TO RUN JOB." 115 116 crontab - << EOF 117 `date '+%M' | awk '{ORS=""; print ($1+2)%60" * * * * "}'` echo "TEST JOB RAN" >> /tmp/cron_deny_test 2>&1 118 EOF 119 if [ $? != 0 ]; then 120 echo Error while adding crontab for user $TEST_USER1 121 exit 1 122 fi 123 124 echo "sleeping for 130 seconds...." 125 sleep 130 126 127 EXIT_CODE=1 128 test -e /tmp/cron_deny_test && EXIT_CODE=0 129 130 if [ $EXIT_CODE = 1 ]; then 131 echo "Cron did not allow user to execute job , TEST FAILED" 132 else 133 echo "Cron allowed user to execute test job, TEST PASSED" 134 fi 135 136 rm -f /tmp/cron_deny_test 137 138 exit $EXIT_CODE 139 fi 140 141 if [ $iam = $TEST_USER2 ] 142 then 143 echo "(2) TEST THAT PERSON IN $CRON_DENY IS NOT ABLE TO RUN JOB." 144 145 crontab - << EOF 146 `date '+%M' | awk '{ORS=""; print ($1+2)%60 " * * * * "}'` echo "TEST JOB RAN" >> /tmp/cron_deny_test 2>&1 147 EOF 148 if [ $? != 0 ]; then 149 echo Error while adding crontab for user $TEST_USER2 150 fi 151 152 echo "sleeping for 130 seconds...." 153 sleep 130 154 155 EXIT_CODE=0 156 test -e /tmp/cron_deny_test1 && EXIT_CODE=1 157 158 if [ $EXIT_CODE = 0 ]; then 159 echo "Cron did not allow user to execute job , TEST PASSED" 160 else 161 echo "Cron allowed user to execute test job, TEST FAILED" 162 fi 163 164 rm -f /tmp/cron_deny_test1 165 166 exit $EXIT_CODE 167 fi 168 169 } 170 171 #----------------------------------------------------------------------- 172 # FUNCTION: main 173 #----------------------------------------------------------------------- 174 if [ $iam = "root" ] 175 then 176 do_setup 177 echo $TEST_USER2 > $CRON_DENY 178 EXIT_CODE=0 179 su $TEST_USER1 -c "$0" 180 if [ $? != 0 ] 181 then 182 EXIT_CODE=1 183 fi 184 su $TEST_USER2 -c "$0" 185 if [ $? != 0 ] 186 then EXIT_CODE=1 187 fi 188 do_cleanup 189 exit $EXIT_CODE 190 else 191 run_test 192 fi 193