Kleine und große Linux AHAs
Beiträge getaggt mit samba
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).


