it-swarm.com.de

Erstellen Sie eine .sh-Datei, in der Benutzername, Hostname und Kennwort neu festgelegt werden

Ich verteile einen VM an meine Studenten für einen Anfängerprogrammierkurs. Anstatt Ubuntu von Grund auf neu installieren zu müssen, möchte ich ihnen aus Gründen der Geschwindigkeit ein vollständig eingerichtetes Image zur Verfügung stellen, das sie einfach ausführen können.

Um es einzurichten, habe ich ihm einen Opfer-Hostnamen, einen Benutzernamen und ein Passwort gegeben. Was ist der sauberste Weg, um dies für die Schüler zu ändern, wenn sie in Betrieb sind?

Bis hierher bin ich gekommen Gist , was einige unzuverlässige Fortschritte mit dem Hostnamen hat, aber der Benutzername widersetzt sich mir, ihn zu ändern.

Ich möchte, dass es so schmerzlos wie möglich ist, so wie dies in ihrem ersten Labor geschehen soll.

Es ist durchaus möglich, dass es einen völlig anderen Ansatz gibt, den ich einschlagen sollte. Ich bin offen für alle Vorschläge.

#!/bin/bash
clear
toilet  "     CODE1161     "  --metal --font future
echo    ""
toilet  "Let's get started!"  --metal --font future
echo    ""
echo    "We need to make this computer be YOURS"
echo    "We need a name for you and your computer, make it short or it'll take up a lot of space."
echo    "My computer is called um and my name is ben, so I get [email protected]:~$ as my command Prompt."
echo    ""
read -p "Enter a name for your computer:"  compname
read -p "Enter your name: "  username
echo    ""
toilet  "[email protected]$compname~$"  --gay --font wideterm
echo    ""
echo    "What do you think? If you hate it, press ctrl+c and do this again"
read -p "otherwise, just press enter." sacrificial

# set the Host name, in a million places, for some unknown reason.
echo "1"
sed -i "/127\.0\.1\.1\s*vc/ { c \
127.0.1.1   $compname
}" /etc/hosts
echo "2"
Sudo hostname -b $compname
echo "3"
Sudo hostnamectl set-hostname $compname
echo "4"
Sudo groupadd $username
echo "5"
Sudo usermod -d /home/$username -m -g $username -l $username ben

a screen shot of the output progress

9
Ben

Warum nicht einfach eine OEM-Installation verwenden? Es ist nicht so hübsch, aber es erledigt die Arbeit. Wenn Sie diesen Weg beschreiten möchten, lesen Sie die ausgezeichnete Antwort von izx auf diese Frage: Wie installiere ich Ubuntu für jemanden vor (OEM-Installation)?

Grundsätzlich fordert das System den Benutzer (beim ersten Start) zur Eingabe einer Reihe von Informationen auf, um seinen Computer zu personalisieren. Dies schließt die Sprache, den Ort, den Benutzernamen, den Hostnamen, das Passwort usw. ein. Grundsätzlich alles, was Ihr Computer normalerweise zur Installation auffordert.

Genau dafür sind OEM-Images gedacht, und sie leisten hervorragende Arbeit. Außerdem geben Sie Ihren Schülern einen kleinen Einblick in die "Ubuntu-Installation". Ubuntu-Installationen sind jedoch nicht gerade schmerzhaft. Sie können es wahrscheinlich in einer einzelnen Klasse tun und Ihren Schülern einige Hausaufgaben geben, um ihre VM zu personalisieren und zu erkunden. Außerdem ist die Partitionierung schmerzlich Spaß!


Zurück zum vorliegenden Problem (und eine Antwort auf Ihre aktuelle Frage) .....

Schauen wir uns man usermod an, um eine Erklärung dafür zu erhalten, was los ist:

HÖHLEN
 Sie müssen sicherstellen, dass der angegebene Benutzer keine 
 Prozesse ausführt, wenn dieser Befehl ausgeführt wird, wenn die numerische 
 Benutzer-ID des Benutzers, der Name des Benutzers oder das Basisverzeichnis des Benutzers wird 
 geändert. usermod überprüft dies unter Linux, überprüft jedoch nur, ob der Benutzer 
 gemäß utmp auf anderen Architekturen angemeldet ist. 

Grundsätzlich bedeutet dies nur, dass wir die UID eines Benutzers, seinen Benutzernamen, sein Ausgangsverzeichnis oder etwas Ähnliches nicht ändern können, wenn der Benutzer angemeldet ist.

Wir können also ein paar lustige Dinge tun, um dies beim nächsten Systemstart einzurichten. Anstatt dass Ihr Skript die Arbeit erledigt, lassen wir Ihr Skript ein anderes Skript erstellen, um all das schwere Heben und Manipulieren zu erledigen. Ein Beispiel dafür:

# Make the first-run script
touch /etc/init.d/firstrun-setup.sh

# Add in user modifier
echo "usermod -d /home/$username -m -g $username -l $username ben" >> /etc/init.d/firstrun-setup.sh

# Add in group rename
echo "groupmod -n $username ben" >> /etc/init.d/firstrun-setup.sh

# Add in password expiry
echo "passwd -e $username" >> /etc/init.d/firstrun-setup.sh

# Add in file self-destruct
echo "rm /etc/init.d/firstrun-setup.sh" >> /etc/init.d/firstrun-setup.sh

# Mark the file as executable
chmod a+x /etc/init.d/firstrun-setup.sh

# Reboot the computer
reboot

Grundsätzlich stellen Sie auf diese Weise Ereignisse in die Warteschlange, die beim nächsten Systemstart ausgeführt werden sollen. Dies wird ausgeführt, bevor das Benutzerland passiert, sodass das System diese Befehle als root ausführt. Daher wird der Benutzer ben nicht angemeldet und das System beschwert sich nicht.

Möglicherweise müssen Sie diesem Ding noch zusätzliche Befehle hinzufügen, um eine stärkere Personalisierung zu ermöglichen (z. B. Festlegen des tatsächlichen Namens usw.). Dies ist jedoch optional und muss nur durchgeführt werden, wenn dies während des Setup-Skripts erfolgen soll.

Es kann jedoch eine gute Idee sein, nur einen neuen Benutzer für die Schüler zu erstellen und dann Ihr vorhandenes Opferkonto beizubehalten. Auf diese Weise können Sie, wenn etwas passiert, die Maschine reparieren/verwalten, falls dies überhaupt erforderlich ist. Wenn Sie Ihren Schülern Administratorzugriff auf ihre VM gewähren, ist dies natürlich ein Streitpunkt, da sie möglicherweise den "Ausbilder" -Benutzer löschen, weil sie Schüler sind.

8
Kaz Wolfe

Lassen Sie sie auf dem Anmeldebildschirm drücken ctrlaltF2 und melden Sie sich über das Terminal, das geöffnet und ausgeführt wird, als ben an

Sudo passwd

Und geben Sie allen das gleiche Passwort für root, dh die Kursnummer. Wenn also etwas kaputt geht, können Sie es reparieren. Lassen Sie sie sich dann abmelden, indem Sie exit eingeben, und melden Sie sich als root mit ihrem neuen root-Passwort an und führen Sie das Skript aus (möglicherweise müssen Sie es so ändern, dass der Benutzer ben und nicht root geändert wird).

Oder lassen Sie sie sich vom Terminal aus als ben anmelden, indem Sie auf drücken ctrlaltF2 (wie zuvor) auf dem Anmeldebildschirm und lassen Sie sie dann das Skript von dort ausführen. Dies könnte funktionieren, da der Benutzer, wie in der vorherigen Antwort unter Mur und Kaz Wolfe angegeben, keine Prozesse ausführen kann und die Anmeldung über das Terminal keine Prozesse starten sollte B. X oder Ubuntu-Desktop oder andere Userland-Prozesse, die usermod stören. (Ich weiß nicht, ob das funktioniert, ich habe es nicht ausprobiert, aber es ist einen Versuch wert).

0
Thomas Bodrey