sudo: Account expired or PAM config lacks an „account“ section for sudo

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.confauth.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!