Wie kann ich einen nicht angemeldeten Benutzer erstellen?


134

Ich möchte einen Benutzer und eine Gruppe erstellen, die beide subversionauf einem RHEL 5-System aufgerufen werden. Ich suchte auf der Manpage nach useraddund ich denke, der Befehl wäre einfach ...

useradd subversion

Sie sind sich jedoch nicht sicher, wie Sie das Erstellen eines Basisverzeichnisses vermeiden sollen. Außerdem möchte ich nicht, dass es sich um einen Benutzer handelt, der sich beim System anmelden kann.

Der Hauptzweck ist lediglich die Bereitstellung eines Besitzers für ein SVN-Repository.


Haben Sie sich wirklich die Manpage von useradd angesehen und -M nicht gefunden (kein HOME-Verzeichnis erstellen)?
Inemanja

Antworten:


76

Sie können den -MSchalter verwenden (stellen Sie sicher, dass es sich um ein Großbuchstaben handelt), um sicherzustellen, dass kein Basisverzeichnis erstellt wird:

useradd -M subversion

Sperren Sie dann das Konto, um die Anmeldung zu verhindern:

usermod -L subversion

59
Dies ist keine besonders aussagekräftige Antwort, der auf diese Weise erstellte Benutzer verfügt immer noch über eine Shell. Und Sie haben das OP nicht einmal gewarnt, dass dies der Fall ist. Retrospektiv das wäre usermod -s /bin/false subversion, oder mit --shell /bin/falsezuuseradd
Lee Hambley

7
@beak das Konto ist gesperrt, eine Shell ist ein strittiger Punkt.
John T

15
@beak Eigentlich kann nur der Root-Benutzer auf das gesperrte Konto zugreifen, aber warum sollte er sich die Mühe machen, wenn die Person bereits Root-Zugriff hat? Und das Setzen der Shell macht nicht viel, wenn ein Benutzer dies ausführen su -s /bin/bash usernameund umgehen kann.
John T

11
Vielen Dank, dass Sie sich die Zeit für das Gespräch genommen haben. Sie haben natürlich recht. Aber es schmerzt mich, nicht angemeldete Benutzer mit definierten Shells zu sehen, es erscheint mir faul, und falls jemand mit dem System nicht vertraut ist, ist es schön, dass er nicht versehentlich etwas Unbeabsichtigtes tun kann. Hacker sind eine andere Rasse, wenn sie bereits eine Shell auf der Maschine haben, denke ich, dass das Spiel im Grunde genommen vorbei ist
Lee Hambley,

11
Diese Kommentare deckten genau die Dinge ab, auf die ich gehofft hatte, danke @Beaks && John T
Rixius

220

useradd -r subversion

per man useradd:

-r, --system create a system account

Das Flag -r erstellt einen Systembenutzer, der kein Kennwort und kein Basisverzeichnis hat und sich nicht anmelden kann.


1
Mit diesem Befehl wird sogar eine Gruppe für den Benutzer erstellt, die denselben Namen trägt. Der Benutzer "subversion" befindet sich also in der Gruppe "subversion".
Hervorragend geeignet,

49
mit -r alleine können wir uns trotzdem einloggen. Wir brauchen -s / bin / false, um die Benutzer-Shell zu deaktivieren.
25.

8
@ c4il Aber der einzige, der sich einloggen kann, ist root, oder? Ich meine, sie haben kein Passwort, daher würde ich erwarten, dass sich nur root bei ihnen anmelden kann.
Camilo Martin

aber wir können ihnen trotzdem passwörter zuweisen, habe ich versucht passwd subversion.
Shayan,

@rynop Wie kann ich überprüfen, ob ein Benutzer auf meinem Computer ein Systembenutzer ist? gibt es irgendeinen Weg? Ich denke, sie sind nicht in der Sudo'ers-Gruppe.
Shayan,

22

Eine andere Lösung zum Erstellen eines Systembenutzers unter Verwendung von adduser :

adduser --system --no-create-home --group yourusername

Sie können entfernen, --groupwenn Sie keinen --no-create-homeBenutzernamen für die Gruppe benötigen und wenn Sie für diesen Benutzer ein Zuhause benötigen.

Wie durch py4on in den Kommentaren erwähnt, auf einigen Systemen kann man brauchen , die verwenden --disabled-loginOption , um, na ja, Login für diesen Benutzer deaktiviert werden . Es scheint jedoch das Standardverhalten unter Debian zu sein.

Beachten Sie, dass die numerische ID des Benutzers einem Systemkonto entspricht. Sie können die UID jedoch mithilfe der --uidOption reparieren .

Beachten Sie abschließend, dass auf einigen Systemen (z. B. Fedora) adduserein Symlink zu vorhanden useraddist. In diesem Fall ist diese Antwort nicht gültig.


3
Um "Ich möchte nicht, dass es ein Benutzer ist, der sich anmelden kann" zu adressieren, fügen Sie --disabled-loginebenfalls (vorher yourusername) die Flagge hinzu
toxefa

@ py4on: Obwohl diese Option in der Manpage dokumentiert ist, scheint sie zumindest unter Debian die Standardeinstellung zu sein.
Skippy le Grand Gourou

15

Die sauberste Antwort auf die ursprüngliche Frage lautet, den Befehl auszuführen:

adduser subversion --shell=/bin/false

Und wenn Sie das Home-Verzeichnis auch nicht wollen:

adduser subversion --shell=/bin/false --no-create-home

oder, wenn Sie einen noch gesperrten Systembenutzer wünschen (Normalerweise wird dadurch kein Basisverzeichnis erstellt - es wurde gemeldet, dass weiterhin ein Basisverzeichnis in Linux Mint erstellt wird, wie im Kommentar unten angegeben)

adduser subversion --system --group

Alle diese Befehle erstellen eine Gruppe mit demselben Namen wie der Benutzer


Auf Mint erzeugt der letzte Befehl definitiv ein Creating home directory '/home/nodejs' ...
Heimverzeichnis

11

Am sichersten ist es, wenn Sie wie folgt adduservorgehen:

$ adduser -r -s /bin/nologin subversion

ANMERKUNG: Achten Sie darauf, dass Sie einschließen -s /sbin/nologin, um zu verhindern, dass Anmeldeshell für das Konto verfügbar gemacht wird.

Bestätigung des Setups

$ grep subversion /etc/passwd /etc/shadow
/etc/passwd:subversion:x:496:496::/home/subversion:/bin/nologin
/etc/shadow:subversion:!!:17232::::::

Es gibt jedoch kein Verzeichnis:

$ ll /home | grep subversion
$

Bestätigen Sie, dass das Konto anderweitig verwendbar ist:

$ sudo -u subversion whoami
subversion

$ sudo -u subversion date
Tue Mar  7 08:58:57 EST 2017

Entfernung

Wenn Sie dieses Konto entfernen müssen:

$ userdel subversion -r
userdel: subversion mail spool (/var/spool/mail/subversion) not found
userdel: subversion home directory (/home/subversion) not found
$

Und bestätigen Sie:

$ grep rtim-hc-user /etc/passwd /etc/shadow
$

1
adduser erkennt die Option -r nicht. Ich denke du meintest useradd.
Felwithe

@felwithe nein, jede antwort die ich schreibe teste ich immer vor dem posten. Ich habe es überprüft und dieser Schalter wird auf einem CentOS 6.x-System angezeigt.
SLM

Hier ist ein Pastebin des Ergebnisses . Ich bin auf Ubuntu 16 LTS. Ich weiß nicht, welche Version von adduser installiert ist, aber ich hätte nie gedacht, dass sich dies im Laufe der Zeit oder von System zu System ändern würde. Ich habe es dann stattdessen mit einem --system-Flag versucht, wodurch ein Homedir für den Benutzer erstellt wurde (ich wollte kein Homedir). Schließlich habe ich es einfach mit useradd anstelle von adduser gemacht und es hat wie geplant funktioniert. Also habe ich einfach angenommen, dass Sie es als adduser falsch geschrieben haben, als es useradd sein sollte.
Felwithe

@felwithe yeah Ich habe nicht an dir gezweifelt, sondern dich nur wissen lassen, dass ich es versucht habe 8-). Ich bin ein Mod auf der Unix- und Linux-Site und diese Cmds sind notorisch verschiedene S / W-Distributionen. Das OP erwähnt RHEL in der Frage, warum ich es so beantwortet habe, aber sie haben es nicht als Red Hat-spezifisch markiert, was Teil der Verwirrung in dieser Q & A IMO ist.
SLM

1

Auf einem CentOS 7-Computer

  • Wenn der Benutzer nicht existiert:
    useradd testuser --shell=/sbin/nologin

  • Wenn Sie einen vorhandenen Benutzer ändern möchten:
    usermod testuser --shell=/sbin/nologin


0

Erstellen Sie zunächst ein verschlüsseltes Kennwort für den Benutzer mit maximal 8 Zeichen.

openssl passwd -crypt new_password_less_than_eight_chars_long

Dann machst du:

useradd -m -g groupname -G otherGroupsSeperatedByComma -p encryptedPassword username

0

In Debian könnten Sie einen Systembenutzer (ohne Home-Verzeichnis) und eine Login-Shell erstellen:

useradd --system --shell=/usr/sbin/nologin <username>

Wenn Ihr nologinProgramm läuft /sbin/nologin, ändern Sie es bitte entsprechend.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.