2009-07-15 8 views
2

Benutzer greifen über SSH remote auf *** nix-basierte Maschinen zu und müssen den schnellsten Weg ermitteln, um zu überprüfen, ob der Benutzername, den sie gerade verwenden, NOPASSWD-Zugriff hat in der Datei/etc/sudoers.Schnellste Möglichkeit zum Ermitteln von Benutzerberechtigungen in/etc/sudoer

Mögliche Optionen:

  • grep für den Benutzernamen in/etc/sudoers, analysieren Eingabeaufforderung ausgegeben, um zu bestimmen, ob es NOPASSWD hat, wenn nicht, entfernen Sie die Zeile dann fügen Sie die neuen Berechtigungen
  • einfach anhängen eine Berechtigungszeichenfolge für die Datei unabhängig (schlechte Idee).
  • Versuch, in eine geschützte Datei zu sudo und sehen, ob es mich für ein Passwort auffordert.

Ich hoffe auf etwas einfacheres, aber mein Google-Fu hat keine Antworten gefunden.

+0

Gehört zu Serverfault. –

+0

Ich hätte es auf "Super User" gestellt, bin aber momentan nicht in der Beta. Nicht sicher, ob dies sogar mehr auf Serverfehler als hier bezieht; passt nicht wirklich irgendwo ... – ahawker

+1

@Hawker: Super User ist in 'semi-private Beta'. Sie können ohne Probleme Zugang bekommen. Schau hier: http: // Blog.stackoverflow.com/2009/07/super-user-semi-private-beta-begins/ – Stephan202

Antwort

4

Wenn sudo -v erfolgreich ist, wurde der Benutzer autorisiert, sudo zu verwenden; Schlägt dies fehl, wurde der Benutzer nicht zur Verwendung von sudo berechtigt.

 
# su user -c 'setsid sudo -v </dev/null'; echo $? 
[sudo] password for user: 
1 
# su root -c 'setsid sudo -v </dev/null'; echo $? 
0 

Ohne setsid, sudo werden versuchen, das Passwort zu fragen, interaktiv selbst wenn stdin/stdout/stderr haben alle umgeleitet worden. Wenn Sie kein kontrollierendes Terminal haben, wird dies nicht benötigt, aber Sie werden wahrscheinlich etwas anderes als su benötigen, um Benutzerrechte zu ändern, wie fork + setreuid.

+0

+1 immer neue elegante Tricks zu lernen. – neuro

+0

danke, wusste nicht über: sudo -v – neoneye

1

Wenn Sie tatsächlich "die schnellste Weise" brauchen, schätze ich, dass Sie einen Webserver erstellen, der viele gleichzeitige Anforderungen behandeln würde.

Dies wirft ein weiteres Problem auf - das Nebenläufigkeitsproblem. Im Allgemeinen ist das Lesen und Schreiben von Prozessen in derselben wichtigen Datei ein Rezept für eine Katastrophe.

Erstellen Sie einen kleinen unabhängigen Prozess, um die Aufgabe zu bearbeiten. Es sollte eine minimale Schnittstelle haben, die Anfragen von den Clients und Updates für die Datei /etc/sudoer empfängt. Etwas wie has_NOPASSWD_access() und set_NOPASSWD_access(). Es sollte die Datei nur lesen, wenn sie geschrieben werden muss, sodass Sie die für die Ausführung einer Anfrage erforderliche E/A-Zeit erheblich reduzieren können.

Pros -

  • Schnell: keine E/A benötigt für nur die Datei zu lesen, weil es in dem Puffer gespeichert wird, da die anfängliche
  • Thema sicher lesen: Nur ein Server schreibt und liest die sudoer Datei
  • Single choice principle - nur dieser Prozess übernimmt die sudoer Datei
  • elegant (hoffe ich) :-)

Cons - - Listen Sie sie in den Kommentaren, und ich werde hinzufügen.

+0

+1 Nicht wirklich beantworten, aber guter Punkt – neuro

Verwandte Themen