|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 3273 (0xcc9) Types: TextFile Names: »rc.chk«
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen └─⟦3da311d67⟧ »./cops/1.04/cops_104.tar.Z« └─⟦6a2577110⟧ └─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen └─⟦6a2577110⟧ »./cops/1.04/cops_104.tar« └─⟦this⟧ »cops_104/rc.chk«
: # # Usage: rc.chk # # This checks pathnames and files inside the shell script files /etc/rc* # for writability. # # Mechanism: The commands inside the files /etc/rc* are executed when # the machine is booted. This shell script greps for commands/paths that # are of these forms: # # /path/command # or whatever # or # PATH=:/bin:/usr/bin:. # or whatever # or # MYVAR=`/path/command` # or whatever # # It then takes each potential problem-string and uses the program # "is_writable" to determine if it is world writable. All results are # echoed to standard output. # # 12 Apr 90, Mark Plumbly made it ignore lines starting with rm -f # (popular in rc files) and fixed my code so it would ignore everything # after a ">". # SED=/bin/sed CAT=/bin/cat RM=/bin/rm AWK=/bin/awk LS=/bin/ls TEST=/bin/test EGREP=/usr/bin/egrep ECHO=/bin/echo SORT=/usr/bin/sort FIND=/bin/find # temp file for stuff: FOO_RC="./rc.foo.$$" FOO_RC2="./rc.foo2.$$" # CHANGE THIS LINE OR PUT IN FILE NAMES IF/AS NEEDED! # (for example: init_files="/etc/rc /etc/rc.local") # # init_files=`$LS /etc/*rc /etc/rc* /etc/rc*.d/* /etc/shutdown.d/* /etc/inittab | $SORT -u` potential_files="/etc/*rc /etc/rc*" if $TEST -d /etc/shutdown.d ; then potential_files=$potential_files" /etc/shutdown.d" fi if $TEST -f /etc/inittab ; then potential_files=$potential_files" /etc/inittab" fi init_files=`$FIND $potential_files -print | $SORT -u` # # This should get all paths in /etc/rc* files; at least two types here. # First type starts with a "/", the second is either in the form : # # PATH=:/bin:/usr/bin:. # or whatever # or # MYVAR=`/bin/echo "hello"` # or whatever # # Notice also I strip out any references to /tmp, /usr/tmp, # /dev/*ty's, and /dev/null. # # 12 Apr mdp: Modified to remove "> file" as well as ">file" # and remove "rm -f file" (this removes a few bogus ones). # (i.e. things which are written to or removed only are ignored). # # You can try this, or use the old method... # for file in $init_files # do # if $TEST -s $file ; then # ./chk_strings $file # fi # done # exit for file in $init_files do if $TEST -f "$file" ; then $AWK '{ if (substr($1,1,1)== "#") next; \ for (i=1;i<=NF;i++) \ { first=substr($i,1,1); \ if (first==">"||first=="#"||first=="$") \ break; \ else if ($i == "rm") \ break; \ else if (first == "/") \ print "\"'$file'\"", $i;\ } \ }' $file | $SED -e s/\"//g -e s/\'//g -e s/\`//g -e s/\;// | $EGREP -v "/dev/.*ty|/tmp|/usr/tmp|/dev/null" fi done | sort -u >> $FOO_RC2 # # Ok -- $FOO_RC has a format like thus: # /etc/rc.local /bin/foofile # # We want to kill off all dups in the second field: $AWK '{dup[$2] = $1} END { for (i in dup) print dup[i], i;}' $FOO_RC2 | $SORT > $FOO_RC # First, get the ones starting with "/": # # DANGER! DANGER! DANGER Will Robinson! Awk runs out of room ("bails # out") if too many files are here.... # for i in `$CAT $FOO_RC` cat $FOO_RC | while read i do target=`$ECHO $i | $SED 's/.* //'` if $TEST -f "$target" ; then blame=`$ECHO $i | $SED 's/ .*$//'` if ./is_writable $target then $ECHO "Warning! File $target (in $blame) is _World_ writable!" fi fi done $RM -f $FOO_RC $FOO_RC2 # end of script