Kleine und große Linux AHAs
Beiträge getaggt mit windows
MailMig Teil 5: Für die einen so, für die anderen mit Donnervogel
26. Okt
In unserem Projekt war von vornherein klar, dass wir ein Zweiklassen System zur Zeit haben und auch weiterhin haben werden. Die einen, die ihren Mailaccount haben um damit Mails zu bekommen die “an alle” versendet werden (Bekanntmachungen, Mitteilungen, …) und ansonsten vielleicht 5 eMails in der Woche schreiben. Die anderen, die eben den ganzen Tag mit dem Medium eMail zu tun haben und dem entsprechend viele Mails haben. Einfach gesagt: Standard User und Power User.
Für die Standard User wird Group-Office das Tor zu eMail und Company Collaboration sein. In unserem Fall haben die meisten Standard User auch keinen festen Platz, sondern müssen sich mal von da und mal von dort anmelden können. Dafür ist Webmail eh am einfachsten. Auf die Standard User möchte ich jetzt auch gar nicht weiter eingehen, da Group-Office in späteren Artikeln bestimmt noch behandelt werden wird.
Heute geht es um die Power User. Warum überhaupt zwei verschiedene Systeme anbieten? Naja, da gibt es Argumente wie die Möglichkeit zum Sortieren des Posteingangs (oder anderer Ordner). Möchte man beispielsweise einen Ordner nach den Absendern gruppieren, so wird das mit einem Webmail Client sehr schwierig da dafür die kompletten Daten des Ordners in die Berechnung der Anzeige einfließen müssten. Group-Office – und auch die meisten anderen – arbeitet als IMAP Client mit direktem Zugriff auf den Mailserver und kann dabei nicht viel an Cache nutzen.
Ein weiteres Beispiel ist die Anzeige (Liste) der Mails. Group-Office zeigt per Default 20 eMails in der Liste an. Man kann diesen Wert auf bis auf 50 erhöhen – dann ist Schluss. Das macht aus Sicht der Webmail Anwendung auch Sinn, um die Performance zu erhalten. Nun ist es allerdings so, dass manche Anwender ihren Ordner einfach mal so überfliegen möchten, weil sie “irgendeine eMail suchen die vor ein paar Tagen gekommen ist”. Man möchte die Liste einfach durch scrollen. Mir ist schon klar, dass man dafür auch Suchfunktionen innerhalb des Webmail Systems nutzen könnte
Schlecht ist das auch bei Mitarbeitern die morgens so um die 70 eMails oder Montags sogar > 100 eMails haben. Sie müssten sich durch mehrere Seiten klicken um sich einen Überblick zu verschaffen – das ist auch aus meiner Sicht nachvollziehbar
Das sind nur ein paar Beispiele dafür, dass es notwendig ist einen FatClient anzubieten. Der wohl schwerwiegendste Grund dürfte allerdings die Gewohnheit sein. Die Mitarbeiter haben sich über viele Jahre an einen FatClient (in dem Fall Outlook) gewöhnt. Nun möchten wir das ganze System ändern. Eine große Aufgabe liegt darin, den Mitarbeitern das ganze schmackhaft zu machen – mit möglichst wenig Änderungen an Bedienung und Verfahrensweisen. Auch das ist ein Grund, warum man den FatClient nicht einfach “wegmigrieren” kann.
Die Qual der Wahl? Naja.
Nun, welchen eMail Client kann man nehmen? Gibt es viele Alternativen? Aus meiner Sicht nicht wirklich. Ein Client, der auf Windows als auch auf Linux läuft. Ein Client der recht bekannt ist und aktiv entwickelt wird. Ein Client der erweiterbar ist.
Wie aus der Überschrift zu entnehmen ist haben wir uns auf Thunderbird als FatClient festgelegt. Gibt es andere, wirkliche, Alternativen? Ich kenne keine und bin bisher auch mit Thunderbird ganz zufrieden. Es gab zwar so einige Stolperstellen, aber im Großen und Ganzen bin ich zufrieden – mittlerweile.
Ist Thunderbird “Ready for the Enterprise”?
Das ist mit die interessanteste Frage in dem Spiel. Kann Thunderbird im Unternehmen eingesetzt werden? Naja, generell spricht ja nichts dagegen – wieso auch. Welche Anforderungen hat ein Unternehmen denn?
Also prinzipiell benötigt ein Unternehmen an sich auch nicht viel mehr als der Privatmann zu Hause (ganz ganz grob ausgedrückt):
- eMail (IMAP, SSL)
- Kalender (Free & Busy, Shared)
- Adressbuch / -bücher (LDAP, Lokal)
Diese Anforderungen sind wirklich nur der Standard – es geht hier nicht um Firmen die mit dem Mailclient Workflow abbilden oder anderes. Aber stellen wir uns das mal vor… So wie jeder Thunderbird kennt würde dann auf jedem Arbeitsplatzrechner Thunderbird installiert, die Plugins heruntergeladen und installiert, alles manuell konfiguriert. Dieses Szenario x Anzahl Poweruser. Und die Updates nimmt man direkt aus dem Internet, oder? Klar.
Damit sind wir bei den Anforderungen der Unternehmen:
- zentrale Installation (komplettes Package incl. Plugins/Extensions)
- zentrale Steuerung von Updates
- zentrale Administration der Clients (Konfiguration, Konfigurationsupdates)
Aber kann Thunderbird das? Yes, he can. Allerdings war es echt schwierig an die nötigen Informationen zu kommen.
Weiter geht es im nächsten Artikel – bald auf dieser IP Adresse.
MailMig Teil 3: Datengrundlage erstellen
27. Aug
Die nötigen Daten zu diesem Projekt befinden sich zu einem großen Teil im Exchange Server. Nur wie kommt man an diese Daten, um vernünftig mit ihnen arbeiten zu können? Ich habe einen Weg gefunden, der mir recht gut gefällt.
Zuerst ein Export! Aber wie?
Die Daten aus dem Exchange Server zu exportieren mag man sich einfacher vorstellen, als es möglich ist. Also meine erste Vermutung war: Im Verzeichnisbaum mit der rechten Maustaste klicken, exportieren, alles, speichern unter – fertig. Naja, das wäre zu einfach gewesen. Es gibt zwar diesen Menüeintrag, allerdings lässt sich damit nur die aktuelle Listenansicht exportieren. In dieser sind jedoch nicht alle Informationen enthalten.
Nach einiger Suche hatte ich einen neuen Freund gefunden: csvde.exe. Soll wohl sowas bedeuten wie “CSV Direcory Export”. Nutzt man diesen Befehl ohne Eingrenzung und unter einem Account mit den nötigen Privilegien, bekommt man eine .csv Datei mit “allen” Inhalten des Directories. Das sind mal gerade >300 Spalten
Ich habe den Befehl so ausgeführt:
csvde -u -f listing.csv
In listing.csv sind damit alle Informationen enthalten.
Wie nun damit arbeiten?
Diese Datei ist extrem unübersichtlich und auch mit Skripten in der Form nicht gut zu nutzen. Darum habe ich mir diese Datei in eine MySQL Datenbank eingelesen (macht bei einer größeren Anzahl Mailboxen wirklich Sinn). Sind die Daten in der Datenbank kann man recht einfach mit Perl andocken, Views bauen oder auch mit Grafischen Frontends Abfragen erstellen.
Damit die Datenbank ohne größeren Aufwand während der Migrationsphase aktualisiert werden kann, habe ich mir ein Script erstellt welches die .csv Datei in die Datenbank einliest, Views erstellt und über ein Perl Programm auch schon beispielsweise eine Tabelle mit den aktuellen Verteilerlisten erstellt (verteiler eMailadresse/Zieladressen). Das ganze sieht dann so aus:
#!/bin/bash
#
# Script zur Erstellung der Datenbanktabellen und Import der Daten aus einem
# Exchange Directory Dump.
#
# Ronny Becker, 08.2010
#
#
# Prerequisites:
# - Datenbank gal muss vorhanden sein
# - der Benutzer gal (pw: gal) muss Vollzugriff auf die Datenbank haben
#
# Tabelle anlegen
echo "drop table if exists pure_import; create table pure_import (
DN LONGTEXT,objectClass LONGTEXT,distinguishedName LONGTEXT,
instanceType LONGTEXT,whenCreated LONGTEXT,whenChanged LONGTEXT,
subRefs LONGTEXT,uSNCreated LONGTEXT,dSASignature LONGTEXT,
repsTo LONGTEXT,repsFrom LONGTEXT,uSNChanged LONGTEXT,
name LONGTEXT,objectGUID LONGTEXT,replUpToDateVector LONGTEXT,
creationTime LONGTEXT,forceLogoff LONGTEXT,lockoutDuration LONGTEXT,
lockOutObservationWindow LONGTEXT,lockoutThreshold LONGTEXT,maxPwdAge LONGTEXT,
minPwdAge LONGTEXT,minPwdLength LONGTEXT,modifiedCountAtLastProm LONGTEXT,
nextRid LONGTEXT,pwdProperties LONGTEXT,pwdHistoryLength LONGTEXT,
objectSid LONGTEXT,serverState LONGTEXT,uASCompat LONGTEXT,
modifiedCount LONGTEXT,auditingPolicy LONGTEXT,nTMixedDomain LONGTEXT,
rIDManagerReference LONGTEXT,fSMORoleOwner LONGTEXT,systemFlags LONGTEXT,
wellKnownObjects LONGTEXT,objectCategory LONGTEXT,isCriticalSystemObject LONGTEXT,
gPLink LONGTEXT,gPOptions LONGTEXT,masteredBy LONGTEXT,
msDSMachineAccountQuota LONGTEXT,msDSBehaviorVersion LONGTEXT,
msDSPerUserTrustQuota LONGTEXT,msDSAllUsersTrustQuota LONGTEXT,
msDSPerUserTrustTombstonesQuota LONGTEXT,msDsmasteredBy LONGTEXT,
msDSIsDomainFor LONGTEXT,dc LONGTEXT,ou LONGTEXT,description LONGTEXT,
showInAdvancedViewOnly LONGTEXT,dSCorePropagationData LONGTEXT,cn LONGTEXT,
memberOf LONGTEXT,userAccountControl LONGTEXT,badPwdCount LONGTEXT,codePage LONGTEXT,
countryCode LONGTEXT,badPasswordTime LONGTEXT,lastLogoff LONGTEXT,lastLogon LONGTEXT,
localPolicyFlags LONGTEXT,pwdLastSet LONGTEXT,primaryGroupID LONGTEXT,accountExpires LONGTEXT,
logonCount LONGTEXT,sAMAccountName LONGTEXT,sAMAccountType LONGTEXT,operatingSystem LONGTEXT,
operatingSystemVersion LONGTEXT,operatingSystemServicePack LONGTEXT,dNSHostName LONGTEXT,
rIDSetReferences LONGTEXT,servicePrincipalName LONGTEXT,userCertificate LONGTEXT,
displayName LONGTEXT,serverReferenceBL LONGTEXT,frsComputerReferenceBL LONGTEXT,
rIDAvailablePool LONGTEXT,msDSTombstoneQuotaFactor LONGTEXT,flags LONGTEXT,
versionNumber LONGTEXT,gPCFunctionalityVersion LONGTEXT,gPCFileSysPath LONGTEXT,
gPCMachineExtensionNames LONGTEXT,gPCUserExtensionNames LONGTEXT,ipsecName LONGTEXT,
ipsecID LONGTEXT,ipsecDataType LONGTEXT,ipsecData LONGTEXT,ipsecISAKMPReference LONGTEXT,
ipsecNFAReference LONGTEXT,ipsecOwnersReference LONGTEXT,ipsecNegotiationPolicyReference LONGTEXT,
ipsecFilterReference LONGTEXT,iPSECNegotiationPolicyType LONGTEXT,iPSECNegotiationPolicyAction LONGTEXT,
userParameters LONGTEXT,adminCount LONGTEXT,lockoutTime LONGTEXT,msNPAllowDialin LONGTEXT,
members LONGTEXT,groupType LONGTEXT,revision LONGTEXT,logonHours LONGTEXT,comments LONGTEXT,
lastSetTime LONGTEXT,priorSetTime LONGTEXT,fRSReplicaSetType LONGTEXT,fRSVersionGUID LONGTEXT,
fRSFileFilter LONGTEXT,fRSReplicaSetGUID LONGTEXT,serverReference LONGTEXT,frsComputerReference LONGTEXT,
fRSMemberReferenceBL LONGTEXT,fRSWorkingPath LONGTEXT,fRSRootPath LONGTEXT,fRSStagingPath LONGTEXT,
fRSMemberReference LONGTEXT,rIDAllocationPool LONGTEXT,rIDPreviousAllocationPool LONGTEXT,
rIDUsedPool LONGTEXT,rIDNextRID LONGTEXT,dNSProperty LONGTEXT,sn LONGTEXT,givenName LONGTEXT,
homeMTA LONGTEXT,proxyAddresses LONGTEXT,homeMDB LONGTEXT,mDBUseDefaults LONGTEXT,
mailNickname LONGTEXT,legacyExchangeDN LONGTEXT,userPrincipalName LONGTEXT,textEncodedORAddress LONGTEXT,
mail LONGTEXT,msExchHomeServerName LONGTEXT,msExchALObjectVersion LONGTEXT,msExchHideFromAddressLists LONGTEXT,
msExchMailboxSecurityDescriptor LONGTEXT,msExchUserAccountControl LONGTEXT,msExchMailboxGuid LONGTEXT,
msExchPoliciesIncluded LONGTEXT,showInAddressBook LONGTEXT,mSMQSignCertificates LONGTEXT,
mSMQDigests LONGTEXT,objectVersion LONGTEXT,sIDHistory LONGTEXT,managedBy LONGTEXT,
reportToOriginator LONGTEXT,deletedItemFlags LONGTEXT,garbageCollPeriod LONGTEXT,replicatedObjectVersion LONGTEXT,
replicationSignature LONGTEXT,msExchADCGlobalNames LONGTEXT,msExchMasterAccountSid LONGTEXT,dLMemDefault LONGTEXT,
msExchPoliciesExcluded LONGTEXT,reportToOwner LONGTEXT,hideDLMembership LONGTEXT,oOFReplyToOriginator LONGTEXT,
l LONGTEXT,telephoneNumber LONGTEXT,department LONGTEXT,mAPIRecipient LONGTEXT,employeeNumber LONGTEXT,
employeeID LONGTEXT,uid LONGTEXT,manager LONGTEXT,BsiSysteme LONGTEXT,uidNumber LONGTEXT,gidNumber LONGTEXT,
unixHomeDirectory LONGTEXT,loginShell LONGTEXT,assistant LONGTEXT,securityProtocol LONGTEXT,
deliverAndRedirect LONGTEXT,autoReplyMessage LONGTEXT,extensionAttribute10 LONGTEXT,protocolSettings LONGTEXT,
physicalDeliveryOfficeName LONGTEXT,targetAddress LONGTEXT,internetEncoding LONGTEXT,title LONGTEXT,
msExchPreviousAccountSid LONGTEXT,altRecipient LONGTEXT,info LONGTEXT,facsimileTelephoneNumber LONGTEXT,
publicDelegates LONGTEXT,altRecipientBL LONGTEXT,profilePath LONGTEXT,publicDelegatesBL LONGTEXT,
displayNamePrintable LONGTEXT,msExchExpansionServerName LONGTEXT,msExchUnmergedAttsPt LONGTEXT,
deliveryMechanism LONGTEXT,msExchPFTreeType LONGTEXT,delivContLength LONGTEXT,msExchRequireAuthToSendTo LONGTEXT,
securityIdentifier LONGTEXT,trustDirection LONGTEXT,trustPartner LONGTEXT,trustPosixOffset LONGTEXT,
trustType LONGTEXT,trustAttributes LONGTEXT,flatName LONGTEXT,scriptPath LONGTEXT,roomNumber LONGTEXT,
homeDirectory LONGTEXT,homeDrive LONGTEXT,msRADIUSCallbackNumber LONGTEXT,msRADIUSServiceType LONGTEXT,
userWorkstations LONGTEXT,directReports LONGTEXT,msRASSavedCallbackNumber LONGTEXT,company LONGTEXT,
submissionContLength LONGTEXT,managedObjects LONGTEXT,operatorCount LONGTEXT,lastKnownParent LONGTEXT,
mDBOverHardQuotaLimit LONGTEXT,pager LONGTEXT,otherFacsimileTelephoneNumber LONGTEXT,location LONGTEXT,
gPCWQLFilter LONGTEXT,mSDSCreatorSID LONGTEXT,msRRASAttribute LONGTEXT,unixUserPassword LONGTEXT,
initials LONGTEXT,adminDisplayName LONGTEXT,keywords LONGTEXT,serviceClassName LONGTEXT,serviceBindingInformation LONGTEXT,
serviceDNSName LONGTEXT,serviceDNSNameType LONGTEXT,categoryId LONGTEXT,localizedDescription LONGTEXT,extensionName LONGTEXT,
lastUpdateSequence LONGTEXT,appSchemaVersion LONGTEXT,msiScriptPath LONGTEXT,cOMClassID LONGTEXT,localeID LONGTEXT,
machineArchitecture LONGTEXT,packageType LONGTEXT,packageName LONGTEXT,packageFlags LONGTEXT,versionNumberHi LONGTEXT,
versionNumberLo LONGTEXT,msiFileList LONGTEXT,upgradeProductCode LONGTEXT,productCode LONGTEXT,msiScriptName LONGTEXT,
installUiLevel LONGTEXT,canUpgradeScript LONGTEXT,mSMQSites LONGTEXT,mSMQServiceType LONGTEXT,mSMQOSType LONGTEXT,
mSMQEncryptKey LONGTEXT,mSMQSignKey LONGTEXT,mSMQDependentClientServices LONGTEXT,mSMQRoutingServices LONGTEXT,
mSMQDsServices LONGTEXT,url LONGTEXT,fileExtPriority LONGTEXT,postalCode LONGTEXT,streetAddress LONGTEXT,
msDSSupportedEncryptionTypes LONGTEXT,gecos LONGTEXT,dnsRecord LONGTEXT,uNCName LONGTEXT,serverName LONGTEXT,
portName LONGTEXT,driverName LONGTEXT,priority LONGTEXT,printStartTime LONGTEXT,printEndTime LONGTEXT,printBinNames LONGTEXT,
printMaxResolutionSupported LONGTEXT,printOrientationsSupported LONGTEXT,printCollate LONGTEXT,printColor LONGTEXT,
printShareName LONGTEXT,printSpooling LONGTEXT,printKeepPrintedJobs LONGTEXT,driverVersion LONGTEXT,printMaxXExtent LONGTEXT,
printMaxYExtent LONGTEXT,printMinXExtent LONGTEXT,printMinYExtent LONGTEXT,printStaplingSupported LONGTEXT,printMediaReady LONGTEXT,
printNumberUp LONGTEXT,printMediaSupported LONGTEXT,printerName LONGTEXT,shortServerName LONGTEXT,printDuplexSupported LONGTEXT,
printMemory LONGTEXT,printRateUnit LONGTEXT,printLanguage LONGTEXT,printRate LONGTEXT,printPagesPerMinute LONGTEXT,
adminDescription LONGTEXT,schemaVersion LONGTEXT,msSFU30KeyAttributes LONGTEXT,msSFU30FieldSeparator LONGTEXT,
msSFU30IntraFieldSeparator LONGTEXT,msSFU30SearchAttributes LONGTEXT,msSFU30ResultAttributes LONGTEXT,msSFU30MapFilter LONGTEXT,
msSFU30MasterServerName LONGTEXT,msSFU30OrderNumber LONGTEXT,msSFU30Domains LONGTEXT);" | mysql -u gal -pgal gal
# Daten einlesen
echo "LOAD DATA INFILE 'listing.csv' INTO TABLE pure_import FIELDS TERMINATED BY ',' ENCLOSED BY '\"' IGNORE 1 LINES;" | mysql -u gal -pgal gal
# views einrichten
echo "CREATE VIEW `gal`.`aliases_with_mail` AS SELECT DN,members,mail FROM `gal`.`pure_import` where mail <> '' and members <> '' and members LIKE 'CN%';" | mysql -u gal -pgal gal
echo "CREATE VIEW `gal`.`AddBook` AS select `gal`.`pure_import`.`sn` AS `sn`,`gal`.`pure_import`.`givenName` AS `givenName`,`gal`.`pure_import`.`mail` AS `mail`,`gal`.`pure_import`.`l` AS `l`,`gal`.`pure_import`.`telephoneNumber` AS `telephoneNumber`,`gal`.`pure_import`.`department` AS `department`,`gal`.`pure_import`.`description` AS `description`,`gal`.`pure_import`.`showInAddressBook` AS `showInAddressBook` from `gal`.`pure_import` where (`gal`.`pure_import`.`showInAddressBook` like '%Globale Adressliste%')" | mysql -u gal -pgal gal
# tabelle mit verteilerlisten anlegen
echo "drop table if exists lists; create table lists (mail TEXT,recipient LONGTEXT);" | mysql -u gal -pgal gal
# Tabelle mit Verteilerlisten fuellen
./gal_create_table_sub.pl
Hier nun noch das sub-Script:
#!/usr/bin/perl
# Listing
@MAILADDS=`echo "select mail,members from aliases_with_mail" | mysql -N -u gal -pgal gal`;
$count_all=$#MAILADDS + 1;
$counter=1;
foreach $line (@MAILADDS) {
chomp($line);
$all_rec="";
($mail,$members)=split("\t",$line);
@each_member=split(";",$members);
foreach $member (@each_member) {
$tmp_add=`echo "select mail from tabelle1 where DN='$member';" | mysql -N -u gal -pgal gal`;
chomp($tmp_add);
if ( length($tmp_add) != 0 ) {
$all_rec=$all_rec.",".$tmp_add;
}
}
$all_rec =~ s/^,//;
`echo "insert into lists(mail,recipient) values('$mail','$all_rec');" | mysql -N -u gal -pgal gal`;
print "$counter / $count_all\n";
$counter++;
}
Linux & Windows Links: schöner öffnen mit win_path
20. Apr
Wer einen Linux Desktop beruflich nutzt, bekommt je nach Umgebung diverse Aufgaben gestellt um sich in einem heterogenen Netzwerk zurecht zu finden. Dazu gehört zum Beispiel Lotus Notes ans Laufen zu bringen oder auch der gemeinsame Zugriff auf zentrale Laufwerke.
Fileserver werden (leider) recht selten unter Linux betrieben. Von daher muss man Möglichkeiten und Wege finden sich damit zu arrangieren. Im folgenden möchte ich ein Script vorstellen, welches einen Teil dieser Interoperabilität sehr einfach unterstützt.
Worum geht es ?
Man bekommt eine eMail. In dieser Mail wird auf ein zentral abgelegtes Dokument verwiesen. Wie ? Na ganz einfach per “I:\Ordner\Dokument.doc” – ein Link auf ein gemapptes Laufwerk. Unter Ubuntu darauf klicken und Firefox (das wird als Link verstanden) sagt “Ich weiß nicht wirklich was ich damit machen soll !”.
Lösung !
Ich habe ein Script geschrieben, welches dieses Szenario wie folgt löst:
- Link kopieren
- Script starten
- es öffnet sich Nautilus, bzw. die Anwendung
Das ganze hört sich erst einmal komplizierter an als es ist. Das Script starten kann man eleganter weise nämlich z.B. über gnome-do oder mit einem einfachen Shortcut unter Gnome erledigen. Dann macht das ganze auch Sinn und ist komfortabel.
Prerequisites:
- libnotify-bin
- xclip
- um gemappte Laufwerke (s. Beispiel oben) zu nutzen, müssen diese an einem zentralen Punkt beispielsweise per auto-mounter zur Verfügung stehen. Im Script ist das ganze bei mir unter /mnt/cifs/ gemappt. Diese einzelnen Laufwerke und deren Pfade müssen im Script angepasst werden.
#!/usr/bin/perl -w
#
# Script zum oeffnen von Windows "Links" unter Ubuntu
#
# - Umsetzung von Links wie I:\Ordner\dokument.doc
# - das Dokument wird direkt geoeffnet
# - Umsetzung von Links wie I:\Ordner
# - der Ordner wird in Nautilus geoeffnet
# - Umsetzung von Links wie \\Server\... wird ebenfalls unterstuetzt
#
# Prerequisites:
# - libnotify-bin
# - xclip
#
# Ronny Becker, 02.2009
# get clipboard data
$path=`xclip -o -selection c`;
chomp($path);
# show information
system("DISPLAY=:0.0 dbus-launch /usr/bin/notify-send -u low -t 3000 \"Win Path\" \"\nöffne\n\n\'$path\'\"");
if ( $path !~ /[a-zA-Z]/ ) { exit; }
# LW \\...
if ( $path =~ /^\\\\/ ) {
$path =~ s/^\\\\/smb:\/\//;
}
# for each drive a separate config
# LW Q (Dokumentation)
if ( $path =~ /^[qQ]:/ ) {
$path =~ s/^[qQ]:/\/mnt\/cifs\/Q/;
}
# mapped drive I
if ( $path =~ /^[iI]:/ ) {
$path =~ s/^[iI]:/\/mnt\/cifs\/I/;
}
# mapped drive W
if ( $path =~ /^[wW]:/ ) {
$path =~ s/^[wW]:/\/mnt\/cifs\/W/;
}
# mapped drive L
if ( $path =~ /^[lL]:/ ) {
$path =~ s/^[lL]:/\/mnt\/cifs\/L/;
}
# set \ to /
$path =~ s/\\/\//g;
# if the link target is a document use xdg-open, otherwise open with nautilus (folder)
if ( $path =~ /\.[a-z]{3}$/ ) {
system("xdg-open \"$path\"");
} else {
system("nautilus \"$path\"");
}
Download: win_path
Damit man sieht, dass das Script auch ausgeführt wird, wird der an das Script übergebene Link per “Bubble” angezeigt. Das Script kann natürlich auch auf der Konsole ausgeführt werden – z.B. zur Fehlersuche.
[Update]
Ein Update wegen eines xclip Problems gibt es hier.
Winbind und idmap_rid
31. Mrz
Ich weiß nicht warum, aber die ganze Welt schimpfen auf Winbind. Ist aber meiner Meinung nach oft zu unrecht, denn es kann einem viel Arbeit beim AD/LDAP/ID Mapping ersparen. Wer Winbind noch nicht kennt, Winbind mappt die Windows SIDs auf lokale Linux UIDs und GIDs, sodass man unter Linux mit den Active Directory Benutzern und Gruppen arbeiten kann.
Meist wird winbind aber nicht eingesetzt, da es im nicht konfiguriertem Zustand zu einer Windows SIDs auf verschiedenen Servern unterschiedliche UIDs bzw. GIDs zurück liefert. Das ist in einer professionellen Umgebung natürlich inakzeptabel.
Die Lösung, die komischerweise nur wenige kennen hier, ist idmap_rid. Mit diesem Winbind Backend werden auf allen Linux Servern die selben UIDs zu Windows SIDs generiert.
Hier unsere Konfiguration mit idmap_rid in Kurzform (wer noch mehr wissen möchte einfach mich anschreiben).
Zunächst die Kerberos Konfiguration:
/etc/krb5.conf:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = <SUBDOM.DOMAIN.DE>
dns_lookup_realm = true
dns_lookup_kdc = yes
ticket_lifetime = 24h
forwardable = yes
[realms]
<SUBDOM.DOMAIN.DE> = {
default_domain = <subdom.domain.de>
}
[domain_realm]
.<subdom.domain.de> = <SUBDOM.DOMAIN.DE>
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Die nsswitch nicht vergessen:
/etc/nsswitch.conf:
... passwd: files winbind shadow: files winbind group: files winbind ...
Und hier die Einträge in der smb.conf:
/etc/samba/smb.conf
[global] workgroup = <WORKGROUPNAME> security = ads realm = <SUBDOM.DOMAIN.DE> password server = * wins server = load printers = no printcap name = /etc/printcap idmap domains = DLD idmap config DLD:backend = rid idmap config DLD:range = 40000-1000000 winbind separator = / template shell = /bin/bash winbind enum users = yes winbind enum groups = yes winbind use default domain = yes acl group control = yes [test] comment = Test Share for domain users only path = /smbdata read only = yes valid users = @"DOM/domain users" write list = "DOM/testy"
Die wichtigen Zeilen sind hier die drei idmap Einträge. Hier habe ich als backend, für die Berechnung der Linux UIDs und GIDs das Modul “rid” angegeben sowie eine Range für die IDs von 40.000 – 1.000.000 reserviert, sollte reichen…
Nachdem einem
net ADS join -U <username>
kann mit
wbinfo -t
die Winbind Konfiguration getestet werden. Ist hier alles OK sind die AD SIDs dem Linux bereits bekannt.
Prüfen:
getent passwd | grep testy testy:*:65435:78221:USERNAME:/home/DOM/testy:/bin/bash
Der Benutzer testy hat bei dieser Konfiguration auf allen Linux Servern die uid 65435.
Nun dürfen alle Benutzer aus der AD Gruppe “domain users” auf die Samba Freigabe test zugreifen und testy darf zusätzlich schreiben.
Das ganze funktioniert übrigens auch mit mehreren Domains! Die Manpage “man idmap_rid” hilft weiter.
Einziger Nachteil ist hier, dass man jedem dieselbe Shell zuweisen muss. Das benötigt man ja aber eh nur, wenn sich der Benutzer auch direkt am System anmelden möchte.
Also: Winbind ist nicht nur böse! Nicht immer drauf rumhacken!
Linux & Windows Links: schöner öffnen mit win_path [Update]
05. Feb
Heute morgen haben wir festgestellt, dass die xclip Version unter Ubuntu 9.10 (Karmic) kein UTF-8 unterstützt. Die Versionen ab 0.11 unterstützen UTF-8 – Karmic kommt mit v0.08.
Das ganze fällt auf, wenn man Links hat in denen Sonderzeichen enthalten sind (im Pfad oder dem Dateinamen). Ich habe kurzerhands die aktuelle xclip Version auf Karmic compiliert und stelle sie hier zur Verfügung. Um den Aufwand gering zu halten nicht als .deb, sondern einfach als Binary. Das legt ihr unter /usr/bin/ ab und gut (vorher das installierte löschen).




