Bruk av reguser fra Cerebrum

Dette dokumentet kartlegger funksjonalitet knyttet til vedlikehold av hjemmeområder fra Cerebrum med bruk av reguser.

1   Oversikt

Ved endring av hjemmeområde-relaterte verdier i Cerebrum kjøres script fra pakken reguser for å utføre oppretting, flytting, arkivering og sletting av filområder.

Dette skjer gjennom ulike batch-script som prosesserer oppgaver som har blitt lagt i kø i BofhdRequest.

1.1   BofhdRequest

BofhdRequest er en Cererbum-modul for køing av oppgaver. For å legge en oppgave i kø, vil det lagres en oppgave i tabellen bofhd_requests med en gitt oppgavetype, bofhd_request_code.

Disse oppgavene prosesseres regelmessig med scriptet contrib/no/uio/process_bofhd_requests.py. Hver oppgavetype er mappet til en oppgave som er implementert i dette scriptet.

Denne funksjonaliteten er utviklet for å:

  1. Starte oppgaver gjennom bofhd som skal kjøre etter ett gitt tidspunkt.
  2. Starte kostbare oppgaver (som kan utsettes til et senere tidspunkt) gjennom bofhd.

1.1.1   Konflikter

Det kan til enhver tid kun finnes en én oppgave med en gitt oppgavetype for en entitet. Skal det lages nye oppgaver av samme type for en entitet, må eksisterende oppgaver fjernes/prosesseres først.

Det finnes i tillegg logikk for å markere konflikter – dette for å f.eks. forhindre at arkivering av hjemmeområde feiler fordi man også har utført en oppgave som flytter dette hjemmeområdet.

1.2   reguser

Oppgaver relatert til hjemmeområder benytter en programvarepakke som er utviklet in-house, reguser. Denne pakken inneholder et sett perl-scripts som utfører flytting og arkivering av hjemmeområder, epostområder, samt filområder for Notes.

Se egen dokumentasjon for reguser.

Reguser kan hentes fra git://git.uio.no:usit-reguser, og bør plasseres på cerebellum:/site/git/usit-reguser.

Oppgave-implementasjonen for arkivering av hjemmeområde benytter ssh til å logge inn på en jump-host som har denne pakken installert. Etter innlogging, kjøres scriptene fra pakken for å administrere ulike filområder.

1.2.1   Arkivering

Scriptet for å arkivere hjemmeområder sørger for arkivering/backup av hjemmeområder, samt sletting. Scriptet er ikke tilpasset slik at man har mulighet til å slette hjemmeområde uten å ta backup, eller ta backup av hjemmeområde uten å slette.

2   Oppgaver relatert til reguser

2.1   Arkivering

Det er to BofhdRequest-oppgaver som forårsaker arkivering: archive user og delete user. Begge oppgavene går under kategorien delete, og prosesseringsscriptet må kjøres med opsjonen -p|--process, og enten ingen -t|--type eller -t|--type delete for å kjøre disse.

Begge oppgavene vil forårsake kjøring av kommandoen:

/usr/bin/ssh <exec-user>@<exec-host> \
    sudo <rmscript> --username <username> --deleted-by <operator> \
                    --homedir <home --generation <gen>

med verdiene

rmscript

Verdi fra cereconf.RMUSER_SCRIPT, typisk delete_user (se reguser).

Verdi: /site/git/usit-reguser/delete_user

username
Brukeren som skal få hjemmeområde arkivert
operator
Brukeren som har initiert sletting/lag oppgaven i kø for BofhdRequest. Brukes ved logging fra arkiveringsscript.
home
Disk og katalog til hjemmeområdet som skal arkiveres.
gen
En teller (registrert på brukeren <username>) som indikerer hvor mange ganger brukeren har fått sitt hjemmeområde arkivert. Brukes for å indeksere arkiv.
mail-server
Brukt før overgang til Exchange, for arkivering av mailbox. Sendes ikke lenger med.

2.1.1   Archive user

Konstant
Constants.bofhd_archive_user
Implementasjon

Oppgaven er implementert i process_bofhd_requests.py/proc_archive_user(), og gjør minimalt vedlikehold på bruker:

  • Kjører arkivering av hjemmeområde
  • Inkrementerer generation-trait (backup/arkiv-teller).
  • Markerer hjemmeområde som arkivert
Request

Oppgaven vil legges i kø ved:

Manuell frigjøring av gjestebruker
Bofh-kommandoen user release_guest vil legge oppgaven archive user i kø for gjestebrukere.
Automatisk frigjøring av gjestebruker
Scriptet config/bin/uio/release_guests.py går gjennom gjestebrukere, og legger oppgaven archive user i kø for gjestebrukere som skal gjøres tilgjengelig. Scriptet gjøres regelmessig.
Manuell kjøring av gamle scripts

Scriptet hacks/uio/OLD/archive_guest_user.py legger oppgaven archive user i kø for angitt bruker. Ikke i bruk.

Scriptet uio/OLD/force_guest_release.py rydder i gamle gjestebrukere, og sørger for at disse blir gjort ledige – og kan legge oppgaven archive user i kø. Ikke i bruk, erstattet av script for automatisk frigjøring av gjestebrukere.

2.1.2   Delete user

Konstant
Cerebrum.modules.bofhd.utils.Constants.bofh_delete_user
Implementasjon

Oppgaven er implementert i process_bofhd_requests.py/proc_delete_user(), og gjør samme vedlikehold på bruker som archive user, samt:

  • Sender med epost-tjener til arkiveringsscript, slik at dette har mulighet til å arkivere mailbox (ikke brukt etter overgang til Exchange).
  • Oppdaterer/setter expire_date på bruker
  • Fjerner spreads på bruker
  • Sørger for at bruker har en default filgruppe som har samme navn som brukeren
  • Melder bruker ut av alle grupper (bortsett fra dfg)
Request

Oppgaven legges i kø ved:

Rutineavvikling av bruker
Scriptet deactivate_quarantined_accounts.py vil legge oppgaven delete user i kø for brukere som skal avvikles. Scriptet kjører regelmessig.
Manuell avvikling av bruker
Bofh-kommandoen user delete vil legge oppgaven delete user i kø for en bruker.
Manuell kjøring av gamle scripts
Scriptet hacks/uio/delete_inactive_users.py legger oppgaven delete user i kø for brukere med gammel auto_inaktiv-karantene. Ikke i bruk, erstattet med script for rutineavvikling av brukere.

2.1.3   Epost-arkivering

Det finnes også en egen oppgave for arkivering av Cyrus-postboks for bruker.

Oppgaven vil forårsake kjøring av kommandoen:

TODO
/usr/bin/ssh <exec-user>@<exec-host> \
    sudo <cyrusscript> <server> <username> <gen>

med verdiene

cyrusscript

Verdi fra cereconf.ARCHIVE_MAIL_SCRIPT.

Verdi: /site/cerebrum/reguser/bin/archivemail

server
Cyrus-tjener som har mailbox for brukeren.
username
Brukeren som skal få mailbox arkivert
gen
En teller (registrert på brukeren <username>) som indikerer hvor mange ganger brukeren har fått sitt hjemmeområde/mailbox arkivert. Brukes for å indeksere arkiv.
Konstant
Cerebrum.modules.bofhd.utils.Constants.bofh_email_delete
Implementasjon

Oppgaven er implementert i process_bofhd_requests.py/proc_email_delete(), og gjør:

  • Oppdaterer generation-trait
  • Kjører arkiveringsscript
  • Kobler opp mot cyrus-host som inneholder mailbox for brukeren og sletter mailbox-kataloger.
Request
Oppgaven legges i kø ved sletting av IMAP-spread på bruker.

2.2   Flytting

Det er tre BofhdRequest-oppgaver som forårsaker flytting: move user, move user now og move student.

Alle tre oppgavene går under kategorien move, og prosesseringsscriptet må kjøres med opsjonen -p|--process, og enten ingen -t|--type eller -t|--type move for å kjøre disse.

move user og move user now vil forårsake kjøring av kommandoen:

/usr/bin/ssh <exec-user>@<exec-host> \
    sudo <mvscript> <username> <uid> <gid> \
                    <old> <new> <spread> <mailto> <move_mail>

med verdiene

mvscript

Verdi fra cereconf.MVUSER_SCRIPT, typisk mvuser (se reguser).

Verdi: /site/cerebrum/reguser/bin/mvuser

username
Navn på brukeren som skal få hjemmeområde flyttet.
uid
UID for brukeren som skal flyttes.
gid
GID for brukeren sin filgruppe.
old
Disk og katalog for det nåværende hjemmeområdet til brukeren.
new
Disk og katalog som hjemmeområdet skal flyttes til.
spread
NIS-spreads som brukeren har.
mailto
Brukernavn for brukeren som setter i gang flytting.
move_mail
Hardkodet til 0.

2.3   Move user (now)

Konstanter
  • Cerebrum.modules.bofhd.utils.Constants.bofh_move_user
  • Cerebrum.modules.bofhd.utils.Constants.bofh_move_user_now
Implementasjon

Oppgavene er implementert i process_bofhd_requests.py/proc_move_user(), og gjør:

  • Kjører script for flytting av bruker
  • Oppdaterer hjemmeområde for bruker i Cerebrum
Request

Oppgaven legges i kø ved:

Studentautomatikk

Scriptet contrib/no/uio/process_students.py vil legge oppgaven move user i kø dersom tilknytning tilsier at studenten skal ligge på en ny disk.

TODO: Det er også en bofh_move_student-type, men denne forårsaker bare opprettelse av bofh_move_user?

Manuell flytting av bruker
Bofh-kommandoen user move vil legge oppgaven move user i kø for en bruker.

2.4   Move student

Konstanter
  • Cerebrum.modules.bofhd.utils.Constants.bofh_move_user
  • Cerebrum.modules.bofhd.utils.Constants.bofh_move_user_now
Implementasjon
Oppgaven er implementert i process_bofhd_requests.py/process_move_student_requests(), og oppretter nye move user-oppgaver basert på informasjon fra studentautomatikk.

3   Oppretting

Oppretting av hjemmeområder skjer ikke gjennom BofhdRequest, men gjennom et eget script, contrib/no/uio/process_changes.py.

Dette scriptet kjøret jevnlig og ser etter nye brukere. Dersom en ny bruker har blitt opprettet, vil scriptet forsøke å kjøre kommandoen:

/usr/bin/ssh <exec-user>@<exec-host> \
    sudo <script> <username> <home> <uid> <gid> "<gecos>"

med verdiene

script

Verdi fra cereconf.CREATE_USER_SCRIPT.

Verdi: /site/cerebrum/reguser/bin/adduser_wrapper

username
Navn på brukeren som skal få hjemmeområde.
home
Disk og katalog for det nye hjemmeområdet.
uid
UID for brukeren.
gid
GID for brukeren sin filgruppe.
gecos
Brukeren sine gecos-felt.
Implementasjon
Oppgaven er implementert i process_changes/MakeUser._make_user().
Av fhl
Publisert 25. sep. 2018 20:15