169 lines
5.4 KiB
Bash
169 lines
5.4 KiB
Bash
#!/bin/bash
|
|
|
|
##########################################################################
|
|
# Shellscript : Check Ticket und Launch Daemon
|
|
# Quelle :
|
|
# Autor : Andreas Vogel, macenterprise gmbh
|
|
# Copyright : macenterprise 2019
|
|
##########################################################################
|
|
|
|
# Erstellung XML
|
|
read -d '' launchDaemons <<"EOF"
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>KeepAlive</key>
|
|
<dict>
|
|
<key>Crashed</key>
|
|
<true/>
|
|
<key>SuccessfulExit</key>
|
|
<true/>
|
|
</dict>
|
|
<key>Label</key>
|
|
<string>de.ing.Ticket_check</string>
|
|
<key>LaunchEvents</key>
|
|
<dict>
|
|
<key></key>
|
|
<dict/>
|
|
</dict>
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>/Library/Application\ Support/JAMF/ING/check_ticket.sh</string>
|
|
</array>
|
|
<key>RunAtLoad</key>
|
|
<true/>
|
|
<key>StartInterval</key>
|
|
<integer>10</integer>
|
|
<key>StartOnMount</key>
|
|
<false/>
|
|
</dict>
|
|
</plist>
|
|
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
|
|
|
|
|