su-Zugriff auf bestimmte Benutzer beschränken

Mittels su können normale Benutzer root-Rechte erhalten, wenn sie das root-Passwort kennen. Nachdem bereits ein root-Login per SSH deaktiviert wurde, ist eine weitere Sicherheitsmaßnahme, ein su nur für bestimmte Benutzer zu erlauben. Alle anderen Benutzer können su nicht benutzen (selbst wenn sie das korrekte root-Passwort kennen).

Diese Maßnahme führt nicht prinzipiell zu mehr Sicherheit, sondern ist als zusätzliche line of defense gedacht. Angenommen, ein Angreifer erhält über eine fahrlässig programmierte Webanwendung shell-Zugriff unter der User-ID eines Webkunden, hat er trotzdem keine Möglichkeit, dass root-Passwort zu erraten und für ein su zu benutzen, weil der Webkunde keine su-Berechtigung hat. Natürlich bietet ein Shell-Zugang für einen Angreifer immer noch genügend Möglichkeiten (lokal ausnutzbare Sicherheitslücken im Linux-Kernel), aber immerhin ist ein einfacher Weg dem Angreifer verwehrt.

Ich habe folgenden Weg gewählt:

Es gibt eine spezielle Gruppe admins, in die alle Benutzer aufgenommen werden, die su benutzen können sollen (Anlegen der Gruppe mit "groupadd admins", Hinzufügen von Benutzern mit "usermod -G admins <benutzername>").

Anschließend muss die Datei /etc/pam.d/su um die beiden folgenden Zeilen erweitert werden:

auth       sufficient   /lib/security/$ISA/pam_stack.so service=su-admins
auth       required     /lib/security/$ISA/pam_deny.so

Bei mir sieht sie dann etwa so aus:

#%PAM-1.0
auth       sufficient   /lib/security/$ISA/pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth       sufficient   /lib/security/$ISA/pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth       required     /lib/security/$ISA/pam_wheel.so use_uid
auth       required     /lib/security/$ISA/pam_stack.so service=system-auth
auth       sufficient   /lib/security/$ISA/pam_stack.so service=su-admins
auth       required     /lib/security/$ISA/pam_deny.so
(...)

Anschließend wird die Datei /etc/pam.d/su-admins angelegt (Dateirechte 0600!), die nur die folgende Zeile beinhaltet:

auth       sufficient     /lib/security/pam_wheel.so group=admins trust

Jetzt dürfte kein Benutzer, der nicht in der Gruppe admins eingetragen ist, mehr in der Lage sein, mittels su root-Rechte zu bekommen.

Hinweis: Bei dieser Konfiguration hat mir Securing Linux Production Systems - A Practical Guide to Basic Security in Linux Production Environments von Werner Puschitz sehr geholfen.