PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ldap abfrage und homeverzeichnisse löschen



frosch007
09-11-2007, 13:40
hallo

ich habe folgendes problem vor mir liegen:

die benutzerverwaltung läuft über ldap. scheiden mitarbeiter aus dem unternehmen aus habe diese immer noch ein home verzeichniss. jetzt würde ich gerne diese homeverzeichnisse löschen. ich habe mir das so vorgestellt, dass wenn ein user bei der ausgabe von "getent passwd" nicht mehr auftaucht bzw im 5. GECOS-Feld ein "DEL=..." steht das homeverzeichniss gelöscht wird.

wie kann ich das am besten mit einem script umsetzen?

danke

jan61
09-11-2007, 20:27
Moin,

wenn der Eintrag nicht mehr existiert, dann hast Du (abh. von Eurer Konfiguration) ein kleines bis großes Problem: Wo war das HOME-Verzeichnis des Users? Habt Ihr feste Pfade (z. B. /home/User), dann geht es noch:
getent passwd $USER
test $? -eq 2 && rm -rf /home/$USERWenn die HOME-Verzeichnisse variable Pfade haben, dann musst Du Dir wohl so helfen, dass Du z. B. eine allgemein vorhandene Datei suchst, die jeder User im HOME hat (z. B. .profile) - Du hast dann nämlich das Problem, dass Du auch seine User-ID nicht mehr kennst (sonst könntest Du mit find -user $USER_ID ... danach suchen):
getent passwd $USER
if test $? -eq 2; then
find / -type f -name .profile -print | while read f; do
test `basename \`dirname $f\`` = $USER && rm -rf `dirname $f`
done
fiDamit suchst Du alle .profile-Dateien und guckst nach, ob der Verzeichnisname gleich dem Usernamen ist.

Einfacher ist die 2. Variante ("DEL=..." im gecos-Feld):

gecos_home="`getent passwd $USER | cut -f5,6 -d:`"
test "`echo $gecos_home | cut -f1 -d=`" = "DEL" && rm -rf `echo "$gecos_home" | cut -f2 -d:`Wenn Du nicht weisst, welche User überhaupt gelöscht wurden, dann wird es noch lustiger. Dann musst Du z. B. alle .profiles suchen, die keinem User mehr zugeordnet sind:
find / -name .profile -type f -nouser -print | while read f; do...Auch hier hilft es natürlich, wenn die HOME-Verzeichnisse unter bekannten Pfaden zu erreichen sind. In der 2. Variante geht es dann einfach über alle User:
getent passwd | cut -f5,6 -d: | while read gecos_home; do ...Vorsicht: Alle Beispiele ungetestet! ICH will nämlich keine User bei mir löschen.;)

Noch ein Rat zur Vorsicht: Es gibt meist Verzeichnisse, in denen User Dateien ablegen und die nicht ihre HOME-Verzeichnisse sind. Wenn der User gelöscht ist (und nicht mehr per getent passwd zu finden ist), dann steckt da ein gewisses Risiko drin: Wenn ein böswilliger User (oder Trottel, der mal eben sein HOME irgendwo in zentrale Verzeichnisse gesichert hat) darin eine .profile anlegt, dann suche bei Variante 1 am besten schnell ein Backup raus ;-)

HTH
Jan