[Eisfair] In Zusammenhang mit Locky Frage an die Sambaexperten

Thomas Bork tom at eisfair.org
Di Feb 23 21:36:50 CET 2016


Am 23.02.2016 um 08:55 schrieb Olaf Jaehrling:

> ist sowas [1] hier mit samba möglich?

Basteln kann man viel. Allerdings wird das nur ein Wettlauf mit 
unbestimmtem Ausgang.

> Zusammenfassung: Wenn Dateien mit bestimmten Endungen auf den Filserver geladen werden, dann blockt der diese und/oder hält den Dienst an und/oder fährt den gesamten Fileserver herunter um ein komplettes löschen der Freigaben zu verhindern.

root preexec (S)

This is the same as the preexec parameter except that the command is run 
as root. This is useful for mounting filesystems (such as CDROMs) when a 
connection is opened.

Default: root preexec =


preexec (S)

This option specifies a command to be run whenever the service is 
connected to. It takes the usual substitutions.

An interesting example is to send the users a welcome message every time 
they log in. Maybe a message of the day? Here is an example:

preexec = csh -c 'echo \"Welcome to %S!\" | 
/usr/local/samba/bin/smbclient -M %m -I %I' &

Of course, this could get annoying after a while :-)

See also preexec close and postexec.

Default: preexec =

Example: preexec = echo \"%u connected to %S from %m (%I)\" >> /tmp/log


Sieh Dir an, was in unserem Samba-Paket definiert wird, wenn SAMBA_DEBUG 
groesser 2 gesetzt ist:

[...]
if [ $SAMBA_DEBUGLEVEL -gt 0 ]
then
     debuglevel="$SAMBA_DEBUGLEVEL"

     if [ $debuglevel -gt 2 ]
     then
         smbinfo='yes'
     else
         smbinfo='no'
     fi
else
     debuglevel='0'
     smbinfo='no'
fi
[...]
do_smbinfo ()
{
   if [ "$smbinfo" = "yes" ]
   then
 
x='T=%T|d=%d|v=%v|h=%h|L=%L|N=%N|p=%p|R=%R|S=%S|P=%P|U=%U|G=%G|u=%u|g=%g|H=%H|I=%I|M=%M|m=%m|a=%a'
       echo " root preexec = /var/install/bin/samba-smbinfo \"$x\" &"
   fi
}
[...]
    {
     echo "[public]"
     echo " comment = public directory on $HOSTNAME"
     echo " path = $path"
     echo " force create mode = 0777"
     echo " force directory mode= 0777"
     echo " browseable = yes"
     echo " writeable = yes"
     do_smbinfo
[...]

Das Skript /var/install/bin/samba-smbinfo:

#! /bin/sh
#----------------------------------------------------------------------------
# /var/install/bin/samba-smbinfo - send info with samba vars to machine
#
# Copyright (c) 2002-2015 Thomas Bork, tom(at)eisfair(dot)net
#
# Creation   : 2002-07-28 tb
# Last Update: 2015-06-20 tb
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#----------------------------------------------------------------------------
outputfile=`/bin/mktemp -t samba-smbinfo-XXXXXXXXXX`
if [ $? -ne 0 ]
then
     outputfile="/tmp/samba-smbinfo-$$"
fi

msgcommand ()
{
   cat "$outputfile" | awk '{print 
gensub("<tab>","\t","g",gensub("<newline>","\n","g"))}' | 
/usr/bin/smbclient -U "eisfair Samba Server" -N -M "$machine" -I "$ip" 
1>/dev/null
   rm -f "$outputfile"
}

 >"$outputfile"

oldifs="$IFS"
IFS='|'
set -- $1
while [ -n "$1" ]
do
     if [ -n "`echo "$1" | grep '='`" ]
     then
         index=`echo "$1" | cut -d'=' -f1`
         value=`echo "$1" | cut -d'=' -f2`
         case $index in
         T ) message="Datum/Zeit<tab><tab><tab><tab>(%$index)<tab>= 
   $value";;
         d ) message="PID des Servers<tab><tab><tab><tab>(%$index)<tab>= 
       $value";;
         v ) message="Samba-Version<tab><tab><tab><tab>(%$index)<tab>= 
      $value";;
         h ) message="(Internet)Hostname des 
Servers<tab><tab>(%$index)<tab>=       $value";;
         L ) message="NETBIOS-Name des 
Servers<tab><tab><tab>(%$index)<tab>=       $value";;
         N ) message="NIS 
Heimat-Verzeichnis<tab><tab><tab>(%$index)<tab>=       $value";;
         p ) message="Pfad des 
NIS-Heimatverzeichnisses<tab><tab>(%$index)<tab>=       $value";;
         R ) message="Ausgehandeltes 
Protokoll-Level<tab><tab>(%$index)<tab>=       $value";;
         S ) message="Name der aktuellen 
Freigabe<tab><tab><tab>(%$index)<tab>=       $value";;
         P ) message="Hauptverzeichnis der aktuellen 
Freigabe<tab>(%$index)<tab>=       $value";;
         U ) message="Vom Client angeforderter 
Benutzername<tab>(%$index)<tab>=       $value";;
         G ) message="Primaere Gruppe des angeforderten 
Benutzers<tab>(%$index)<tab>=       $value";;
         u ) message="Name des effektiven 
Benutzers<tab><tab>(%$index)<tab>=       $value";;
         g ) message="Primaerer Gruppenname des effektiven 
Benutzers<tab>(%$index)<tab>=       $value";;
         H ) message="Heimatverzeichnis des effektiven 
Benutzers<tab>(%$index)<tab>=       $value";;
         I ) message="IP Adresse des 
Client-Rechners<tab><tab>(%$index)<tab>=       $value"
             ip="$value"
             ;;
         M ) message="(Internet)Hostname des 
Client-Rechners<tab>(%$index)<tab>=       $value";;
         m ) message="NETBIOS-Name des 
Client-Rechners<tab><tab>(%$index)<tab>=       $value"
             machine="$value"
             ;;
         a ) message="Betriebssystem des 
Client-Rechners<tab><tab>(%$index)<tab>=       $value";;
         esac

         echo "$message" >>"$outputfile"
     fi
     shift
done

IFS="$oldifs"
msgcommand


Das heisst, Du kannst beliebige Dinge skripten und ausführen lassen: auf 
Namen filtern, Mails senden, die Freigabe deaktivieren (smbcontrol smbd 
close-share share-Name) usw.

Viel Spass beim Basteln...

-- 
der tom
[eisfair-team]


Mehr Informationen über die Mailingliste Eisfair