Kerberos authentication mod Active Directory fra Apache

Jeg stod for noget tid siden overfor den udfordring, at få vores Apacheserver til at tilbyde SSO mod vores AD.

Tidligere har vi anvendt denne løsning: https://github.com/Legrandin/PyAuthenNTLM2, men da vi står overfor udvikling af nyt intranet, samt en løsning som kræver Kerberos på længere sigt, måtte vi jo få Kerberos til at virke.

Jeg tror desværre jeg fik lavet en indledende fejl, for efter en uge, ville det stadig ikke virke. Men da jeg så til sidst endelig fik hul igennem, kunne jeg efterfølgende lave en fungerende løsning på 5 minutter. :o)

Løsningen er som følger:

Opret en “standard” bruger i AD.

Husk at sæt flueben i: Password never expires

Når brugeren er oprettet, skal følgende kommando skydes af i en prompt:

ktpass 
  -princ HTTP/servername.domain.int@DOMAIN.INT 
  -mapuser ad_brugernavn@domain.int 
  -pass kodeord 
  -crypto RC4-HMAC-NT 
  -ptype KRB5_NT_PRINCIPAL 
  -out krb5.keytab

servername.domain.int, skal være samme navn, som Linux-serveren er registreret med i DNS. Sørg for der både er A og PTR record oprettet.

Crypto kan være en anden type, alt efter hvilken version af AD der anvendes.

Flyt denne krb5.keytab til Linux serveren og placer den f.eks. i /etc/krb5.keytab

Herefter skal mod_auth_kerb installeres, på ubuntu kan det installeres med denne kommando:

apt-get install libapache2-mod-auth-kerb

Opsæt herefter din vhost med følgende settings:

<Directory /data/www/>
 # Permit by User or IP
 Satisfy any
 # Apache settings
 Options Indexes FollowSymLinks
 AllowOverride All
 # Kerberos Settings
 Require valid-user
 AuthName "Kerberos - Login"
 AuthType Kerberos
 Krb5Keytab /etc/krb5.keytab
 KrbAuthRealm DOMAIN.INT
 KrbServiceName HTTP/servername.domain.int
 # UP
 order deny,allow
 deny from all
 allow from 127.0.0.1
</Directory>

Her kan læses om hvad de forskellige settings betyder: http://modauthkerb.sourceforge.net

Hvis installationen driller, kan man med fordel angive: LogLevel debug i sin vhost. Ligeledes har jeg fundet dette lille værktøj, som viser aktive kerberos tickets på en windows maskine: http://www.microsoft.com/en-us/download/details.aspx?id=17657

Værktøjet hedder: krbtray.exe og er en del af den “store” pakke: Windows Server 2003 Resource Kit Tools.

Udgivet i Apache, Diverse, mod_auth_kerb, Ubuntu, Windows Server | Tagget , , , , , | Skriv en kommentar

Tilføj restored content database til Sharepoint 2007

Jeg stod i dag med det problem, at en unavngiven person fik slettet noget indhold på vores sharepoint 2007 installation, som desværre ikke kunne gendannes via papirkurven.

Så vi måtte ned i gemmerne og finde en backup fra i nat frem.

Det var hurtigt at finde Sharepoint central administration og trykke:

“Add Content Database”

Men jeg blev blot mødt af fejlen: Unknown error. Hmmm…

Det fik mig en tur på google, hvor jeg fandt denne side: http://support.microsoft.com/kb/926961

Jeg tænkte, det er jo præcist det samme jeg gør via “web” men lad gå. Her fik jeg en pænere fejl, noget ala: Database med dette “ID” findes allerede, du kan evt. bruge denne parameter: -assignnewdatabaseid blablabla.

Jeg slettede den gamle og forsøgte igen og denne gang lykkedes det, så man kan ikke have 2 “ens” databaser tilkoblet samtidig.

Udgivet i Sharepoint | Tagget , , , , , | Skriv en kommentar

Solr + Search Api + Drupal 7 = Ret ok søgning

Jeg har altid gerne ville lave en side, som mindede om det jeg kender fra www.edbpriser.dk, hvor man netop kan navigere ned igennem udstyr ved at vælge/fravælge de “emneord” afsender har tænkt.

Og det skulle umiddelbart kunne lade sig gøre med Solr og Drupal 7.

Jeg startede med at installere Solr 3.6.2, da jeg fik information om det var den mest stabile og i Search Api Solr modulet, var der færdige config-filer til netop denne version.

Solr 4.4 er ikke supporteret out-of-the box, så derfor valgte jeg 3.6.2.

Jeg installede efter denne guide: http://blog.hemantthorat.com/install-solr-on-ubuntu/

Efter endt installation af Solr, smed jeg disse moduler på:

Efter endt opsætning af index, facetter osv. Manglede jeg en “landing-page” hvor man fra start kunne vælge facetter. Som jeg så det, kunne jeg fint aktivere facetter, men de kom først til syne, når jeg havde lavet en søgning.

Men efter noget tid, fandt jeg ud af jeg kunne aktivere Search Views og så kunne jeg under Views oprette en Node Index (mit ene index var på noder), har også et til brugere.

Dette gjorde præcist hvad jeg havde forsøgt i mange lange tid. Så jeg var en glad mand. :o)

Udgivet i Drupal, Moduler | Tagget , , , , | Skriv en kommentar

Drupal 7 + Service 3.x + Rest API

I dag skulle jeg smide services og REST server på en Drupal installation. Jeg fulgte diverse guides og alt burde virke, men nej. Jeg fik bare en 404 igen og igen. Jeg fulgte nogle flere guides med samme resultat.

Lige pludselig slog det mig, mod_rewrite var ikke aktiveret. Ind og aktiver det og så virkede mit rest-API sørme.

Udgivet i Drupal, Moduler | Tagget , , , | Skriv en kommentar

Pidgin vil ikke altid lege med GTalk

Pidgin vil som overskriften siger, ikke altid lege med GTalk / Gmail / Google you name it. I windows indtaster man bare brugernavn og kodeord og så spiller det, men på linux (ubuntu) driller det mig altid.

Men under Account / Konto -> GTalk user -> Modify -> Advanced -> Connect server: talk.google.com så plejer det at virke. 🙂

Udgivet i Diverse | Tagget , | Skriv en kommentar

RTF, hvad er det da for noget L*RT!!!

Jeg skulle i forbindelse med en opgave på arbejdet til at arbejde med RTF (Rich Text Format) og har altid tænkt, sikke da noget L*RT.

Har i mandags skulle jeg så til at arbejde RIGTIGT med det, så jeg måtte jo gøre noget og kom forbi denne specifikation: http://www.biblioscape.com/rtf15_spec.htm

Det hjalp jo gevaldigt på det hele. Nu forstod jeg lige pludseligt RTF formattet og det var slet ikke så sort. Så nu koder jeg på livet løs i PowerShell hvor jeg skal lave et outlook signatur-script. Spændende at se hvor vi lander.

Udgivet i Outlook, PowerShell | Tagget , , , , | Skriv en kommentar

NTLM2 Auth på en Linux boks

Jeg har over flere gange forsøgt at få SingleSignOn (SSO) til at spille på en Linux boks i et Active Directory miljø. Hver gang er det dog endt med at have smidt hele installationen på en windows server.

SSO bruger jeg primært i PHP applikationer, så derfor er det oplagt at afvikle disse programmer på en Linux server (gerne Ubuntu).

Efter stor søgen og test på kryds og tværs, kom jeg forbi dette projekt:

PyAuthenNTLM2

Her er den “officielle” installationsguide: README.rst

Fordi jeg selv er en Linux nød, vil jeg her beskrive stort set step by step, hvordan jeg fik det til at spille:

  1. mod_python
    1. Installer: apt-get install libapache2-mod-python
  2. Hent pakken, udpak og install
    1. wget https://github.com/Legrandin/PyAuthenNTLM2/zipball/master
    2. unzip master
      1. Har du ikke unzip, så hent det via: apt-get install unzip (i Ubuntu)
    3. python setup.py install
  3. Tilret apache / virtualhost conf
    1. <Directory /var/lib/some_directory>
      AuthType NTLM
      AuthName !!DOMAIN!!
      require valid-user
      PythonAuthenHandler pyntlm
      PythonOption Domain !!DOMAIN!!
      PythonOption PDC !!PRIMARY_DOMAIN_CONTROLLER!!
      PythonOption BDC !!BACKUP_DOMAIN_CONTROLLER!!
      </Directory>
Udgivet i PHP, Ubuntu | Tagget , , , , , , , | 2 kommentarer

Scheduled task på Windows 2008 R2 server

Tja, i linux verden ville det jo “bare” være at smide en linje i crontab ala:

*/5 * * * * php /PATH/TO/file.php

Så jeg troede jo det blot ville være at smide de samme informationer ind i Task Scheduler. Men ak nej, der tog jeg fejl (igen).

Jeg oprettede jobbet, sti til php.exe med optional arguments sat til:

-f /path/to/file.php

Jeg blev dog ved med at få en 0x1 Last Run Result. Jeg rodede med rettigheder, stier med og uden ” (quotes), men lige lidt hjælp det.

Så løste jeg det. Smed det hele i en bat fil og så ville den gerne eksekvere min kode, underligt. Men problem solved.

Udgivet i Windows Server | Tagget , , , , , , | Skriv en kommentar

Snakke SNMP med diverse printere

For noget tid siden, fik jeg opgaven med at skulle indsamle printer-tællere på kommunens printere. Det kan jeg da sagtens klare sagde jeg til chefen og så gik jeg igang.

Efter et par uger tænkte jeg, FUCK, hvad er det jeg har sagt JA til!

Efter endnu en uge, tænkte jeg, var det bare det? 🙂

Vi var allerede inde på, at SNMP måtte være løsningen. Problemet var dog, når man lavede en:

snmpwalk -c public IP/HOSTNAVN

Så viste den en masse informationer om printeren, men ikke lige de informationer jeg var på jagt efter.
F.eks. gav den mig serienummer, modelnavn, total antal af printede sider, men da jeg også skulle bruge farveprint og sort/hvid, så måtte jeg grave videre.

Og nogle printere gav intet svar. 🙁 Tilbage i tænkeboksen.
Det viste sig at ikke alle printere kører snmpv2, som åbenbart er standard, så jeg måtte tvinge den til version1, sådan:

snmpwalk -v1 -c public IP/HOSTNAVN

Så kunne jeg snakke med endnu flere printere, men manglede dog stadig de “vigtige” informationer.

Har faldt jeg så over MIBs, sikke da en fisk.

Et lille trick, er at finde den OID (en gode side er http://www.oid-info.com/) og så bruge følgende kommando:

Her skulle jeg f.eks. snakke med en Brother Printer.
snmpwalk -v1 -c public IP/HOSTNAVN OID eller bare leverandørens start oid, f.eks.: 1.3.6.1.4.1.2435
Og så bruge en grep på det man søger, her søger jeg f.eks. den counter, som har printet 1234 antal sort/hvid.


snmpwalk -v1 -c public IP/HOSTNAVN 1.3.6.1.4.1.2435 | grep 1234

Hermed får jeg så en streng ala:
SNMPv2-SMI::enterprises.2435.2.3.9.4.2.1.5.5.52.21.1.3.3 = Counter32: 1234
Og den kan jeg så bruge direkte i snmpget således:


snmpget -v1 -c public IP/HOSTNAVN 1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.52.21.1.3.3
SNMPv2-SMI::enterprises.2435.2.3.9.4.2.1.5.5.52.21.1.3.3 = Counter32: 1234

Hvis nogle kan bruge nogle “genveje” til OID’er til printertællere, så kan i se her:

Forudsætning er SNMP er aktiveret og min erfaring er -v1 giver de bedste resultater.
1.3.6.1.2.1.43.10.2.1.4.1.1 = Total print og virker på alle printere

Xerox
1.3.6.1.4.1.253.8.53.13.2.1.6.1.20.33 = Farve
1.3.6.1.4.1.253.8.53.13.2.1.6.1.20.34 = Sort/hvid

HP
1.3.6.1.4.1.11.2.3.9.4.2.1.1.16.4.1.3.1.0 = Farve
1.3.6.1.4.1.11.2.3.9.4.2.1.1.16.4.1.1.1.0 = Sort/hvid

Konica Minolta, er så lidt speciel, der måtte jeg gøre følgende:
1.3.6.1.4.1.18334.1.1.1.5.7.2.2.1.5.2.1 = Kopi fuld farve
1.3.6.1.4.1.18334.1.1.1.5.7.2.2.1.5.2.2 = Print fuld farve
1.3.6.1.4.1.18334.1.1.1.5.7.2.2.1.5.4.1 = Kopi 2 farver
1.3.6.1.4.1.18334.1.1.1.5.7.2.2.1.5.4.2 = Print 2 farver
1.3.6.1.4.1.18334.1.1.1.5.7.2.2.1.5.1.1 = Kopi sort/hvid
1.3.6.1.4.1.18334.1.1.1.5.7.2.2.1.5.1.2 = Print sort/hvid
og så skal man regne lidt.

Brother
1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.52.21.1.3.2 = Farve
1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.52.21.1.3.3 = Sort/hvid

Udgivet i Diverse | Tagget , , , , , , , , , | Skriv en kommentar

Notifikation på et Sharepoint Listeelement

Forhistorie: Vi anvender i dag Sharepoint 2007 og det virker jo ok. 🙂

Fik en opgave ind fra højre, hvor jeg skulle finde en måde, hvor mine kolleger kunne blive gjort opmærksom på, når nogle elementer i en sharepoint liste, var udløbet.

Først var jeg ude i noget Timer Job og Visual Studio og kode en masse af tingene selv, men så slog det mig.

Sharepoint Designer 2007 og Opgaver. Jeg begyndte at designe mit workflow, så når et element blev oprettet/redigeret, så oprettede jeg en opgave til ejeren af elementet og dermed ville personen allerede her, have en opgave, der gjorde denne person skulle lave en opfølgning på elementet.

Så langt så godt. Først brugte jeg bare Sharepoint Designers Opret opgaveelement, men der manglede jeg at kunne angive StartDato, da den som standard blot sætter dags dato. Jeg ville jo gerne have startdato = udløbsdato på det element, som jo netop var udløbet.

Derfor kunne jeg så bruge Opret listeelement og blot oprette det i min opgaveliste. Og her løb jeg så ind i problem nummer 2.

Standard opret opgave, gav et fint link til listeelementet, men hvordan fik jeg et link til listeelementet, når nu jeg oprettet opgavelementet selv?

Jeg forsøgte med Kodet Absolut-url, Relative server-url osv. Intet var som forventet. Dog faldt jeg over Opret Dynamisk Streng, hvor jeg så kunne “snyde” lidt og oprette en Hardcoded url + ID på listeelementet og denne variabel, kunne jeg så igen angive i mit opgaveelement. Nu venter jeg spændt på om brugeren får opfyldt sit ønske denne vej eller om jeg skal kaste mig ud i noget Sharepoint kodning. 🙁

Udgivet i Sharepoint | Tagget , , , , , , | Skriv en kommentar