Wie führe ich einen Befehl als Benutzer aus, dessen Anmeldung deaktiviert ist?

21

Ich versuche, den Befehl su zu verwenden, um eine Anwendung als anderer Benutzer auszuführen

In diesem Fall versuche ich, Irssi auszuführen

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

Ich starte gksu und setze die gleichen Parameter und es funktioniert. Ich werde nicht nach dem Benutzerpasswort gefragt. Was ist das Problem? Und wie löse ich das?

Ich sollte beachten, dass der Benutzer so erstellt wurde

adduser --system --disabled-login [username]

wenn es einen Unterschied macht ... seufz.

user123361
quelle
vergessen Sie nicht -c flag, um irssi zu starten? (su -c irssi)
Eephyne
Auch das ausprobiert ... Tausend Dinge ausprobiert ... warum es so schwer ist, WTF zu starten, genau so, wie es die Manpage will ... aber nichts passiert grrrr
user123361
Kann es sein, dass irssiein Problem vorliegt und der Befehl su funktioniert?
Nanne
Hat der [Benutzername] die richtigen Rechte, um irssi auszuführen?
Doka

Antworten:

28

Diese Antwort sollte Ihnen trotzdem weiterhelfen, auch wenn Sie die Änderungen an der Frage berücksichtigen. Insbesondere für ein Konto, das --disabled-loginohne festgelegtes Kennwort und ohne andere Anmeldemöglichkeiten erstellt wurde , sollte es dennoch möglich sein, sudoBefehle oder eine Shell als Benutzer auszuführen (siehe unten). So wird das rootKonto in Ubuntu eingerichtet.

Es gibt mehrere Probleme mit dem Befehl su - irssi.

Dieser Befehl versucht, eine Shell zu starten, die einem Benutzer namens gehörtirssi .

Es wird fehlschlagen, wenn:

  • Es gibt keinen irssiBenutzer.
  • Das irssiBenutzerkonto ist deaktiviert.
  • Das irssiBenutzerkonto ist für die interaktive Anmeldung deaktiviert. Manchmal kann ein Konto Dienste wie FTP verwenden, es ist jedoch untersagt, sich normal anzumelden, indem seine Shell auf etwas gesetzt wird, das sofort beendet wird, wie z /bin/false. Dann endet eine Anmeldung sofort ohne Nachricht.
  • Das eingegebene Passwort ist für den irssiBenutzer nicht korrekt .

Das -Flag macht es so, dass die Shell eine anfängliche Anmeldeshell simuliert - das heißt, es ist wirklich so, als würde man sich als anmelden irssi. -Wenn der suBefehl erfolgreich ausgeführt wurde, erhalten Sie auch ohne das Flag eine Shell, deren Eigentümer irssiUmgebungsvariablen HOMEjedoch unverändert bleiben.

Wenn Sie stattdessen ein Programm mit dem Namen ausführen möchtenirssi , müssen Sie es suanders aufrufen :

su username - -c irssi

Wenn Sie es weglassen , ist es dasselbe wie --it, wenn versucht wird, den Befehl als root auszuführen.-c username-c root

Alternativ können Sie eine Shell starten und dann den Befehl ausführen :

  1. Starten Sie die Shell mit .su username -
  2. Führen Sie in der Shell den Befehl ( irssi) aus.
  3. Wenn Sie fertig sind, verlassen Sie die Shell, indem Sie ausführen exit.

Befehle ausführen als root

Wenn Sie ausführen möchten , irssiwie root, suist nicht der richtige Weg , es zu tun. Root-Logins sind unter Ubuntu standardmäßig deaktiviert, und es gibt nur selten einen Grund, sie wieder zu aktivieren . Wenn Sie rootLogin aktiviert haben , sollten Sie in der Lage sein suzu werden root. Die Aktivierung des rootKontos ist nicht erforderlich, da Sie unabhängig davon, ob Sie dies tun oder nicht, weiterhin Befehle wie rootmit ausführen können sudo.

Wenn Sie Befehle mit ausführen sudo, geben Sie Ihr Kennwort ein und nicht das Kennwort des Benutzers, unter dessen Identität der Befehl ausgeführt werden soll. Nur Administratoren können beliebige Befehle wie rootmit ausführen sudo(es sei denn, Sie konfigurieren dies neu sudo, damit andere dies tun können). Ein Benutzer, der das System nicht verwalten darf, darf also keine Befehle wie rootmit seinem eigenen Kennwort ausführen .

So laufen Sie irssiwie rootmit sudo:

sudo irssi

Und Sie würden Ihr Passwort eingeben, wenn Sie dazu aufgefordert werden, nicht root's.

Mit Ausnahme des von Ihnen eingegebenen Passworts geschieht dies wie folgt:

su -c irssi

Es sei sudodenn, die Version kann erfolgreich sein, da das rootKonto nicht aktiviert werden muss.

Wie bei su, können Sie verwenden , sudoum Befehle als eine andere, nicht laufen rootBenutzer . So laufen Sie irssiwie usernamemit sudo:

sudo -u username irssi

Wenn Sie sudo sich su -in Bezug aufHOME --das so verhalten möchten, dass Sie die HOMEUmgebungsvariablen des Zielbenutzers verwenden möchten , können Sie sudomit dem -HFlag ausführen :

sudo -H irssi
sudo -H -u username irssi

Sie können eine ganze Shell mit starten sudo, so wie Sie es mit können su. Mit Ausnahme des von Ihnen eingegebenen Kennworts hat dieser Befehl die gleiche Wirkung wie su:

sudo -s

Und dieser Befehl hat den gleichen Effekt wie su -:

sudo -i

(Das isteht für Initial Login Shell .)

Sie können eine Shell auch als anderer Benutzer starten:

sudo -u username -s
sudo -u username -i

Lesen Sie weiter sudo

Weitere Informationensudo finden Sie unter:

Warum hat gksugearbeitet, wenn sunicht?

gksuWahrscheinlich hat es beim Laufensudo funktioniert .

gksuist ein Frontend für beide su und sudo. In Ubuntu wird standardmäßig verwendet sudo(da in Ubuntu in der suRegel nicht verwendet wird root, um rootBenutzer zu werden , und dies nur eine sekundäre Methode ist, um andere Benutzer zu werden , die keine Benutzer sind).

Sie können machen gksuGebrauch , suindem Sie als das Frontend gksu --su-mode.

Sie können herausfinden, ob gksusich im suModus oder im sudoModus befindet, und diese Einstellung (falls gewünscht) durch Ausführen von ändern gksu-properties. Dies ist eine Benutzereinstellung.

Wenn gksuin ist sudoModus verhält es sich genauso wie gksudo.

Lesen Sie weiter gksu


Post-Solution-Analyse

Sie haben festgestellt, dass Sie den erforderlichen Befehl ausführen können mit:

sudo -u username irssi

(Welche der oben aufgeführten Techniken ist.)

Letztendlich haben Sie zwei Informationen gemeldet, die ausreichen, um zu erklären, warum andere Techniken versagt haben, aber das war erfolgreich:

  1. Das usernameKonto wurde mit der --disabled-loginFlagge erstellt, wodurch es kein Kennwort (und keine andere Möglichkeit zum Anmelden) hat. Wenn Sie kein Passwort haben, können Sie sich nicht mit einem leeren Passwort anmelden . Dies bedeutet, dass kein Passwort zur Authentifizierung ausreicht. In Kombination mit der Eliminierung anderer Authentifizierungsmittel kann dieses Mittel usernameüberhaupt nicht authentifizieren.

    So sind alle subasierten Lösungen aus. sudokann jedoch funktionieren, da sudoSie sich bei der Authentifizierung nicht als der Benutzer authentifizieren, dessen Identität Sie annehmen möchten. Stattdessen müssen Sie autorisiert sein, sich als solche auszugeben, und Sie müssen sich als Sie selbst authentifizieren (dh Sie müssen Ihr eigenes Passwort eingeben, nicht ihr Passwort).

    Es ist möglich, ein Passwort für das Konto festzulegen, wodurch diese Anmeldebarriere aufgehoben wird:

    sudo passwd username

    Es kann jedoch einen guten Grund dafür geben, dass sich der Benutzer nicht anmelden darf. Wenn sich dieser Benutzer beispielsweise anmelden und grafisch anmelden darf, ergeben sich schlechte Probleme aus der Umgebung des Benutzers oder Berechtigungen, die für die Ausführung von X11-Apps schlecht geeignet sind ? Wenn sich dieser Benutzer anmelden könnte, wäre es dann möglich, sich remote als dieser Benutzer anzumelden (für Computer, auf denen Sie Netzwerkdienste verfügbar gemacht haben)?

    Wenn Sie es jemals wieder deaktivieren möchten:

    sudo passwd -dl username

    Verwandte Themen: Deaktivieren Sie das rootKonto erneut, nachdem Sie es vorübergehend aktiviert haben.

  2. Das usernameKonto hat /bin/falseals Login-Shell.

    Wenn eine Shell wie diese bashals Anmeldeshell ausgeführt wird, richtet sie Ihre Umgebung ein und gibt Ihnen eine interaktive Eingabeaufforderung, mit der Sie den Computer steuern können.

    Wenn /bin/falsedagegen ausgeführt wird, geschieht nichts und es wird ein Fehler gemeldet . ( /bin/trueTut nichts und meldet Erfolg.)

    Die Befehle falseund truesind nützlich für Skripterstellung und für verschiedene Testzwecke, aber auch zum Deaktivieren eines Kontos, sodass die Anmeldesitzung sofort beendet wird, wenn sich jemand anmeldet. Auf diese Weise kann ein Kennwort (oder eine andere Authentifizierungsmethode) aktiviert werden, und Benutzer können sich anmelden, nur nicht für den Shell-Zugriff . Wenn zum Beispiel ein FTP-Server vorhanden ist, können sie weiterhin über FTP auf ihr Konto zugreifen. Wenn es einen SSH-Server gibt, können sie zwar keine Shell über SSH abrufen, sie können jedoch weiterhin Dateien verwenden sftpund scpübertragen.

    Da username‚s Login - Shell nicht funktionsfähig war, Befehle wie , , und konnte nicht arbeiten.su usernamesu - usernamesudo -u username -ssudo -u username -i

    Aber Befehle, die keine Shell geben, mögen oder könnten immer noch funktionieren.sudo -u username commandsu username -c 'command'

    Da Befehle ausgeführt werden können, Sie können den funktional Login - Shell , um etwas des Benutzers ändern:

    sudo chsh -s /bin/bash username

    Dies sollte jedoch auch mit Vorsicht geschehen, da es einen guten Grund geben kann, interaktive Anmeldungen für den Benutzer zu deaktivieren.

Hier hatten usernamebeide Passwort und "deaktiviert" Shell deaktiviert. Das Fehlen eines funktionierenden Kennworts verhinderte su, dass alle auf der Shell basierenden Lösungen funktionieren, während das Fehlen einer funktionierenden interaktiven Anmeldeshell alle Shell-Spawning-Lösungen daran hinderte, zu funktionieren (mit Ausnahme des manuellen Aufrufs einer Shell wie ).sudo -u username bash

sudo -u username command ist was geblieben ist.

Eliah Kagan
quelle
Entschuldigen Sie die vielen Änderungen, die Sie an Ihrer Antwort vorgenommen haben. Wow. Vielen Dank. Wenn ich cat / etc / passwd mache, hat der Benutzer, den ich konfiguriert habe, am Ende / bin / false. eine Idee, wie man das behebt?
user123361
Aus irgendeinem Grund funktioniert die Verwendung von sudo -u Benutzername irssi. Vielen Dank für Ihre ausführliche, gut erläuterte Antwort!
user123361
@db Ich bin froh, dass es funktioniert hat! (Übrigens, Sie müssen sich nicht für die Bearbeitung entschuldigen, die Bearbeitung ist sehr, sehr gut und Ihre Frage wird wahrscheinlich auch für mehr andere Personen als Folge der Bearbeitungen nützlich sein.) Bei Ihren anderen Fragen habe ich meine Antwort auf bearbeitet Fügen Sie am Ende einen Analyseabschnitt hinzu.
Eliah Kagan