robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 1 | #!/bin/sh |
| 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 pronram; if not, write to the Free Software |
| 17 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 18 | # |
| 19 | # FILE: /var/spool/cron/allow |
| 20 | # |
| 21 | # PURPOSE: Test that /var/spool/cron/allow , only allows those in the file to run cron jobs. |
| 22 | # |
| 23 | # HISTORY: |
| 24 | # 04/03 Jerone Young (jyoung5@us.ibm.com) |
| 25 | # |
| 26 | |
| 27 | iam=`whoami` |
| 28 | |
mridge | 8a9c745 | 2004-07-29 21:12:43 +0000 | [diff] [blame] | 29 | tvar=${MACHTYPE%-*} |
| 30 | tvar=${tvar#*-} |
| 31 | |
subrata_modak | 97544a1 | 2009-10-26 15:07:57 +0000 | [diff] [blame^] | 32 | if [ "$tvar" = "redhat" -o "$tvar" = "redhat-linux" ] |
mridge | 8a9c745 | 2004-07-29 21:12:43 +0000 | [diff] [blame] | 33 | then |
| 34 | CRON_ALLOW="/etc/cron.allow" |
| 35 | else |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 36 | CRON_ALLOW="/var/spool/cron/allow" |
mridge | 8a9c745 | 2004-07-29 21:12:43 +0000 | [diff] [blame] | 37 | fi |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 38 | |
| 39 | TEST_USER1="ca_user1" |
| 40 | TEST_USER1_HOME="/home/$TEST_USER1" |
| 41 | TEST_USER2="ca_user2" |
| 42 | TEST_USER2_HOME="/home/$TEST_USER2" |
| 43 | |
| 44 | #----------------------------------------------------------------------- |
| 45 | # FUNCTION: do_setup |
| 46 | #----------------------------------------------------------------------- |
| 47 | |
| 48 | do_setup() { |
| 49 | #move any files that may get in the way |
subrata_modak | 6d56107 | 2009-07-08 17:53:47 +0000 | [diff] [blame] | 50 | rm /tmp/cron_allow_test > /dev/null 2>&1 |
| 51 | rm /tmp/cron_allow_test1 > /dev/null 2>&1 |
| 52 | mv $CRON_ALLOW $CRON_ALLOW.old > /dev/null 2>&1 |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 53 | |
| 54 | #remove users for clean enviroment |
subrata_modak | 261ad29 | 2009-02-23 07:20:05 +0000 | [diff] [blame] | 55 | su $TEST_USER1 -c "crontab -r" |
| 56 | su $TEST_USER2 -c "crontab -r" |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 57 | rm -rf /home/$TEST_USER1 |
| 58 | rm -rf /home/$TEST_USER2 |
| 59 | userdel $TEST_USER1 |
| 60 | userdel $TEST_USER2 |
| 61 | sleep 1 |
| 62 | |
| 63 | #create 1st user |
| 64 | useradd -m -g users $TEST_USER1 |
| 65 | if [ $? != 0 ] |
| 66 | then { |
| 67 | echo "Could not add test user $TEST_USER1 to system." |
| 68 | exit 1 |
| 69 | } |
| 70 | fi |
| 71 | |
| 72 | #create 2nd user |
| 73 | useradd -m -g users $TEST_USER2 |
| 74 | if [ $? != 0 ] |
| 75 | then { |
| 76 | echo "Could not add test user $TEST_USER2 to system." |
| 77 | exit 1 |
| 78 | } |
| 79 | fi |
| 80 | } |
| 81 | |
| 82 | #----------------------------------------------------------------------- |
| 83 | # FUNCTION: do_cleanup |
| 84 | #----------------------------------------------------------------------- |
| 85 | do_cleanup(){ |
subrata_modak | 261ad29 | 2009-02-23 07:20:05 +0000 | [diff] [blame] | 86 | su $TEST_USER1 -c "crontab -r" |
| 87 | su $TEST_USER2 -c "crontab -r" |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 88 | rm -rf /home/$TEST_USER1 |
| 89 | rm -rf /home/$TEST_USER2 |
| 90 | userdel $TEST_USER1 |
| 91 | userdel $TEST_USER2 |
| 92 | rm $CRON_ALLOW |
subrata_modak | 6d56107 | 2009-07-08 17:53:47 +0000 | [diff] [blame] | 93 | mv $CRON_ALLOW.old $CRON_ALLOW > /dev/null 2>&1 |
| 94 | rm /tmp/cron_allow_test >/dev/null 2>&1 |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 95 | } |
| 96 | |
| 97 | #----------------------------------------------------------------------- |
| 98 | # FUNCTION: run_test |
| 99 | #----------------------------------------------------------------------- |
| 100 | run_test() { |
| 101 | |
| 102 | if [ $iam = $TEST_USER1 ] |
| 103 | then |
| 104 | echo "TEST: $CRON_ALLOW should only allow those in the file to |
| 105 | run cron jobs." |
| 106 | |
| 107 | echo "(1) TEST THAT PERSON IN $CRON_ALLOW IS ABLE TO RUN JOB." |
| 108 | |
| 109 | echo "backup crontab...." |
| 110 | crontab -l | grep '^[^#]' > /tmp/crontab-cronallow-save-$iam |
| 111 | |
| 112 | crontab - << EOF |
subrata_modak | eb59974 | 2008-09-05 08:43:26 +0000 | [diff] [blame] | 113 | `date '+%M' | awk '{ORS=""; print ($1+2)%60 " * * * * "}'` echo "TEST JOB RAN" >> /tmp/cron_allow_test 2>&1 |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 114 | EOF |
| 115 | if [ $? != 0 ]; then |
| 116 | echo Error while adding crontab for user $TEST_USER1 |
| 117 | exit 1 |
| 118 | fi |
| 119 | |
| 120 | echo "sleeping for 130 seconds...." |
| 121 | sleep 130 |
| 122 | |
| 123 | EXIT_CODE=1 |
| 124 | test -e /tmp/cron_allow_test && EXIT_CODE=0 |
| 125 | |
| 126 | if [ $EXIT_CODE = 1 ]; then |
| 127 | echo "Cron did not allow user to execute job , TEST FAILED" |
| 128 | else |
subrata_modak | 7e525f6 | 2009-08-23 06:31:45 +0000 | [diff] [blame] | 129 | echo "Cron allowed user to execute test job, TEST PASSED" |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 130 | fi |
| 131 | |
| 132 | echo "restore old crontab..." |
| 133 | crontab /tmp/crontab-cronallow-save-$iam |
| 134 | rm -f /tmp/crontab-cronallow-save-$iam |
| 135 | |
| 136 | |
| 137 | rm -f /tmp/cron_allow_test |
| 138 | |
| 139 | exit $EXIT_CODE |
| 140 | fi |
| 141 | |
| 142 | if [ $iam = $TEST_USER2 ] |
| 143 | then |
| 144 | echo "(2) TEST THAT PERSON NOT IN $CRON_ALLOW IS NOT ABLE TO RUN JOB." |
| 145 | |
| 146 | echo "backup crontab...." |
| 147 | crontab -l | grep '^[^#]' > /tmp/crontab-cronallow-save-$iam |
| 148 | |
| 149 | crontab - << EOF |
subrata_modak | eb59974 | 2008-09-05 08:43:26 +0000 | [diff] [blame] | 150 | `date '+%M' | awk '{ORS=""; print ($1+2)%60 " * * * * "}'` echo "TEST JOB RAN" >> /tmp/cron_allow_test1 2>&1 |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 151 | EOF |
| 152 | if [ $? != 0 ]; then |
| 153 | echo Error while adding crontab for user $TEST_USER2 |
| 154 | fi |
| 155 | |
| 156 | echo "sleeping for 130 seconds...." |
| 157 | sleep 130 |
| 158 | |
| 159 | EXIT_CODE=0 |
| 160 | test -e /tmp/cron_allow_test1 && EXIT_CODE=1 |
| 161 | |
| 162 | if [ $EXIT_CODE = 0 ]; then |
| 163 | echo "Cron did not allow user to execute job , TEST PASSED" |
| 164 | else |
subrata_modak | 7e525f6 | 2009-08-23 06:31:45 +0000 | [diff] [blame] | 165 | echo "Cron allowed user to execute test job, TEST FAILED" |
robbiew | fec8b66 | 2004-04-21 16:51:54 +0000 | [diff] [blame] | 166 | fi |
| 167 | |
| 168 | echo "restore old crontab..." |
| 169 | crontab /tmp/crontab-cronallow-save-$iam |
| 170 | rm -f /tmp/crontab-cronallow-save-$iam |
| 171 | |
| 172 | rm -f /tmp/cron_allow_test1 |
| 173 | |
| 174 | exit $EXIT_CODE |
| 175 | fi |
| 176 | |
| 177 | } |
| 178 | |
| 179 | #----------------------------------------------------------------------- |
| 180 | # FUNCTION: main |
| 181 | #----------------------------------------------------------------------- |
| 182 | if [ $iam = "root" ] |
| 183 | then |
| 184 | do_setup |
| 185 | echo $TEST_USER1 > $CRON_ALLOW |
| 186 | EXIT_CODE=0 |
| 187 | su $TEST_USER1 -c "$0" |
| 188 | if [ $? != 0 ] |
| 189 | then |
| 190 | EXIT_CODE=1 |
| 191 | fi |
| 192 | su $TEST_USER2 -c "$0" |
| 193 | if [ $? != 0 ] |
| 194 | then EXIT_CODE=1 |
| 195 | fi |
| 196 | do_cleanup |
| 197 | exit $EXIT_CODE |
| 198 | else |
| 199 | run_test |
| 200 | fi |