Entschuldigung, Sie müssen ein tty haben, um sudo auszuführen


13

Ich hatte diese Frage bereits in Stack Overflow gestellt , wurde aber gebeten, sie hier zu posten. Also mach das selbe.

Ich habe diesen Befehl mit meinem Java-Programm ausgeführt.

sudo -u <username> -S pwd

Ich habe diese Ausgabe-

command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo

Ich habe versucht, / etc / sudoers zu bearbeiten, aber es enthält bereits

<username>       ALL=(ALL)       NOPASSWD: ALL

Dann erfuhr ich, dass dies durch Auskommentieren des folgenden Codes in / etc / sudoers geschehen kann

# Defaults requiretty

Standardmäßig auch, wenn Sie versuchen, einen Befehl als ein anderer Benutzer mit auszuführen sudo eigenes Kennwort angeben. Dies kann jedoch durch die folgende Änderung in / etc / sudoers- geändert werden.

Defaults targetpw

Meine Frage ist, ist es möglich, meinen obigen Befehl in Java auszuführen, ohne irgendwo Änderungen vorzunehmen, dh mit Standardeinstellungen ?


1
Haben Sie deshalb nach der eher erfundenen Alternative für Sudo gefragt ?
Slhck

6
Scheint distro-spezifisch, wenn requirettystandardmäßig aktiviert. Laut sudoeigener Dokumentation ist es "standardmäßig deaktiviert".
mpy

Antworten:


3

Ich weiß nicht, wie man Shell-Befehle in Java ausführt, aber schauen Sie sich die Option -t für den Befehl ssh an

-t force pseudo-tty allocation.

Das ist, was ich mache, wenn ich den Befehl als root über ssh ausführen muss (direkte root-Anmeldung deaktivieren und tty für sudo erforderlich)


1
Obwohl dieser Ansatz das Problem auf den ersten Blick lösen könnte, ist überhaupt nicht klar, in welchem ​​Zusammenhang es mit der Frage steht. Könnten Sie das bitte näher erläutern?
Pabouk

1
+1 für die Behebung des Problems, ohne dass Standardeinstellungen geändert werden müssen.
Luke

1

Meine Frage ist, ist es möglich, meinen obigen Befehl in Java auszuführen, ohne irgendwo Änderungen vorzunehmen, dh mit Standardeinstellungen?

sudo -u -S pwd

Die kurze Antwort lautet "Nein". Sie müssen die Einstellungen ändern, damit sudo andere Aktionen ausführt als derzeit.

Möglicherweise ist sudo das falsche Werkzeug dafür. Die Regeln von Sudo sollen Systemadministratoren dabei helfen, eine Möglichkeit zu konfigurieren, um schwer zu missbrauchende Erhöhungsrechte zu erlangen, um zusätzliche / unbeabsichtigte Berechtigungen zu erhalten.

Wenn Sie überlegen, was sudo für Sie tut:

  1. fordert zur Eingabe eines Kennworts auf, um die Identität zu überprüfen
  2. Privilegien erhöhen
  3. dann optional Privilegien als anderer Benutzer erhalten
  4. Protokolle, die sudo verwendet, um Zugriff zu erhalten oder Befehle auszuführen

Wenn Sie möchten, dass Ihr Java willkürliche Befehle als willkürliche Benutzer ausführt, ohne ein Kennwort für diese oder Ihre Benutzer anzugeben, ersetzen Sie im Wesentlichen sudo. In diesem Fall sollten Sie Ihre eigenen Regeln erstellen, um Missbrauch zu verhindern.

Grundsätzlich gibt es zwei Möglichkeiten, dies zu tun:

  1. Führen Sie Ihr Java mit erhöhten Rechten aus und nehmen Sie die benötigten Rechte sorgfältig entgegen und geben Sie sie zurück (siehe setuid () seteuid () C-Funktionsaufrufe).
  2. Führen Sie ein externes Programm aus, um bei Bedarf erhöhte Berechtigungen zu erhalten

Im Fall von # 1 führt Ihr Java-Programm selbst aus, was sudo tut, und Sie sollten Ihre eigenen Regeln implementieren, um sich vor Missbrauch zu schützen.

Es gibt andere Programme als sudo, um # 2 zu tun. Ein Beispiel finden Sie unter https://code.google.com/archive/p/exec-wrapper/downloads

Dieses praktische Shell-Skript erstellt ein C-Programm zum Ausführen eines anderen Befehls (normalerweise eines Skripts). Dann kompilieren Sie das C-Programm in eine Binärdatei und markieren das setuid-Stammverzeichnis, oder es kann wirklich für jeden Benutzer gesetzt werden. (Modus: 4555 und Besitzer: root)

Solange Sie sich in einem Dateisystem befinden, das dies zulässt, führt das Ausführen des Binärprogramms den konfigurierten Befehl als Benutzer-ID aus, die das Binärprogramm selbst besitzt.

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.