Beherrschung von macOS: Rationalisierung der Erstellung von Admin-Benutzer mit effizientem Scripting

Die wichtigsten Erkenntnisse

  • Automatisiert die Erstellung von Admin-Benutzern: Vereinfacht und standardisiert den Prozess des Hinzufügens neuer Admin-Benutzer unter Mac OS.
  • Erhöhte Effizienz und Sicherheit: Verringert manuelle Fehler und gewährleistet konsistente Sicherheitspraktiken bei der Benutzererstellung.
  • Robustes Parsing von Argumenten: Verarbeitet Benutzereingaben effektiv, einschließlich fehlender Argumente und Hilfeanfragen.
  • Eindeutige Zuweisung einer Benutzer-ID: Erzeugt auf intelligente Weise eindeutige IDs, die für die Mac OS-Benutzerverwaltung entscheidend sind.
  • Umfassende Benutzereinrichtung: Richtet die erforderlichen Benutzerattribute wie Shell, Heimatverzeichnis und Gruppenmitgliedschaften ein.
  • Fehlerbehandlung und Root-Rechte: Enthält Fehlerprüfungen und erfordert Root-Zugriff, was die Sicherheit und Zuverlässigkeit erhöht.
  • Skalierbar für MSPs und IT-Experten: Es ist ideal für die Verwaltung mehrerer Systeme und spart Zeit und Aufwand bei umfangreichen Implementierungen.
  • Im Vergleich zu manuellen Methoden: Bietet eine skalierbare und fehlersichere Alternative zu manuellen Methoden der Benutzererstellung.
  • Sicherheitserwägungen: Es ist wichtig, das Skript selbst zu sichern, da es über umfangreiche Verwaltungsfunktionen verfügt.
  • Integration mit Verwaltungstools: Kann effektiv in IT-Management-Plattformen wie NinjaOne integriert werden, um die Kontrolle und Überwachung zu verbessern.

Das Anlegen von Benutzerkonten ist eine grundlegende Aufgabe der Systemadministration, die einen sicheren und organisierten Zugang zu Ressourcen und Diensten gewährleistet. Unter Mac OS ist dieser Prozess aufgrund der besonderen Architektur des Betriebssystems und der Sicherheitsprotokolle besonders anspruchsvoll. Die Automatisierung dieses Prozesses vereinfacht nicht nur die Verwaltungsaufgaben, sondern erhöht auch die Sicherheit und Effizienz des IT-Betriebs.

Hintergrund

In der Welt der IT, insbesondere für Managed Service Provider (MSPs ) und IT-Experten, sind Effizienz und Sicherheit von größter Bedeutung. Das Skript, um das es hier geht, ist ein speziell für Mac OS entwickeltes Bash-Skript, das die Erstellung eines neuen Administrator-Benutzers automatisieren soll. Dieses Tool ist von entscheidender Bedeutung, da es die Benutzererstellung standardisiert, menschliche Fehler reduziert und das System absichert, indem es sicherstellt, dass alle erforderlichen Schritte und Berechtigungen korrekt implementiert sind.

Das Skript:

#!/usr/bin/env bash
#
# Description: Create a new admin user for Mac.
# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
# Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).

# Usage: [-u|--user <arg>] [-p|--pass <arg>] [-h|--help]
# -u, --user: User Name for new user account. (no default)
# -p, --pass: Password for new user account. (no default)
# -h, --help: Prints help

# # When called, the process ends.
# Args:
# 	$1: The exit message (print to stderr)
# 	$2: The exit code (default is 1)
# if env var _PRINT_HELP is set to 'yes', the usage is print to stderr (prior to $1)
# Example:
# 	test -f "$_arg_infile" || _PRINT_HELP=yes die "Can't continue, have to supply file as an argument, got '$_arg_infile'" 4
die() {
    local _ret="${2:-1}"
    test "${_PRINT_HELP:-no}" = yes && print_help >&2
    echo "$1" >&2
    exit "${_ret}"
}

# Function that evaluates whether a value passed to it begins by a character
# that is a short option of an argument the script knows about.
# This is required in order to support getopts-like short options grouping.
begins_with_short_option() {
    local first_option all_short_options='uph'
    first_option="${1:0:1}"
    test "$all_short_options" = "${all_short_options/$first_option/}" && return 1 || return 0
}

getHiddenUserUid() {
    local __UniqueIDs
    __UniqueIDs=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ugr)

    local __NewUID
    for __NewUID in $__UniqueIDs; do
        if [[ $__NewUID -lt 499 ]]; then
            break
        fi
    done

    echo $((__NewUID + 1))
}

_arg_user=
_arg_pass=

# Function that prints general usage of the script.
# This is useful if users asks for it, or if there is an argument parsing error (unexpected / spurious arguments)
# and it makes sense to remind the user how the script is supposed to be called.
print_help() {
    printf '%s\n' "Create a new admin user."
    printf 'Usage: %s [-u|--user <arg>] [-p|--pass <arg>] [-h|--help]\n' "$0"
    printf '\t%s\n' "-u, --user: User Name for new user account. (no default)"
    printf '\t%s\n' "-p, --pass: Password for new user account. (no default)"
    printf '\t%s\n' "-h, --help: Prints help"
}

# The parsing of the command-line
parse_commandline() {
    while test $# -gt 0; do
        _key="$1"
        case "$_key" in
        # We support whitespace as a delimiter between option argument and its value.
        # Therefore, we expect the --user or -u value.
        # so we watch for --user and -u.
        # Since we know that we got the long or short option,
        # we just reach out for the next argument to get the value.
        -u | --user)
            test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1
            _arg_user="$2"
            shift
            ;;
        # We support the = as a delimiter between option argument and its value.
        # Therefore, we expect --user=value, so we watch for --user=*
        # For whatever we get, we strip '--user=' using the ${var##--user=} notation
        # to get the argument value
        --user=*)
            _arg_user="${_key##--user=}"
            ;;
        # We support getopts-style short arguments grouping,
        # so as -u accepts value, we allow it to be appended to it, so we watch for -u*
        # and we strip the leading -u from the argument string using the ${var##-u} notation.
        -u*)
            _arg_user="${_key##-u}"
            ;;
        # See the comment of option '--user' to see what's going on here - principle is the same.
        -p | --pass)
            test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1
            _arg_pass="$2"
            shift
            ;;
        # See the comment of option '--user=' to see what's going on here - principle is the same.
        --pass=*)
            _arg_pass="${_key##--pass=}"
            ;;
        # See the comment of option '-u' to see what's going on here - principle is the same.
        -p*)
            _arg_pass="${_key##-p}"
            ;;
        # The help argument doesn't accept a value,
        # we expect the --help or -h, so we watch for them.
        -h | --help)
            print_help
            exit 0
            ;;
        # We support getopts-style short arguments clustering,
        # so as -h doesn't accept value, other short options may be appended to it, so we watch for -h*.
        # After stripping the leading -h from the argument, we have to make sure
        # that the first character that follows corresponds to a short option.
        -h*)
            print_help
            exit 0
            ;;
        *)
            _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1
            ;;
        esac
        shift
    done
}

parse_commandline "$@"

if [[ -n "${username}" ]]; then
    _arg_user=$username
fi
if [[ -n "${password}" ]]; then
    _arg_pass=$password
fi

if [[ -z "${_arg_user}" ]]; then
    die "FATAL ERROR: User Name is required. '$_arg_user'" 1
fi

if [[ -z "${_arg_pass}" ]]; then
    die "FATAL ERROR: Password is required. '$_arg_pass'" 1
fi

UniqueID=$(getHiddenUserUid)
if [ "$(id -u)" -eq 0 ]; then
    if dscl . -create /Users/"$_arg_user"; then
        dscl . -create /Users/"$_arg_user" UserShell /bin/bash
        dscl . -create /Users/"$_arg_user" RealName "$_arg_user"
        dscl . -create /Users/"$_arg_user" UniqueID "$UniqueID"
        dscl . -create /Users/"$_arg_user" PrimaryGroupID 20
        dscl . -create /Users/"$_arg_user" NFSHomeDirectory /Users/"$_arg_user"
        dscl . -passwd /Users/"$_arg_user" "$_arg_pass"
        dscl . -append /Groups/admin GroupMembership "$_arg_user"
        dscl . -append /Groups/_lpadmin GroupMembership "$_arg_user"
        dscl . -append /Groups/_appserveradm GroupMembership "$_arg_user"
        dscl . -append /Groups/_appserverusr GroupMembership "$_arg_user"
        createhomedir -c 2>&1 | grep -v "shell-init"
    else
        echo "ERROR: Failed to create user. Already exists?"
        exit 1
    fi
else
    echo "Only root may add a user to the system."
    exit 2
fi

 

Zugriff auf über 300 Skripte im NinjaOne Dojo

Zugang erhalten

Detaillierte Aufschlüsselung

Das Skript arbeitet in mehreren unterschiedlichen Phasen:

  • Parsing von Argumenten: Es beginnt mit dem Parsen der während des Aufrufs übergebenen Argumente. Diese Argumente umfassen den Benutzernamen und das Passwort für das neue Konto, die für die Kontoerstellung entscheidend sind. Das Skript geht elegant mit fehlenden Argumenten, Fehlern oder Hilfeanfragen um und leitet den Benutzer entsprechend an.
  • Erstellen einer Benutzer-ID: Für den neuen Benutzer wird eine eindeutige Benutzer-ID erstellt. Mac OS verlangt, dass jeder Benutzer eine eindeutige Kennung hat, und dieses Skript identifiziert eine unbenutzte Kennung, indem es die vorhandenen Kennungen analysiert.
  • Erstellung eines Kontos: Sobald der Benutzername, das Passwort und die eindeutige ID festgelegt sind, fährt das Skript mit der Erstellung des Benutzers fort. Es weist eine Shell (/bin/bash) zu, setzt einen echten Namen, eine Benutzer-ID und eine primäre Gruppen-ID und legt ein Home-Verzeichnis fest. Wichtig ist, dass er den Benutzer zu mehreren Verwaltungsgruppen hinzufügt und ihm die erforderlichen Berechtigungen erteilt.
  • Initialisierung des Heimatverzeichnisses: Das Skript initialisiert dann das Home-Verzeichnis für den neuen Benutzer, ein wichtiger Schritt für die Funktionalität des Benutzerkontos.
  • Fehlerbehandlung und Berechtigungen: Es enthält eine robuste Fehlerbehandlung, die sicherstellt, dass das Skript bei Problemen mit entsprechenden Meldungen und Statusangaben beendet wird. Das Skript erfordert Root-Rechte, was seinen administrativen Charakter widerspiegelt.

Mögliche Anwendungsfälle

Stellen Sie sich einen MSP vor, der mehrere Mac OS-Systeme für einen neuen Firmenkunden einrichten soll. Bisher mussten dazu auf jedem Rechner manuell Benutzerkonten angelegt werden – ein zeitaufwändiger und fehleranfälliger Prozess. Mit diesem Skript kann der MSP schnell, einheitlich und sicher Administratorkonten für alle Rechner einrichten, was Konsistenz gewährleistet und viel Zeit spart.

Vergleiche

Herkömmliche Methoden zum Hinzufügen von Benutzer:innen unter Mac OS verwenden die Oberfläche der Systemeinstellungen oder einfache Terminalbefehle. Diese Methoden sind zwar für Einzelfälle geeignet, aber nicht skalierbar und anfällig für Inkonsistenzen. Dieses Skript automatisiert den Prozess und stellt sicher, dass jedes Konto nach bewährten Verfahren und mit genau den erforderlichen Berechtigungen erstellt wird.

FAQs

  • Wie sicher ist dieses Skript für die Erstellung von Admin-Benutzer:innen?
    • Das Skript ist auf Sicherheit ausgelegt, erfordert Root-Zugriff und geht mit sensiblen Informationen wie Passwörtern sorgfältig um.
  • Kann das Skript mehrere Benutzer:innen auf einmal anlegen?
    • Wie geschrieben, wird pro Aufruf ein Benutzer angelegt. Es kann jedoch in einem größeren Skript geändert oder in eine Schleife eingefügt werden, um mehrere Benutzer:innen zu erstellen.

Auswirkungen

Automatisierte Skripte sind zwar effizient, haben aber auch Auswirkungen auf die IT-Sicherheit. Wenn sie missbraucht werden oder Unbefugte auf sie zugreifen, können sie ein Vektor für die Schaffung nicht autorisierter Zugangspunkte sein. Daher ist die Sicherung des Skripts selbst ebenso wichtig wie die Sicherung des Systems, auf dem es läuft.

Empfehlungen

  • Führen Sie solche Skripte immer unter Berücksichtigung der höchsten Sicherheitsstandards aus.
  • Prüfen und aktualisieren Sie das Skript regelmäßig, um die Kompatibilität mit den neuesten Mac OS-Versionen sicherzustellen.
  • Beschränken Sie den Zugriff auf das Skript auf autorisiertes Personal.

Abschließende Überlegungen

Die Einbindung von Tools wie NinjaOne kann den Nutzen solcher Skripte noch erhöhen. NinjaOne bietet eine Plattform zur Verwaltung des IT-Betriebs, auf der Skripte effizient eingesetzt, überwacht und verwaltet werden können. Die Integration von automatisierten Skripten in ein breiteres Management-Framework wie NinjaOne kann die IT-Effizienz und die Sicherheitslage eines Unternehmens erheblich verbessern, vor allem, wenn es um unterschiedliche und komplexe Umgebungen wie mehrere Mac OS-Systeme geht.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Remote Script Deployment, sehen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion unserer NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche “Ich akzeptiere” klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird “wie gesehen” und “wie verfügbar” bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).