# Het &kdesu;-handboek

Geert
Jansen

    g.t.jansen@stud.tue.nl

Lauri
Watts

    vampyr@atconnex.net

Nalezer
&Niels.Reedijk;
2000
Geert Jansen
&FDLNotice;
2000-09-04
1.00.00

&kdesu; is een grafische frondend voor het Unix"`su`" commando.

KDE
su
wachtwoord
root

## Inleiding

Welkom bij &kdesu;! &kdesu; is een grafische frontend vor het UNIX "`su`" commando voor de K Bureaublad Omgeving. Hiermee kan u een programma als een andere gebruiker draaien door het wachtwoord voor die gebruiker in te voeren. &kdesu; doet zelf niets; het gebruikt het `su` commando van het systeem.

KDE su heeft één bijkomstige mogelijkheid: het kan wachtwoorden voor u onthouden. Als u deze mogelijkheid gebruikt, hoeft u het wachtwoord slechts één keer voor elk commando in te typen. Zie voor meer informatie hierover en een beveiliginsanalyse.

Dit programma moet gestart worden vanuit de commandoregel of vanuit `.desktop` bestanden. Hoewel het het root-wachtwoord via een GUI dialoogvenster vraagt, zie ik het meer als een commandoregel <-> GUI lijm in plaats van een puur GUI programma.

## Installatie

### Downloaden

&kdesu; is nu in het KDE CVS, in kdebase. Het moet in elke (2.x) KDE distributie bijgevoegd zijn. U kan ook een KDE 1.x versie van mijn homepage op ftp://skynet.stack.nl/pub/users/geertj/ halen.

### Compileren

&kdesu; is in kdebase dus u heeft het al, of u krijgt het wanneer u kdebase installeert.

Om de KDE 1.x versie te compileren, gebruik:

    $ ./configure
    $ make
    $ make install

U moet de laatste stap als root uitvoeren. Het installatieproces moet in de systeem-brede KDE mappen kunnen schrijven.

## &kdesu; gebruiken

Het gebruik van &kdesu; is makkelijk. De syntaxis is zo:

          kdesu
          USER
          -n
          -t
          -q
          -d
          -f FILE
          -c

    	  COMMAND
    	  ARG1
    	  ARG2

          kdesu

    	-v
    	-h
    	-s

De commandoregel opties zijn hieronder uitgelegd.

`-c PROGRAM`

  Dit specificeert het programma dat gedraaid moet worden als root. Er moet één argument in. Dus, als u, bijvoorbeeld, een nieuwe bestandsbeheerder wilt starten, kan u op de prompt het volgende invoeren: ``kdesu `-c kfm -sw```

`-f FILE`

  Deze optie zal u &kdesu; efficiënt laten gebruiken in `.desktop` bestanden. Het vertelt &kdesu; om het bestand gespecificeerd door de `FILE` te lezen. Als dit bestand schrijfbaar is door de huidige gebruiker, zal &kdesu; het commando als de huidige gebruiker uitvoeren. Als het niet schrijfbaar is, zal het commando uitgevoerd worden door de gebruiker `USER` (standaard is dat root).

  `FILE` wordt op de volgende manier bekeken: als `FILE` met een "/" begint, wordt het gezien als een bestandsnaam. Anders wordt het gezien als de naam van een globaal KDE configuratiebestand. Bijvoorbeeld: om de K display manager te configureren, kdm, moet u het volgende commando uitvoeren: `kdesu `-c kdmconfig -f kdmrc``

`-t`

  Schakelt terminal uitvoer in. Dit schakelt het bewaren van wachtwoorden uit. Dit is vooral voor debug doeleinden; als u een console mode programma wilt draaien, gebruik dan het standaard "`su`" commando.

`-n`

  Sla het wachtwoord niet op. Dit schakelt de "keep password" checkbox in het paswoord dialoogvenster uit.

`-q`

  Wees stil.

`-d`

  Geef debuginformatie weer.

`-v`

  Debug informatie weergeven.

`-h`

  Print wat hulp.

`-s`

  Stop de kdesu daemon. zie .

## Configuratie

&kdesu; komt met een configuratiemodule genaamd kcmkdesu. U kan het vinden in het K menu onder Voorkeuren Programma's KDE su. U kan de volgende dingen wijzigen:

Echo Mode

  Dit is hoeveel karakters er op het scherm getoond worden in het paswoord invoerveld. Mogelijke keuzes zijn: één ster per karakter, drie sterren per karakter of geen echo. De standaardkeuze is één ster per karakter.

Wachtwoorden opslaan

  U kan KDE su wachtwoorden die u invoert voor u laten onthouden. U schakelt dit in door de "wachtwoord onthouden" aan te vinken. Als deze aangevinkt is, kan u een timeout waarde in het tekstveld daaronder invoeren. Dit is de hoeveelheid tijd in minuten, dat het wachtwoord onthouden wordt. De standaardinstelling is dat er geen wachtwoorden onthouden worden.

## Onder de motorkap

### X authenticatie

Het programma dat u uitvoert zal gedraaid worden onder de root gebruikers-id en zal in het algemeen geen toegang hebben tot uw X-scherm. KDE-su werkt hier omheen door een authenticatie cookie voor uw scherm toe te voegen aan een tijdelijk `.Xauthority` bestand. Nadat het commando afsluit, zal het bestand verwijderd worden.

Als u geen X-cookies gebruikt, moet u het zelf opzoeken. &kdesu; zal dit detecteren en zal geen cookie toevoegen, maar u moet er zeker voor zorgen root toegang heeft tot het scherm.

### Interface voor `su`

&kdesu; gebruikt het "`su`" van het systeem om de privileges te verkrijgen. In deze sectie zal ik uitleggen hoe &kdesu; dit doet.

Omdat sommige `su` implementaties (zoals degene van Redhat) het wachtwoord niet van de `stdin` willen lezen, zal &kdesu; een pty/tty paar aanmaken en zal het "`su`" met z'n standaard bestandsbeschrijvingen van daaruit oproepen.

Om een door de gebruiker geselecteerd commando uit te voeren in plaats van een interactieve shell, gebruikt &kdesu; het "`-c`" argument met `su`. Dit argument wordt ondersteund door elke shell die ik ken dus is het platform onafhankelijk. `Su` passeert dit "`-c`" argument naar de shell van de doelgebruiker, en de shell zal het programma uitvoeren. Bijvoorbeeld: "`su `root -c het_programma``".

In plaats van het gebruikerscommando direct uit te voeren met `su`, draait &kdesu; een klein stub programmaatje genaamd kdesu_stub. Deze stub (draaiend als de doelgebruiker), vraagt wat informatie van &kdesu; over het pty/tty kanaal (de stdin en de stdout van de stub) en draait dan het gebruikersprogramma. De informatie die overgebracht wordt is: het X-scherm, een X-authenticatie cookie (als deze beschikbaar is), de `PATH` en het te draaien commando. De reden waarom een stub programma wordt gebruikt, is dat het cookie geheime informatie bevat en daarom niet over de commandoregel mag doorgegeven worden.

### Wachtwoordcontrole

&kdesu; zal het wachtwoord dat u ingevoerd heeft contreleren en geeft een foutmelding als het niet correct is. De controle wordt uitgevoerd door een testprogramma: `/bin/true`. Als deze succesvol is, is het wachtwoord correct.

### Wachtwoord bewaren

Voor uw gemak, implementeert &kdesu; een "wachtwoord bewaren" functie. Als u geïnteresseerd bent in beveiliging, moet u deze paragraaf lezen.

Als u &kdesu; wachtwoorden laat herinneren opent u een (klein) beveiligingsgat in uw systeem. Het is duidelijk dat KDE su niet iemand anders dan uw eigen gebruikers-id toestaat om de wachtwoorden te gebruiken, maar, als het zonder voorzichtigheid gedaan is, zal dit de beveiliging van root verlagen tot het niveau van een normale gebruiker (u). Een hacker die in uw account breekt, zal dan root-toegang krijgen. &kdesu; probeert dit te voorkomen. Het beveiligingsschema dat het gebruikt, is in mijn ogen vrij veilig en wordt hier uitgelegd.

&kdesu; gebruikt een daemon, genaamd kdesud. De dameon luistert naar een UNIX socket in `/tmp` voor commando's. De mode van de socket is 0600, zodat aleen uw gebruikers-id ermee kan verbinden. Als wachtwoorden bewaren ingeschakeld is, zal &kdesu; commando's uitvoeren door deze daemon. Het schrijft het commando en het root wachtwoord naar de socket en de daemon voert het commando uit met behulp van "`su`", zoals hierboven vermeld. Hierna worden het commando en het wachtwoord niet weggegooid. Ze worden voor een bepaalde tijd bewaard. Dit is de time-out waarde in de configuratiemodule. Als een andere vraag voor hetzelfde commando in deze periode gemaakt wordt, zal de cliënt het wachtwoord niet hoeven te geven. Om hackers die in uw account gebroken hebben niet de wachtwoorden van de daemon te laten stelen (bijvoorbeeld, door middel van een debugger), is de daemon geïnstalleerd in set-group-id nogroup. Dit zal ervoor zorgen dat alle normale gebruikers (inclusief u) geen wachtwoorden uit het kdesud proces kunnen halen. De daemon zet ook de `DISPLAY` omgevingsvariabele gelijk aan de waarde die het had toen het gestart werd. Het enige dat een hacker kan doen is een programma in het huidige scherm uitvoeren.

Een zwakke plek in dit schema is dat programma's die u uitvoert waarschijnlijkniet geschreven zijn met beveiliging in gedachte (zoals setuid root programma's). Dit betekent dat ze buffer overflows of andere problemen zouden kunnen hebben waarvan een hacker gebruik kan maken.

Het gebruik van de wachtwoord bewaringsfunctie is een afweging van comfort tegen beveiliging. I raad u aan om er goed over na te denken en om zelf te besluiten of u het wel al dan niet gebruikt.

## Auteur

&kdesu;

Copyright 2000 Geert Jansen

&kdesu; is geschreven door Geert Jansen. Het is een beetje gebaseerd op Pietro Iglio's &kdesu;, versie 0.3. Pietro en ik besloten dat ik dit programma in de toekomst zal onderhouden.

De auteur kan bereikt worden via e-mail op g.t.jansen@stud.tue.nl. Rapporteer alstublieft fouten zodat ik ze kan repareren. als u een suggestie heeft, neem dan alstublieft contact met me op.

&underFDL; &underArtisticLicense;