#!/bin/bash ########################################################################## # Shellscript : Check Ticket und Launch Daemon # Quelle : # Autor : Andreas Vogel, macenterprise gmbh # Copyright : macenterprise 2019 ########################################################################## # Erstellung XML read -d '' launchDaemons <<"EOF" KeepAlive Crashed SuccessfulExit Label de.ing.Ticket_check LaunchEvents ProgramArguments /Library/Application\ Support/JAMF/ING/check_ticket.sh RunAtLoad StartInterval 10 StartOnMount EOF # XML schreiben sudo echo "$launchDaemons" > /Library/LaunchDaemons/de.ing.check_ticket.plist # Rechte setzen sudo chmod 644 /Library/LaunchDaemons/de.ing.check_ticket.plist sudo chown root:wheel /Library/LaunchDaemons/de.ing.check_ticket.plist # Erstellung startup script read -d '' startupscript<<"EOF" #!/bin/bash ########################################################################## # Shellscript : Prüft, ob das Ticket das eigene ist. # Autor : Andreas Vogel, macenterprise gmbh, 13.11.2019 ########################################################################## ########################### Description ################################## # Script dient dazu, dass der User sich nicht über das Nomad eine Kerberos Ticket anfragt. # Das Script wird über einen Daemon gestartet. # Das Script wird zunächst prüfen, ob das AD erreichbar ist. # Ist das AD erreichbar wird geprüft, ob eine Ticket bereits vorhanden ist. Ist kein Ticket # Im TicketViewer hinterlegt, so wird der User nach seinem Passwort gefragt. Der User-Name wird # über das System ausgelesen. Nach der Eingabe der Passwortes, wird eine Kerberos Ticket angefragt # und im TicketViewer hinterlegt. Der User hat nur die Möglichkeit sein eigenes Ticket an zu fragen. # Als nächstes Prüft das Script, ob das hinterlegte Ticket auf dem User, gemäß des Benutzernames # auch gehört. Gehört das Ticket nicht dem Benutzer, so wird dieses sofort gelöscht und der User # wird darüber informiert. Nach der Information, wird eine Event über Jamf ausgelöst. # Dabei wird der Befehl " sudo jamf -event TicketCheck ausgeführt. # Mit der Ausführung der Policy wird damit eine Log zu dem Gerät erstellt. # Damit wird die Möglichkeit eines Reporten geschaffen. Somit kann zum Zwecke eines Report # in Jamf eingesehen werden, wie oft diese Policy ausgeführt worden ist. Über den Log, kann # eingesehen werden, als welcher Benutzer der User versucht hatte sich ein Ticket zu beziehen. # Die Prüfung, ob das Ticket dem User auch gehört ist daher notwendig, da der User auch eine Ticket über # das Termin oder auch über den TocketViwer anfragen kann. ADBound=$(dsconfigad -show | awk '/Active Directory Domain/{print $NF}') user=$(stat -f '%u %Su' /dev/console | cut -d ' ' -f 2) TicketIs=$(klist --list-all | grep DIBA.CORP.INT | cut -d ' ' -f 2) Domain=@DIBA.CORP.INT name=$user$Domain AD_ING="diba.corp.int" AD_STAT=$(dsconfigad -show | awk '/Active Directory Domain/{print $NF}') ping -c1 $AD_ING 1>/dev/null 2>/dev/null SUCCESS=$? if [[ "$AD_STAT" = "$AD_ING" && $SUCCESS -eq 0 ]] then echo "AD da. Prüfung des Tickets" if [[ ! -z "$TicketIs" ]] then if [[ $name == $TicketIs ]] then echo "Ticket entspricht dem User." exit 0 else echo "Ticket ist falsch" osascript -e 'display dialog "Das angeforderte Ticket scheint nicht dir zu gehören. Bitte fordere dein eigenes Ticket an." buttons "OK" default button 1' sudo jamf policy -event TicketReport kdestroy -p $TicketIs fi else # Sleep daher, da nach einem Systemstart, noch nicht alles verbunden ist, soll gewartet werden. sleep 10 echo "AD ist da aber kein Ticket. Ticket wird angefordert." user=$(stat -f '%u %Su' /dev/console | cut -d ' ' -f 2) PASS=$(osascript -e 'text returned of (display dialog "Bitte das Passwort eingeben" default answer "" with hidden answer)') || exit FILE=$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 8) PFILE=/Users/$user/.$FILE touch $PFILE echo "$PASS" >> $PFILE if kinit --password-file="$PFILE" $user@DIBA.CORP.INT then osascript -e 'display dialog "Das Ticket wurde erfolgreich angefragt." buttons "OK" default button 1' rm $PFILE exit 0 else osascript -e 'display dialog "Fehler! Das Ticket konnte nicht angelegt werden. Überprüfe bitte das Passwort." buttons "OK" default button 1' rm $PFILE exit 1 fi exit 0 fi else echo "Ticket ist nicht erforderlich. Dein AD" exit 0 fi EOF # script schreiben echo "$startupscript" > /Library/Application\ Support/JAMF/ING/check_ticket.sh # Rechte setzen /bin/chmod a+x /Library/Application\ Support/JAMF/ING/check_ticket.sh # LaunchAgent laden launchctl unload /Library/LaunchDaemons/de.ing.check_ticket.plist launchctl load /Library/LaunchDaemons/de.ing.check_ticket.plist exit 0