OS X: δημιουργία χρηστών και ομάδων από τερματικό

Η δημιουργία χρηστών και ομάδων στο OS X 10.5.x μέσω του τερματικού μπορεί να προκαλέσει εύκολα πονοκέφαλο. Πρέπει να γίνει πολλαπλή χρήση του Directory Service command line utility όπως περιγράφεται εδώ. Τα συμάζεψα λίγο σε ένα απλό script μαζί με τη δυνατότητα διαγραφής του χρήστη, καθώς και δημιουργία και διαγραφή ομάδων.

#!/bin/bash
function reconfDirServ() {
        killall -HUP DirectoryService
}
echo "|-----------------------------------|"
echo "|      OS X Users and Groups        |"
echo "|-----------------------------------|"
echo "|  1. Add a user   -----------------|"
echo "|  2. Delete user  -----------------|"
echo "|  3. Add a group  -----------------|"
echo "|  4. Delete group -----------------|"
echo "|-----------------------------------|"
echo
echo -n "Option : "; read input
iif [ $input -eq 1 ]; then
        echo -n "Username : "; read username
        dscl . -create /Users/$username
        echo -n "Default shell [/bin/bash]: "; read defaultshell
        if [ -z $defaultshell ]; then defaultshell="/bin/bash"; fi
        dscl . -create /Users/$username UserShell $defaultshell
        echo -n "Full name: "; read fullname
        dscl . -create /Users/$username RealName "$fullname"
        echo -n "User ID: "; read userid
        dscl . -create /Users/$username UniqueID $userid
        dscl . -create /Users/$username PrimaryGroupID 20
        echo -n "Will $username to be an administrator (Y/N) [N]: "; read adminfunc
        if [ -z $adminfunc ]; then adminfunc="n";fi
        if [ "$adminfunc" == "y" ] || [ "$adminfunc" == "Y" ]; then
           dscl . -append /Groups/admin GroupMembership $username
        fi
        mkdir /Users/$username
        dscl . -create /Users/$username NFSHomeDirectory /Users/$username
        passwd $username
        chown $userid:staff /Users/$username
        reconfDirServ
elif [ $input -eq 2 ]; then
        echo -n "Username: "; read username
        dscl . -delete /Users/$username
        rm -Rf /Users/$username
        reconfDirServ
elif [ $input -eq 3 ]; then
        echo -n "Group name: "; read groupname
        dscl . -create /Groups/$groupname
        echo -n "Group ID: "; read groupid
        dscl . -create /Groups/$groupname GroupID $groupid
        reconfDirServ
        exit 0
elif [ $input -eq 4 ]; then
        echo -n "Group name: "; read groupname
        dscl . -delete /Groups/$groupname
        reconfDirServ
else
        echo "Select from options 1 - 4"
fi

Τα XML αρχεία των χρηστών και των ομάδων βρίσκονται στο /var/db/dslocal/nodes/Default/users και /var/db/dslocal/nodes/Default/groups αντίστοιχα.

5 thoughts on “OS X: δημιουργία χρηστών και ομάδων από τερματικό

  1. Πολύ καλογραμμένο το script σου αλλά δεν καταλαβαίνω πως σου δημιουργήθηκε η ανάγκη να κάνεις add user από CLI σε MacOSX εκτός κι αν έχεις XServer ή χρησιμοποιείς MacOSX ως Server.

    Γνώμη μου είναι ότι τα BSD & Linux-based συστήματα είναι σαφώς ανώτερα σε αυτόν τον τομέα κι ότι ο XServer εκτός από ελάχιστες περιπτώσεις είναι αποτυχία σκέτη…

  2. panoskrt

    Σ’ευχαριστώ Παναγιώτη:) Χρησιμοποιώ OS X περιστασιακά απομακρυσμένα με SSH και συνήθως όταν βρίσκομαι μπροστά πάντα θα υπάρχουν 3-4 τερματικά ανοιχτά. Ήθελα να δημιουργώ χρήστες και ομάδες για διάφορες δοκιμές, χωρίς πολλά πέρα δώθε στο GUI. Δε γίνεται να έχεις ένα UNIX (certified κι όλας και BSD based) σύστημα και να σου βγάζει τη πίστη για να δημιουργήσεις έναν χρήστη, πέρνει περισσότερο χρόνο απ’ ότι στο GUI.
    Ο XServer σίγουρα κάτι θα έχει να προσφέρει αλλά δεν έχω ασχοληθεί καθόλου. Έχεις “παίξει” μαζί του;

  3. Όχι, δεν έχω καμιά εμπειρία με τον XServer. Πρέπει να έχει σχετικά εύκολο menu αλλά το installation ας πούμε ενός server lighttpd+ruby+mysql είναι παρόμοια διαδικασία με έναν linux server και γίνεται μέσω τον ports.

    Απλά προσφέρει πολλές υπηρεσίες μέ one-click install νομίζω. Σκέφτομαι να το περάσω σε ένα mac mini G4 από όσο μου είπαν τρέχει άνετα, και να παίξω λίγο μαζί του εκεί πάνω, αλλά δεν έχω τόσο χρόνο τελευταία!

  4. panoskrt

    Τώρα ίσως καταλαβαίνεις πως μου δημιουργήθηκε η ανάγκη😉
    Μιας και το ‘dscl’ είναι λίγο χάος, εάν είναι να χρησιμοποιήσεις κάτι που δεν υπάρχει στο script, βάλτο αν θες και στείλτο…

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s