Fehlerbehebung und FAQ für Sudo

Übersetzung von http://www.sudo.ws/sudo/troubleshooting.html

F) Wenn ich die Konfiguration laufen lassen, sagt es „compiler cannot create executables“ [Compiler kann keine Executables erzeugen]
A) Dies bedeutet üblicherweise, dass du keinen funktionierenden Compiler hast. Könnte an einer fehlenden Lizenz liegen, oder dass eine Komponente der Compilersuite nicht gefunden wurde. Checke config.log für Hinweise, warum dies passiert. Bei vielen Systemen befinden sich die Compiler-Komponenten in /usr/ccs/bin, was sich vielleicht nicht in deiner Pfadumgebungsvariablen befindet.

F) Wenn ich die Konfiguration laufen lasse, sagt es „sudo requires the ‘ar’ utility to build”. [Sudo braucht die „ar“-Utility, um sich aufzubauen]
A) Als Teil des Aufbauprozesses kreiert Sudo eine temporäre Library, die Objekte beinhaltet, welche unter den verschiedenen Sudo-Executables geteilt werden. Auf Unix-Systemen wird die „ar“-Utility dafür benutzt. Dieser Fehler bedeutet, dass „ar“ in deinem System fehlt. Bei Solaris-Systemen musst du unter Umständen das SUNWbtool-Package installieren. Auf anderen Systemen kann „ar“ im GNU-Binutils-Paket enthalten sein.

F) Sudo kompiliert zwar, aber wenn ich es laufen lasse, bekomme ich die Nachricht „Sorry, sudo must be setuid root.” [Sorry, Sudo muss Setuid-Root sein] und Sudo schließt sich.
A) Sudo muss Setuid-Root sein, um arbeiten zu können. Du musst etwas tun wie `chmod 4111 /usr/local/bin/sudo’. Auch darf das Dateiensystem, in dem Sudo sich befindet, nicht mit der Nosuid-Option verbunden sein (oder exportiert werden), anderenfalls kann Sudo nicht arbeiten. Eine andere Möglichkeit ist, dass du ‘.’ in deinem $PATH hast, vor der Directory, in der sich Sudo befindet. Wenn du ‘.’ in deinem Pfad haben wirst, gehe sicher, dass es sich am Ende befindet.

F) Sudo gibt mir nie die Chance, ein Passwort mit PAM einzugeben, es sagt einfach dreimal „Sorry, try again“ [Sorry, versuchs nochmal] und schließt sich.
A) Du hast an PAM kein Setup durchgeführt, damit es mit Sudo arbeitet. Auf Redhat Linux oder Fedora Core bedeutete dies üblicherweise, sample.pam als /etc/pam.d/sudo zu installieren. Um zu erfahren, was du für andere Linux-Systeme benutzen musst, sieh dir die sample.pam-Datei an.

F) Sudo sagt ‘Account expired or PAM config lacks an “account” section for sudo, contact your system administrator’ [Account abgelaufen oder der PAM-Config fehlt eine „Account“-Sektion für Sudo, kontaktiere deinen Systemadministrator]  und schließt sich, aber ich weiß, dass mein Account nicht abgelaufen ist.
A) Deinem PAM fehlt eine „Account“-Spezifizierung. Auf Linux benötigte dieser Account: pam_unix.so in /etc/pam.d/sudo.

F) Sudo ist so eingerichtete, das es über syslog(3) loggt, aber ich kriege keine Lognachrichten.
A) Gehe sicher, dass du einen Eintrag in deiner syslog.conf-Datei hast, die Sudo-Nachrichten zu speichern (siehe die sample.syslog.conf-Datei). Die Default-Log-Facility ist authpriv (änderbar durch Konfiguration oder in sudoers). Vergiss nicht, ein SIGHUP an dein syslogd zu senden, damit es seine conf-Datei nochmal liest. Beachte auch, dass syslogd keine Logfiles erstellt – du musst die Datei erstellen, bevor syslogd darin loggen wird (zB: touch /var/log/sudo).

Beachte: Die Facility (zB “auth.debug”) muss von der Destination (zB “/var/log/auth” or “@loghost”) durch Tabs getrennt werden, nicht durch Space. Dies ist ein weitverbreiteter Fehler.

F) Wenn Sudo nach meinem Passwort fragt, akzeptiert es nie, was ich eingebe, obwohl ich ganz genau weiß, dass ich mein Passwort korrekt eingetippt habe.
A) Wenn dein System „Shadow-Passwörter“ benutzt, ist es möglich, dass Sudo dies nicht entdeckt hat. Schau dir die generierte config-h-Datei an und gehe sicher, dass die C-Funktion, die für die Suche nach Shadow-Passwords benutzt wird, auch erkannt wurde. Beispielsweise sollte für SVR4-Style-Shadow-Passwords  HAVE_GETSPNAM definiert sein (du kannst nach dem String „shadow password“ in config.h mit deinem Editor suchen). Beachte, dass es keine Definierung für 4.4BSD-basierte Shadow-Passwörter gibt, da dieses einfach die standardmäßige getpw*-Routine benutzt.

F) Ich will die Sudoers-Datei nicht in /etc haben, wo kann ich spezifizieren, wohin sie gehen soll?
A) Benutze die –sysconfdir-Option, um dies zu konfigurieren. Beispiel:

configure –sysconfdir=/dir/you/want/sudoers/in

F) Kann ich die sudoers-Datei in NIS/NIS* packen, oder brauche ich auf jedem eine eigene Kopie?

A) Derzeit gibt es keine Unterstützung, um eine NIS/NIS+-Map/Tabelle aus der sudoers-Datei herzustellen. Ein guter Weg, diese Datei zu verteilen, ist über rdist(1). Es ist auch möglich, die sudoers-File an NFS zu koppeln.

F) Ich habe kein sendmail auf meinem Rechner. Heißt das, dass ich Sudo nicht benutzen kann?

A) Nein, du musst nur das –without-sendmail-Argument laufen lassen, um dies zu konfigurieren, oder füge “!mailerpath” zur Defaults-Line in /etc/sudoers hinzu.

F) Wenn ich visudo benutze, benutzt es vi als Editor und ich hasse vi. Wie bringe ich es dazu, einen anderen Editor zu benutzen?

A) Deine beste Chance besteht darin, dies mit dem –with-env-editor-Schalter zu konfigurieren. Dies bringt visudo dazu, den Editor zu benutzen, der von der EDITOR-Umgebungsvariablen des Users spezifiziert ist. Alternativ kannst du auch mit –with-editor=/path/to/another/editor konfigurieren.

F) Es scheint, als ob Sudo einige Variablen aus meinem Environment entfernt, warum passiert das?

A) Sudo entfernt die folgenden „gefährlichen“ Umgebungsvariablen, um sich gegen Shared-Library-Spoofing, Shell-Voodoo und Kerberos-Server-Spotting zu schützen:

IFS

LOCALDOMAIN

RES_OPTIONS

HOSTALIASES

NLSPATH

PATH_LOCALE

TERMINFO

TERMINFO_DIRS

TERMPATH

TERMCAP

ENV

BASH_ENV

LC_ (wenn es ein ‘/’ oder ‘%’ beinhaltet)

LANG (wenn es ein ‘/’ oder ‘%’ beinhaltet)

LANGUAGE (wenn es ein ‘/’ oder ‘%’ beinhaltet)

LD_*

_RLD_*

SHLIB_PATH (nur HP-UX)

LIBPATH (nur AIX)

KRB_CONF (nur kerb4)

KRBCONFDIR (nur kerb4)

KRBTKFILE (nur kerb4)

KRB5_CONFIG (nur kerb5)

VAR_ACE (nur SecurID)

USR_ACE (nur SecurID)

DLC_ACE (nur SecurID)

F) Wie kann ich Sudo davon abhalten, nach einem Passwort zu fragen?

A) Um dies auf einer Per-User- (und Per-Command)-Basis zu spezifizieren, benutze den „NOPASSWD“-Tag direkt vor der Kommandozeile in sudoers. Um die Passwörter endgültig stillzulegen, lass die Konfiguration mit der –without-passwd-Option laufen oder füge „!authenticate“ zur Defaultzeile in /etc/sudoers hinzu. Du kannst die Athentifizierung auch auf einer Per-User- oder Per-Host-Basis ausschalten, indem du einen user- oder hostspezifischen Defaultseintrag in sudoers benutzt.

F) Wenn ich die Konfiguration laufen lasse, stirbt sie mit dem folgenden Fehler:

„no acceptable cc found in $PATH”. [In $PATH kein akzeptables cc gefunden]

A) /usr/ucb/cc war der einzige C-Compiler, den die Konfiguration finden konnte. Du musst ihr den Weg zum „echten“ C-Compiler über die –with-cc-Option erklären. Auf Solaris ist der Weg vermutlich ähnlich “/opt/SUNWspro/SC4.0/bin/cc”. Mit gcc wird dies auch funktionieren.

F) Wenn ich die Konfiguration laufen lasse, stirbt sie mit dem folgenden Fehler:

Fatal Error: config.cache exists from another platform!

Please remove it and re-run configure.

[Schwerer Fehler:  config.cache existiert auf einer anderen Plattform!

Bitte entferne sie und lass die Konfiguration nochmal laufen]

A) Die Konfiguration fängt die Resultate ihrer Prüfungen in einer Datei, welche sich config.cache nennt, um das erneute Konfigurieren zu beschleunigen. Wenn du jedoch Sudo für eine andere Plattform baust, sind die Resultate in config.cache falsch, weswegen du config.cache entfernen musst. Beachte, dass „make realclean“ auch alle anderen Objektdateien entfernen wird, ebenso wie herumliegende Configure-Temp-Files.

F) Ich habe Sudo auf einem Solaris >= 2.6-Rechner aufgebaut, aber das resultierende Binärprogramm arbeitet nicht auf Solaris <= 2.5.1. Warum?

A) Um mit Solaris 2.6 zu starten, dort ist snprintf(3) in der standardmäßigen C-Library beinhaltet.  Um eine Version von Sudo auf einem >= 2.6-Rechner zu entwickeln, die auf einem <= 2.5.1-Rechner laufen wird, editiere config.h und kommentiere diese Zeilen aus:

#define HAVE_SNPRINTF 1

#define HAVE_VSNPRINTF 1

und führe den Befehl „make“ aus.

F) Wenn ich „Visudo“ ausführe, sagt es „sudoers file busy, try again later“ [Sudoers-Datei beschäftigt, versuchs später nochmal], und tut überhaupt nichts.

A) Jemand anderes editiert die sudoers-Datei gerade mit Visudo.

F) Wenn ich versuche, „cd“ mit Sudo zu benutzen, sagt es “cd: command not found” [cd: Befehl nicht gefunden].

A) „cd“ ist ein eingebautes Shellkommando, du kannst es nicht anwenden, da ein Child-Prozess (Sudo) nicht die derzeitig arbeitende Directory des Parent-Prozesses (dein Shell) beeinflussen kann.

F) Wenn ich versuche, „cd“ mit Sudo zu benutzen, endet der Befehl ohne Fehler, aber nichts passiert.

A) Obgleich „cd“ ein eingebautes Shellkommando ist, beinhalten einige Operationssysteme einen /usr/bin/cd-Befehl. Ein einsamer „cd“-Befehl ist total nutzlos, da ein Child-Prozess (cd) nicht die derzeitig arbeitende Directory des Parent-Prozesses (dein Shell) beeinflussen kann. Daher startet “sudo cd /foo” einen Child-Prozess, ändert die Directory und beendet sich sofort, ohne irgendetwas Sinnvolles zu bewirken.

F) Wenn ich Sudo ausführe, sagt es mir, ich sei nicht berechtigt, den Befehl als root auszuführen, aber das will ich auch gar nicht. Ich will es als ein anderer User ausführen.

Meine sudoers-Datei sieht so aus:

bob ALL=(oracle) ALL

A) Der Sudo-Defaultuser versucht, die Dinge immer als root auszuführen, auch wenn der aufrufende User Befehle nur als einzelner, spezifischer Nutzer ausführen kann. Dies mag sich in der Zukunft ändern, doch zum derzeitigen Punkt musst du drumherum arbeiten, indem du die ‘runas_default’-Option in sudoers benutzt.

Beispielsweise würde:

Defaults:bob        runas_default=oracle

das gewünschte Resultat aus dem vorhergehenden sudoers-Fragment erbringen.

F) Wenn ich versuche, Sudo via ssh auszuführen, bekomme ich den Fehler:

sudo: no tty present and no askpass program specified [Sudo: kein tty anwesend und kein Passwortfrageprogramm spezifiziert]

A) ssh belegt ein tty nicht per Standardwert, wenn es einen Remote-Befehl ausführt. Ohne tty kann Sudo kein Echo ausschalten, wenn es nach einem Passwort fragt. Die kannst die „-t“-Option in ssh benutzen, um zu zwingen, ein tty zu belegen. Alternativ, wenn du nichts dagegen hast, dass dein Passwort auf dem Bildschirm angezeigt wird, kannst du die „visiblepw“-Option in sudoers benutzen, um dies zu erlauben.

F) Wie spricht man „sudo“ eigentlich aus?

A) Die offizielle Aussprache ist Suh-duh. Nichtsdestotrotz ist auch „Su-doh“ als alternative Aussprachemöglichkeit gebräuchlich.

Comments are closed.