Wie starte ich eine Anwendung mit sudo ohne Passwort?

40

... aber dennoch für Anwendungen benötigt werden, die Administratorrechte benötigen?

Um Folgendes zu ermöglichen:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

Als Referenz habe ich dieses Setup auf Amazon e3-Instanzen gesehen

Irgendeine Idee?

tutuca
quelle
Dies ist ein großartiges Tutorial in den Foren, in dem das Erstellen einer separaten Datei zum Angeben von häufig verwendeten Programmen beschrieben wird. Und ist aus Sicherheitsgründen eine gute Idee.
Todd Partridge "Gen2ly"

Antworten:

51

Sie müssen die sudoers-Datei bearbeiten. Seien Sie darauf hingewiesen, dass der Erfolg Ihnen ein weniger sicheres System gibt und ein Fehlschlagen sudo zum Erliegen bringen kann. Bearbeiten Sie die sudoers-Datei IMMER mit sudo visudo, da visudo nach Fehlern sucht und die Datei nicht speichert, falls welche gefunden werden.

Es ist eine schlechte Idee, allen Benutzern die Erlaubnis zu geben, als root ohne Passwort zu laufen. Fügen Sie Folgendes ganz unten in die Datei ein:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

Wenn Sie möchten, können Sie den Pfad zu einer ausführbaren Datei durch "ALL" ersetzen, um ein vollständiges Sudo ohne Kennwort zu erhalten.

Ersetzen Sie YOURNAME durch Ihren Benutzernamen und drücken Sie Ctrl+ X, um zu speichern und zu beenden . Wenn ein Fehler aufgetreten ist, wird das Zurücksetzen, Bearbeiten oder Speichern trotzdem angeboten.

Stellen Sie sicher, dass Sie den vollständigen Pfad zu einer ausführbaren Datei verwenden:
dh. /usr/bin/apache2ctlstatt nur apache2ctl. Dies ist wichtig, da jedes Programm mit dem Namen apachectl auf dem aktuellen Pfad des Benutzers als root ausgeführt werden kann, ohne den Pfad sudo explizit anzugeben.

Mark Paskal
quelle
3
Beachten Sie, %YOURNAMEdass die Berechtigung für die Gruppe erteilt wird, die wie Ihr Benutzer benannt ist. Dies ist normalerweise kein Problem, da jeder normale Benutzer auf Ubuntu-Systemen über eine gleichnamige Gruppe verfügt. Geben Sie YOURNAMEohne% an , um Ihrem Benutzer die Berechtigung zu erteilen .
Daniel Werner
Gibt es einen Weg, restrukturierter zu werden? (Einige Funktionen nur für ausführbare Dateien)
3pic
1
Alte Post, aber ich würde auf jeden Fall vervollständigt die Antwort durch den Eintrag (falls möglich) zu einem bestimmten Hostnamen sudoers zu beschränken, und entweder auf bestimmte Argumente o kein Argument überhaupt (nach apache2ctl), etwa so: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">. --- In allen Fällen man 5 sudoersist der Verweis zu gehen.
Cbhihe
25

Die eigentliche Antwort auf diese Frage kann kompliziert sein, da sudo sehr mächtig ist und so konfiguriert werden kann, dass es coole Dinge macht. Dies wird in der Dokumentation ausführlich erläutert .

Die kurze Antwort wird sudo visudoin einem Terminal ausgeführt. Wenn Sie visudo zum ersten Mal ausführen, werden Sie gefragt, welchen Editor Sie bevorzugen. Es wird allgemein angenommen, dass Nano am einfachsten zu bedienen ist. Wählen Sie jedoch den Editor aus, mit dem Sie am besten vertraut sind. Sie müssen entscheiden, auf wen Sie Zugriff gewähren möchten. Es kann ALLfür jeden (eine sehr schlechte Idee) , einen Benutzer oder eine Systemgruppe sein. Gruppen wird ein% -Zeichen vorangestellt. Wenn Sie beispielsweise jedem steroid_usersBenutzer in der Gruppe root-Berechtigungen erteilen möchten, ohne dass für alle hinzugefügten Befehle ein Kennwort erforderlich ist:

%steroid_users ALL=(ALL) NOPASSWD: ALL

Beenden Sie die Datei und speichern Sie sie. Wenn alles gut geht und Sie Mitglied der Gruppe steroid_users sind, können Sie sudo *some-command*ohne Eingabe Ihres Kennworts eine Ausgabe durchführen .

Denken Sie daran, dass jeder, der Zugriff auf Ihr Terminal hat, während Sie angemeldet sind - oder wenn Sie ssh für die schlüsselbasierte Authentifizierung eingerichtet haben oder (noch schlimmer) passwortfreie Sitzungsanmeldungen aktiviert haben - vollständigen und uneingeschränkten Zugriff auf Ihr gesamtes Terminal System. Wenn Sie mehrere Benutzer auf Ihrem System haben oder wenn dies ein Dateiserver ist, können alle Benutzerdateien gefährdet sein, da root alles tun kann!

Wenn Sie einen Fehler machen, gibt visudo eine Fehlermeldung aus und speichert keine Änderungen an der Datei. Dies wird dazu beitragen, Sudo nicht vollständig zu beschädigen. Sie sollten die Dokumentation wirklich lesen . Sudo ist so konzipiert, dass Benutzer nur so viel Zugriff haben, dass sie ihre Arbeit erledigen können, ohne dass das gesamte System verfügbar gemacht werden muss. Es kann vorteilhaft sein, nur für bestimmte Befehle einen kennwortfreien Zugriff zu gewähren.

Ich hoffe das hilft.

Chris
quelle
Das hat funktioniert, ich habe dies genommen und dann "sudo service sudo restart " von askubuntu.com/questions/192050/… verwendet und ich konnte all dies in meiner aktiven Ubuntu-Sitzung verwenden. Genial!
Patrick
5

Sie müssen die Datei '/ etc / sudoers' bearbeiten (dazu gibt es den Befehl 'visudo'.), Um NOPASSWD hinzuzufügen, bevor Sie die Liste der zulässigen Befehle für Ihren Benutzer oder Ihre Gruppe anzeigen. Wenn sich Ihr Benutzer in der Gruppe "admin" befindet, müssen Sie Folgendes tun:

%admin ALL=(ALL) NOPASSWD: ALL

Überprüfen Sie https://help.ubuntu.com/community/Sudoers , btw.

korjjj
quelle
3

Sie KÖNNTEN das Flag nopasswd zur Benutzerliste hinzufügen, aber dies entfernt nicht alle Fragen zu Kennwörtern. Nur der erste wird gefragt.

  1. Sudo bearbeiten: sudo visudo(Sie MÜSSEN Sudo verwenden. Dies ist eine Admin-Datei.)
  2. Fügen Sie Ihren Benutzer mit dem Flag nopasswd nach der Admin-Zeile (am Ende) hinzu. Zum Beispiel:
    cyrex ALL = NOPASSWD: ALLodercyrex ALL = (ALL) NOPASSWD: ALL
Luis Alvarado
quelle
2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

oder

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

Ich denke, das würde es tun.

Aber seien Sie vorsichtig beim Entfernen von Passwörtern für sudo.

Alex
quelle
2
Sie sollten aus Sicherheitsgründen den absoluten Pfad im ersten Beispiel angeben - ein skrupelloser Benutzer könnte $ PATH ändern und den Root-Zugriff mit einem nicht qualifizierten Befehlsnamen stehlen.
bgvaughan
0

Nun zur einfachen Antwort! Keine Möglichkeit, irgendetwas durcheinander zu bringen oder Ihre Installation durcheinander zu bringen.

Geben Sie einfach ein paar Mal Ihr Passwort ein und Sie müssen es nie wieder eingeben! Auf diese Weise können Sie der Gruppe "root" ein lokales Administratorkonto hinzufügen, das in einer Vorlage, die die Superuser-Berechtigungen der gesamten Gruppe "root" zulässt, nicht kommentiert wird. Sie können meine Sicherheitsbedenken / -lösung für dieses Verfahren im späteren Teil dieses Beitrags lesen.

% username & ist die globale Variable für Ihren Benutzernamen (ersetzen Sie sie durch den gewünschten Benutzernamen)

Schritt 1: Öffnen Sie ein Terminalfenster und geben Sie " sudo usermod -a -G root %username%" ein

Schritt 2: Dann kopieren / einfügen ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

Schritt 2 ODER Typ

sudo nano /etc/pam.d/su`

Gehe zu Zeile 19 und entferne das "#" davor # auth sufficient pam_wheel.so trust(kann bei manchen eine andere Zeilennummer sein)

* Mit dem ersten Befehl wird% username% zur Gruppe "root" hinzugefügt.

Der zweite / dritte Befehl ermöglicht es allen Mitgliedern der Gruppe "root", Superuser ohne Passwort zu sein, statt nur dem Benutzer "root" su-Berechtigungen für Authentifizierungen zu gewähren.


Endnote:

Spielen Sie nicht herum /etc/sudoers... Es gibt eine Menge Checks / Balances, die die 'su'-Authentifizierung durchlaufen muss. Die Superuser-Authentifizierung verwendet das gleiche Verfahren wie alle anderen Anmeldungsauthentifizierungen. "/etc/security/access.conf" enthält das Layout für die Zugriffskontrolle über TCP / IP (192.168.0.1) und über Telnet-Dienste (tty1 & tty2 & tty3 ... etc). Dies ermöglicht eine genauere Filterung pro Anwendung über das Transportprotokoll. Wenn Sicherheit Ihr Anliegen ist, sollte Ihr Anliegen auf Bedrohungen durch Fernzugriff / Code gerichtet sein, im Gegensatz dazu, dass jemand Ihren Computer berührt, wenn Sie den Raum verlassen !!!

Essen für Paranoia (schreibe dieses nicht einfach in die Rezension):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ Dies blockiert den Zugriff auf die Konsole für alle Benutzer, die nicht Mitglied des Systems oder von root sind. Manchmal installieren Programme Benutzernamen / Gruppen, die ausgenutzt werden!

Nathaniel F. Malm
quelle
2
Kein Sicherheitsexperte, aber es klingt etwas kontraproduktiv. Sie deaktivieren Kennwörter für eine ganze Gruppe , damit ein einzelner Benutzer eine bestimmte App ohne Kennwort ausführen kann , um die "Komplexität" der Optimierung von sudo für eine bestimmte Anwendung zu vermeiden, oder? Und das alles auf einem öffentlichen Server? Hat das Skript Ihre grundlegenden Überlebensinstinkte deaktiviert? Sicherheit ist DESIGNKOMPLEX. Denken Sie daran, es ist wie eine Zwiebel. Es hat Schichten und es bringt Sie zum Weinen ... Datenverlust auf kompromittierten Servern ist nur ein Teil der Gleichung. Ein Hacker Spring-Boarding-Angriffe von Ihrem System ist ebenso schwerwiegend, aber oft übersehen
hmayag
2
Es ist nicht intuitiv und widerspricht dem gesunden Menschenverstand: Das Öffnen der gesamten Keksdose für einen Benutzer, der nur einen Keks benötigt, ist ziemlich verantwortungslos. Sie würden der sudoers-Liste Benutzer hinzufügen und die Eingabe von Kennwörtern vermeiden, anstatt die sudoers-Datei (en) zu bearbeiten. "Wenn eine Pistole für Kinder unsicher ist, geben Sie ihnen keinen Kanon." -me
John