|
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 s
Length: 4240 (0x1090) Types: TextFile Names: »suid.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/perl/suid.chk«
#!/bin/sh -- need to mention perl here to avoid recursion 'true' || eval 'exec perl -S $0 $argv:q'; eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' & eval 'exec /usr/local/bin/perl -S $0 $argv:q' if 0; # # Usage: suid.chk [-n] [-s secure_dir] [search_starting_directory] # # Shell script intended to be run periodically by cron in order # to spot changes in files with the suid or sgid bits set. # # suid.chk 840919 Prentiss Riddle # # This changes into the $SECURE directory first, then # uses find(1) to search the directories in $SEARCH for all # files with the 4000 or 2000 permission bits set. $STOP is a file # containing "ls -gildsa" output for known setuid or setgid programs. # Any additions or changes to this list represent potential security # problems, so they are reported. # # Modified 8/15/89, Dan Farmer: # Just changed the program/doc names and some of the temp # files to make it fit in with the rest of the programs.... # Modified 12/26/90, df # Now flags SUID shell scripts and world writeable SUID files, too. # # Rewritten in perl, 1/17/91, df # Major hacks by tchrist 5/14/91 # require "hostname.pl"; require "is_able.pl"; require "file_owner.pl"; require "pathconf.pl"; require "chk_strings.pl"; require "pass.cache.pl"; package suid_chk; # name space protection $debug=0; # # Getopts stuff $usage = "Usage: $0 [-n] [-s secure_dir] [starting_directory]\n"; require 'getopts.pl'; # Process the command args; Either specify verbose or an alternate config file: die $usage unless &'Getopts('ns:'); $suid_dir = $'SECURE || '.'; if (defined($'opt_s)) { $suid_dir = $'opt_s; } # Do NFS stuff? Yes unless opt: if (defined($'opt_n)) { $skip_nfs = 1; } else { $skip_nfs = 0; } $STOP="$suid_dir/suid.stop" unless defined $STOP; $FINDARGS="" unless defined $FINDARGS; $LSARGS=" -glids" unless defined $LSARGS; $TEMPOLD="$suid_dir/fsold$$"; $TEMPCUR="$suid_dir/fscur$$"; $TEMPNEW="$suid_dir/fsnew$$"; $TEMPGON="$suid_dir/fsgon$$"; $TEMPM="$suid_dir/fsm$$"; if (@ARGV > 1) { die $usage; } elsif (@ARGV == 1) { $start_dir = shift; } # these may be terribly rash assumptions.... $start_dir="/" unless defined $start_dir; $find_can_ls = 1 unless defined $find_can_ls; $NONFS = '-type d \( -fstype nfs -prune \) -o' if $skip_nfs; $find_ls = $find_can_ls ? '-ls' : "-exec $'LS $LSARGS {} \\;"; die "Error -- Security directory $suid_dir doesn't exist\n" unless -d $suid_dir; unless (-d $suid_dir) { mkdir($suid_dir, 0700) || die "can't mkdir $suid_dir: $!"; } chdir $suid_dir || die "can't chdir $suid_dir: $!\n"; # find the setuid programs and sort &run("$'FIND $start_dir $FINDARGS $NONFS -type f \\( -perm -4000 -o -perm -2000 \\) $find_ls | $'SORT > $TEMPCUR"); # compare with the sorted stop list # create stop file if needed if (! -f $STOP) { open(S,">$STOP"); close(S); } &run("$'SORT <$STOP >$TEMPOLD"); &run("$'COMM -13 $TEMPOLD $TEMPCUR | $'SORT +8 >$TEMPNEW"); &run("$'COMM -23 $TEMPOLD $TEMPCUR | $'SORT +8 >$TEMPGON"); local($is_able'silent) = 1; local($chk_strings'recurse) = 0 unless defined $chk_strings'recurse; # report changes if (-s $TEMPNEW || -s $TEMPGON) { if (-s $TEMPNEW) { open TEMPNEW || die "Can't open $TEMPNEW: $!\n"; while (<TEMPNEW>) { ($file) = /(\S+)$/; # don't want SUID files to be world writable! # although *reasonable* systems clear the bit on write print "Warning! SUID file $file is _World_ writable!\n" if &'is_able ($file, "w", "w"); if (-r $file && -f _ && -T $file) { print "Warning! ", &'Owner($file) ? '' : 'ROOT-owned ', "SUID file $file is a non-binary, executable file!\n"; } &'chk_strings($file) if -r _; } close TEMPNEW; } if (-s $TEMPNEW) { open TEMPNEW || die "Can't reopen $TEMPNEW: $!\n"; print "\nThese files are newly setuid/setgid:\n\n"; print while <TEMPNEW>; } if (-s $TEMPGON) { open TEMPGON || die "Can't reopen $TEMPGON: $!\n"; print "\nThese files are no longer setuid/setgid:\n\n"; print while <TEMPGON>; } } unlink $TEMPOLD, $TEMPCUR, $TEMPNEW, $TEMPGON; sub run { print "running: $_[0]\n" if $debug; system $_[0]; warn "command $_[0] returned $?" if $?; } # end it all.... 1;