Nach dem Update von einer alten sudo-Version (z.B.: 1.8.6p2) auf eine neuere Version (z.B.: 1.9.15p5) kommt es bei Verwendung von sudo häufig zu dem folgenden Fehler:
aix01 $ sudo -l sudo: Account expired or PAM config lacks an "account" section for sudo, contact your system administrator sudo: a password is required aix01 $
Die Meldung gibt den Fehler auch gleich an: ein PAM-Eintrag für sudo fehlt. Bei älteren sudo-Versionen war dieser nicht erforderlich. Um das Problem zu Vermeiden, sollten die folgenden 4 Einträge z.B. an das Ende von /etc/pam.conf hinzugefügt werden:
aix01 # vi /etc/pam.conf ... sudo auth required pam_aix sudo account required pam_aix sudo password required pam_aix sudo session required pam_aix aix01 #
Hinweis: Die Einträge können nicht mit Hilfe von sudo hinzugefügt werden, da sudo nicht funktioniert.
Nach Hinzufügen der Einträge scheint sudo wieder zu funktionieren. Auflisten von erlaubten Kommandos liefert die erwartete Ausgabe:
aix01 $ sudo -l Matching Defaults entries for user01 on aix01: ... User user01 may run the following commands on aix01: (ALL) NOPASSWD: /usr/sbin/*fs, /usr/sbin/*dev, /usr/sbin/ls*, /usr/sbin/*lv, /usr/sbin/*lvcopy, /usr/sbin/*pv, /usr/sbin/*vg, /usr/sbin/ifconfig, /usr/bin/startsrc, /usr/bin/stopsrc … $
Auch das Ausführen von Kommandos mittels sudo scheint wieder zu funktionieren:
aix01 $ sudo errpt IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION AA8AB241 1117100725 T O OPERATOR OPERATOR NOTIFICATION AA8AB241 1117100125 T O OPERATOR OPERATOR NOTIFICATION … aix01 $
Wird aber die Option „-i“ oder „–login“ von sudo verwendet, wird erneut nur eine Fehlermeldung ausgegeben:
aix01 $ sudo -i id sudo: Account expired or PAM config lacks an "account" section for sudo, contact your system administrator sudo: a password is required aix01 $
Bei Aufruf mit der Option “-i“ (oder „–login“) wird nicht mehr „sudo“ als Dienstname verwendet, sondern „sudo-i“. Ist der Dienst „sudo-i“ nicht in /etc/pam.conf konfiguriert, bricht sudo mit der Fehlermeldung oben ab. Leider haben die Entwicklier die Fehlermeldung von ganz oben wiederverwendet. Besser wäre es gewesen in der Meldung auch den Dienstnamen „sudo-i“ anzugeben. Dann wäre es ganz offensichtlich gewesen das Einträge für „sudo-i“ in der /etc/pam.conf fehlen. Wir fügen die notwendigen Einträge hinzu. Zusammen ergibt das dann die folgenden notwendigen Einträge für sudo:
aix01 $ sudo vi /etc/pam.conf ... sudo auth required pam_aix sudo account required pam_aix sudo password required pam_aix sudo session required pam_aix sudo-i auth required pam_aix sudo-i account required pam_aix sudo-i password required pam_aix sudo-i session required pam_aix aix01 $
Ein kurzer Test zeigt das Aufrufe mit der Option „-i“ (bzw. „–login“) jetzt funktionieren:
aix01 $ sudo -i id [YOU HAVE NEW MAIL] uid=0(root) gid=0(system) groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp) aix01 $
Herausfinden lässt sich dies relativ einfach über Aktivieren des PAM-Debuggings. Dazu müssen über den syslogd Debugging-Meldungen von auth mitprotokolliert werden. Wir verwenden dazu die Datei /var/log/auth.log:
aix01 $ sudo touch /var/log/auth.log aix01 $ sudo vi /etc/syslog.conf … auth.debug /var/log/auth.log aix01 $ sudo refresh -s syslogd 0513-095 The request for subsystem refresh was completed successfully. aix01 $
Durch Anlegen der Datei /etc/pam_debug kann das Versenden von Debug-Meldungen von PAM an den syslogd aktiviert werden:
aix01 $ sudo touch /etc/pam_debug aix01 $
Hier die Zeilen aus dem Log für den Aufruf von „sudo -l“ ohne sudo-Einträge in /etc/pam.conf:
Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_start(sudo user01) Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_set_item(1) Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_set_item(2) Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_set_item(5) Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_set_item(8) Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_set_item(3) Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_acct_mgmt() Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: load_modules: /usr/lib/security/pam_prohibit Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: load_function: successful load of pam_sm_acct_mgmt Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_acct_mgmt: error Permission denied Nov 17 15:01:11 aix01 auth|security:alert sudo: user01 : Account expired or PAM config lacks an "account" section for sudo, contact your system administrator ; TTY=pts/0 ; PWD=/home/user01 ; USER=root ; COMMAND=list Nov 17 15:01:11 aix01 auth|security:debug sudo PAM: pam_end(): status = User account has expired
In der ersten Zeile findet man den Namen des Dienstes im Aufruf pam_start. Ein paar Zeilen später wird das Modul pam_prohibit geladen (Eintrag OTHER aus /etc/pam.conf). Danach kommt die Fehlermeldung die von sudo angezeigt wird.
Für den Fall von „sudo -i“ sieht es ganz ähnlich aus:
Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_start(sudo-i user01) Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_set_item(1) Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_set_item(2) Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_set_item(5) Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_set_item(8) Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_set_item(3) Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_acct_mgmt() Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: load_modules: /usr/lib/security/pam_prohibit Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: load_function: successful load of pam_sm_acct_mgmt Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_acct_mgmt: error Permission denied Nov 17 15:11:12 aix01 auth|security:alert sudo: user01 : Account expired or PAM config lacks an "account" section for sudo, contact your system administrator ; TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=/usr/bin/ksh -c id Nov 17 15:11:12 aix01 auth|security:debug sudo PAM: pam_end(): status = User account has expired
Auch hier findet man im Aufruf von pam_start den Namen des Dienstes, dieses Mal „sudo-i“. Auch hier wird das Modul pam_prohibit geladen und der Fehler wird festgehalten.
Die Debugging-Meldungen von PAM zeigen also ziemlich eindeutig das die Einträge von „sudo“ bzw. „sudo-i“ in /etc/pam.conf fehlen.
Hinweis: Nach Abschluß des PAM-Debuggings sollte dies auch wieder deaktiviert werden!
