Deaktivieren Sie die Benutzer-Shell aus Sicherheitsgründen

58

Wir haben mehrere Benutzerkonten, die wir für automatisierte Aufgaben erstellen, für die differenzierte Berechtigungen erforderlich sind, z. B. für die Übertragung von Dateien zwischen Systemen, die Überwachung usw.

Wie sperren wir diese Benutzerkonten, damit diese "Benutzer" keine Shell haben und sich nicht anmelden können? Wir möchten verhindern, dass jemand als einer dieser Benutzeraccounts SSH ausführen kann.

Suman
quelle

Antworten:

63

Mit dem usermodBefehl können Sie die Anmeldeshell eines Benutzers ändern.

usermod -s /sbin/nologin myuser

oder

usermod -s /usr/sbin/nologin myuser

Wenn Ihr Betriebssystem / sbin / nologin nicht bereitstellt, können Sie die Shell auf einen NOOP-Befehl wie / bin / false setzen:

usermod -s /bin/false myuser
Jordanien
quelle
1
/bin/falsescheint häufiger als /bin/true.
jw013
@ jw013 Ich aktualisiere meine Antwort, aber beide sollten gut funktionieren.
Jordan
1
Beachten Sie, dass auf Debians nologintatsächlich am/usr/sbin/nologin
xebeche
Dies war meine erste Idee, leider ist die 'gültige' Verwendung einiger Benutzerkonten bei der Einstellung deaktiviertnologin
Javier
2
@ jw013 Eigentlich habe ich ja /usr/local/bin/maybewas /dev/urandomzwischen diesen beiden ausgewählt. Vielleicht sollte ich es benutzen: D
hegez
21

Das Ändern der Anmeldeshell verhindert nicht unbedingt die Authentifizierung der Benutzer (mit Ausnahme einiger Dienste, die prüfen, ob die Shell des Benutzers in erwähnt wird /etc/shells).

Möglicherweise können sich die Benutzer weiterhin bei den verschiedenen Diensten authentifizieren, die Ihr System für Unix-Benutzer bereitstellt, und sind weiterhin berechtigt, einige Aktionen auszuführen, obwohl möglicherweise keine willkürlichen Befehle direkt ausgeführt werden.

Wenn Sie die Shell auf /bin/falseoder /usr/sbin/nologinändern, wird nur verhindert, dass Befehle für die Dienste ausgeführt werden, mit denen Befehle ausgeführt werden können (Konsolenanmeldung, ssh, telnet, rlogin, rexec ...). Beeinflussen Sie daher die Autorisierung nur für einige Dienste.

So sshkönnen sie beispielsweise weiterhin Portweiterleitungen durchführen.

passwd -lDeaktiviert die Kennwortauthentifizierung, der Benutzer kann jedoch möglicherweise andere Authentifizierungsmethoden verwenden (wie authorized_keysbei ssh).

Mit pamauf Linux zumindest, können Sie das verwenden pam_shellsModul Authentifizierung oder Autorisierung für die Benutzer zu beschränken mit einer zulässigen Schale (diejenigen , die unter /etc/shells). Für ssh, sollten Sie es auf Zulassung (tun account) Ebene als für die Authentifizierung sshdverwendet pam zusätzlich zu anderen Authentifizierungsmethoden (wie authorized_keys), oder Sie können es mit tun sshd_configRichtlinien /etc/ssh/sshd_config(wie AllowUsersund Freunden).

Beachten Sie jedoch, dass das Hinzufügen einiger Einschränkungen bei der globalen Pam-Autorisierung möglicherweise verhindert, dass cronJobs als diese Benutzer ausgeführt werden.

Stéphane Chazelas
quelle
Danke. Was würden Sie dann angesichts des folgenden Schemas empfehlen: Ich muss einen Benutzer erstellen, der über sftp oder sshfs Zugriff auf seinen Basisordner benötigt, sich jedoch nicht mit einer Shell anmelden kann. Ist das überhaupt möglich ? Ich mag PAM-Module mögen die Lösung sein, aber ich verstehe nicht alles:|
Stphane
@Stphane können Sie einen Blick auf rssh nehmen - manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
Hart Simha
4

Sie bearbeiten die /etc/passwdDatei und ändern die Benutzer-Shell von /bin/bashoder /bin/shnach/sbin/nologin

Mark Cohen
quelle
8
Die Antwort ist richtig, aber die manuelle Bearbeitung von / etc / passwd sollte niemals empfohlen werden.
Jordanien
3
Warum? Dies ist etwas, was wir schon so lange tun, wie ich ein professioneller Sys-Administrator bin. (seit ungefähr 20 Jahren) Tatsächlich verfügen nicht alle Linux / Unix-Distributionen über Tools zum Ändern von / etc / passwd oder / etc / group. Es sei denn, Sie verwenden Yast oder Smit, Tools, die die Einstellungen zwischenspeichern und überschreiben Ihnen schadet es nicht bei der Handbearbeitung.
Mark Cohen
6
Es ist viel einfacher, durch manuelle Bearbeitung einen Fehler zu machen, bei dem die Anmeldung jedes Benutzers unterbrochen wird, als durch einen einzelnen Benutzer.
Jordan
2
@jordanm: es gibt vipwwelche, die diese Art von Fehler verhindern.
Eudoxos
4

Deaktivieren Sie zunächst das Passwort mit passwd -l username.

Beachten Sie auch auf der manSeite passwdfür die Option -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.
mdpc
quelle
1
Dies ist möglicherweise nicht wünschenswert. Sie benötigen möglicherweise ein Kennwort für ihr Systemkonto, um beispielsweise auf E-Mails zugreifen zu können.
Jordan
1
Einige E-Mail-Systeme erlauben die Verwendung eigener Passwortmechanismen. Ich verwende Dovecot und Exim nur mit einem E-Mail-Passwort. Dies ermöglicht die Verwendung von Webmail auf Servern, auf denen ich mein Systemkennwort nicht verwenden würde. Virtuelle E-Mail-Domänen erfordern ein eigenes Kennwort, da sie nicht an das Kennwortsystem des Servers gekoppelt sind.
BillThor
2

Sie können den Befehl chsh verwenden:

~# chsh myuser

Geben Sie neue Shell-Details ein, wenn Sie dazu aufgefordert werden:

Login Shell [/bin/sh]: /bin/nologin

Oder kürzere Version:

~# chsh myuser -s /bin/nologin
Lass uns reden
quelle
0

Um zu verhindern, dass sich Benutzer über ssh anmelden und sogar authentifizieren, wodurch die Portweiterleitung aktiviert wird (wie hier beschrieben , Stephane), ändere ich den Benutzer so, dass er dem nobodyBenutzer des Systems ähnlich ist :

  • gesperrte Passwortauthentifizierung in /etc/shadow(mit *oder !!bei korrektem Feld)
  • deaktivierte Shell in /etc/passwd(zB /sbin/nologinim richtigen Feld)
  • schreibgeschütztes Home-Verzeichnis /etc/passwd(z. B. /im richtigen Feld)
Tastendruck
quelle