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 ?
requiretty
standardmäßig aktiviert. Lautsudo
eigener Dokumentation ist es "standardmäßig deaktiviert".Antworten:
Ich weiß nicht, wie man Shell-Befehle in Java ausführt, aber schauen Sie sich die Option -t für den Befehl ssh an
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)
quelle
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:
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:
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.
quelle