New certificate
Admin at 2014-12-28
A new certificate was installed today.

Hej, her vil jeg forsøge at dele nogle af de erfaringer, som jeg har opsamlet gennem min opsætning af vores Linux server.

Debian

<SKAMROS>Debian er uden tvivl den bedste distribution jeg nogensinde har arbejdet med (bland Mandrake, RedHat, Libranet og Debian, Gentoo fik jeg aldrig til at boote). APT er det bedste værktøj til pakkehåndtering, og RedHat network samt Mandrake URPMI når det ikke til sokkeholderne.</SKAMROS> Skim man-page til apt-get (specielt apt-get autoclean og apt-get clean. Husk at installere deborphan, der kan finde libraries, der ikke anvendes længere, i kommandoen dpkg -r `deborphan` er det en gude-kommando.

Alle beskrivelser herefter er på et eller andet plan relateret til Debian, da jeg nu kører den på både min desktop og serveren.

/etc/rc.d

Linux har ingen autoexec.bat som DOS men derimod et meget mere avanceret system (hvis man vel at mærke anvender System V start, hvilket Mandrake og Debian gør). Dette system består af bibliotekerne, rc0.d-rc6.d samt init.d (som regel placeret i /etc/ ell. /etc/rc.d/). Linux opererer med runlevels - en runlevel er en konfiguration af forskellige funktioner, der kører samtidig. f.eks. samba (fildeling til windows) og pure-ftpd (ftp-server). I init.d ligger eksekverbare filer med faciliteter til opstart og afslutning af de enkelse services - parametrene start/stop/restart/reload. De funktioner, der skal køre i et runlevel (biblioteket rc?.d/) har et link til en fil i init.d/. Hvis dette link starter med K skal processen stoppes når man går ind i dette runlevel (i praksis kaldes scriptet med parametren stop). Hvis den starter med S skal processen startes (parametren start). Tallet efter bogstavet angiver hvilken rækkefølge processerne skal behandles i.

Opstarts-runlevel kan styres i /etc/inittab, der angiver ønsket runlevel som andet element. Debian anvender normalt 2, så jeg lavede en reduceret udgave under 3, der ikke starter KDM og nogle af DBMSerne - det sparer en del tid hvis man har problemer med boot-fasen.

Apopros boot-fasen, så havde jeg nogle problemer med en Linux 2.6.7 på et ReiserFS - den nægtede at loade sine moduler - det viste sig at være fordi roden i boot-fasen var mountet read-only - det løses ved at overføre parametren rw til kernen i din boot-loader. Der kan selvfølgelig være problemer med denne indgangsvinkel, hvis filsystemet er inkonsistent, men det burde jo være journaliserende og jeg håber den kører en journal-playback når den mounter første gang...

Samba

Vigtig detalje: husk at sætte character set variablen i smb.conf, da samba ellers vil forsøge at gemme filernes navne i windows-maskinernes karaktersæt.

Permissions interaktionen mellem Samba og Linux er noget der kan give en lange n..., for permissions skal være korrekte på Linux siden førend Samba vil give dem rigtigt videre til Windows siden, og når man har en lemming, der stadig ikke har styr på bruger-gruppe-alle konceptet, men har adgang til root, så skal det gå galt - "jeg vil være superuser, så intet kommer i vejen for mig" - niks!

Følger man blot RedHats udemærkede tutorial, og lige fatter UPG (user private group) konceptet, så burde den være hjemme - husk blot setgid bitten på biblioteker, så bliver gruppe-angivelsen automatisk nedarvet.

Apache

mod_ssl Hvis man søger på nettet kan man nemt finde en guide i hvordan man laver sit eget certifikat. Debians scripts kan også lave et testcertifikat til dig - det er udstedt af Snake Oil.
For at bruge mod_ssl skal man lave en virtual-host entry i sin httpd.conf, der lytter på port 443.

Listen 80
Listen 443
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
SSLEngine on
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLCertificateFile /etc/apache/server.crt
SSLCertificateKeyFile /etc/apache/server.key
DocumentRoot /var/www/html/
SSLLog /var/log/apache_ssl_log
SSLLogLevel info
SSLVerifyClient none
</VirtualHost>

SSLMutex sem
</IfModule>

Det er værd at bemærke at Debian's standard er at .htaccess overstyringer ikke er tilladt - det bør rettes i httpd.conf.

Pure-ftpd

Som default anvendes UNIX login navne på denne ftp-server, hvilket ikke er specielt smart idet passwords sendes ukrypteret i ftp-protokollen. Derudover kræver det at alle brugere på ftp-serveren også er UNIX brugere - noget jeg ikke ville acceptere. Derfor kan det anbefales at anvende en alternativ bruger-liste, hvilket er muligt i pure-ftp ved anvendelse af PureDB ell. MySQL. Desværre understøtter Mandrake's pure-config script ikke PureDB database til brugere, så man må modificere det en anelse.

For at pure-ftpd skal interagere rigtigt med et system baseret på setguid og UPG skal pure-ftpd's egen umask sættes rigtigt i config-filen til 113:002.

På Debian findes en pakke, pure-ftpd-mysql, der gør det muligt at lave validering op mod en database - så kan man lave et frækt web-interface (fremsendes på forespørgsel)

Sudo

Sudo (superuser do) styrer for vildt men er vist ikke standard installeret på en Mandrake installation - men den er et must-have! Vi har haft en masse problemer med at der er 2 der kender root-passwordet, en er UNIX-nørd og ved det meste af tiden hvad han laver, den anden Windows lemming og som XP nu er indrettet vant til ikke at være begrænset (han kører ligesom alle andre id... som administrator). Derfor har lemmingen indtil flere gange fået lavet gris med root, hvorefter nørden har måttet rydde op. Desværre kan nørden ikke bare inddrage passwordet sådan uden videre, idet visse funktioner lemmingen også har brug for, men med sudo er det ændret! nu kan nørden uddele nøjagtig de privillegier, lemmingen har brug for (mest chmod, chgrp og chown - ja, det ved jeg godt, men det ved han ikke ;)

mlNet

Der syntes at være en del uhensigtsmæssige ting i den originale eDonkey klient til Linux. Derfor har en række programmører lavet en open-source udgave i ML, der skulle virke væsentligt bedre - den virker fremragende for os. Det er vigtigt at tænke på sikkerhed, så opret en seperat system-bruger til denne process og kør mlNet under denne bruger - dette kan løses vha. su/sudo (at foretrække) eller chmod ug+s på mlnet.

Software RAID-5

Som det ses på ServerInfo har vi et større RAID-5 array siddende bagved vores filserver til netværket. Arrayet kører software RAID-5 på de 5 ATA diske. Vi har (tror vi) optimeret arrayet til store filer og høj læsehastighed ved at have følgende raidtab fil.

raiddev /dev/md0
        raid-level      5
        nr-raid-disks   5
        nr-spare-disks  0
        persistent-superblock   1
        parity-algorithm        left-symmetric
        chunk-size      128
        device  /dev/hde
        raid-disk       0
        device  /dev/hdg
        raid-disk       1
        device  /dev/hdf
        raid-disk       2
        device  /dev/hdh
        raid-disk       3
        device  /dev/hdi
        raid-disk       4

Bemærk hvordan vi spreder vores fysiske diske ud således at de to master diske er raid-disk 0 og 1, mens slaverne er 2 og 3. Dette er gjort udfra filosofien om at læsninger i sekvens bedre kan spredes ud over de to kanaler. Om dette er sandt vil senere benchmarks vise...

HUSK: hvis man tester en ny disk først ved at oprette et filsystem på den og skrive og læse, så husk at unmounte den bagefter - ellers fejler raidreconf EFTER den har flyttet alt data rundt men før den skriver superblokkene på disken - dvs. dit RAID indeholder det gamle antal diske men den nye fordeling af data - det er noget L..T. Jeg var heldig og reddede arrayen ved at køre en mkraid med et force-flag på...

Message-of-the-day (MOTD)

Lav filen /etc/motd

Multi-homing

Synes at være ret ligetil - man laver bare en ifconfig eth0:0 192.168.1.201 og så lytter den efter det!
Når man så vil nedlægge den fiktive adresse, laves en ifconfig eth0:0 down.

VNC

VNC er en dejlig ting til at lave ultratynde klienter. At aktivere VNC kræver 3 ting - xinetd skal kende de nye services (jeg mener at xinetd er inetd langt overlegen). Dette gøres ved at oprette en vncserver service-beskrivelse i biblioteket /etc/xinetd.d/, denne fil skal indeholde:

service vnc-1024x768x24
{
   disable          = no
   socket_type      = stream
   wait             = no
   user             = nobody
   server           = /usr/bin/Xvnc
   server_args      = -inetd -query localhost -once -SecurityTypes None -geometry 1024x768 -depth 24
   only_from        = 192.168.1.0/24 127.0.0.1
   no_access        = 192.168.1.1
}
service vnc-852x480x24
{
   disable          = no
   socket_type      = stream
   wait             = no
   user             = nobody
   server           = /usr/bin/Xvnc
   server_args      = -inetd -query localhost -once -SecurityTypes None -geometry 852x480 -depth 24
   only_from        = 192.168.1.0/24 127.0.0.1
   no_access        = 192.168.1.1
}

Læg mærke til den mærkelige opløsning 852x480 - den er til en plasma-skærm, som jeg har adgang til. Det viser at Xvnc er rimelig ligeglad med opløsningen... Det er også vigtigt at få tilføjet service-navnene til /etc/services:

vnc-1024x768x24  5950/tcp # VNC
vnc-852x480x24   5951/tcp # VNC

Det sørgede så for at VNC kan tilgåes udefra, men det tillader ikke din display-manager (xdm,gdm,kdm) at lave displays til remote-hosts. Før kdm vil gøre det skal XDMCP aktiveres, hvilket gøres i din display-managers kontrolfil (hos mig /etc/kde3/kdm/kdmrc), der skal have tilføjet to linjer således at følgende gælder:

[Xdmcp]
Enable=true
Port=177
Willing=/etc/kde3/kdm/Xwilling

Samtidig skal Xaccess tillade andre logins (jeg ved ikke om det er nødvendigt, men jeg gør det for en sikkerheds skyld, selvom det åbner nye sikkerhedshuller):

*                                       #any host can get a login window

Grunden til at jeg valgte VNC til tynde klienter var at jeg ikke kunne få XDMCP til at virke med den X-server jeg havde installeret på en Windows maskine. Det skal siges at VNC ikke kører specielt godt på de høje opløsninger, så det I ser ovenfor er kun et udsnit af min konfiguration. Det er i min konfiguration kun lokalnettet (192.168.1.0/24) der har adgang til services, ex. 192.168.1.1 (NAPT routeren mod internet, hvis den skulle blive kompromitteret). Jeg kører med en ret mærkelig konfiguration, hvor min egen desktop-maskine fungerer som display-renderer, mens serveren eksporterer sine homedirs via NFS til min lokalmaskine. Vigtigt til VNC4 - der skal tilføjes den lille -SecurityTypes None - ellers insisterer VNC på at man skal Auth'e overfor den først.

AMAViS+ClamAV og SpamAssassin på postfix

Der findes masser af HOWTO's, så jeg vil bare bemærke hvad jeg havde problemer med: ClamAV kunne ikke læse de modtagne mails for gennemsøgning efter vira - det løste jeg ved at oprette en ny systemgruppe (mailcheck) og tilføje både AMAViS og ClamAV til denne gruppe. Det var bare ikke nok, så jeg satte amavisd til at køre med gruppen mailcheck - det kan gøres da amavisd starter som root og skifter bruger/gruppe senere. Det synes at have løst problemet. Samtidig skal man lige huske at udkommentere den linje i /etc/amavis/amavisd.conf, der deaktivere spam-checket (efter man har installeret SpamAssassin!). Den umask 007 (til UPG) jeg gerne ville have sat fik jeg aldrig til at virke...