Kategorie-Archiv: Linux

Samba: Automatisches Erzeugen von Computeraccounts

Momentan versuche ich einen Ubuntu 7.10 Samba Server als Primary Domain Controller zu konfiguieren. Das Hinzufügen eines Computers zur Domäne klappte – allerdings nur, wenn vorher der Computeraccount (Beispielsweise TOM$) angelegt wurde. Andernfalls kam (nach smbcontrol smbd debug 3 – um den Loglevel auf 3 zu setzen) die Meldung „Could not find user TOM$ and no add script defined.

Aber ich hatte einen add user script definiert. Dem aufmerksammen Leser wird auffallen: add user script ist quatsch – wir benötigen einen add machine script. Hat man das rausgefunden, muss man das Beispiel aus den Samba-Manuals nur noch auf seine Bedürfnisse anpassen. Unter Ubuntu ist zu beachten, dass ein Dollar-Zeichen im Benutzernamen verboten ist, gerade dieses Dollarzeichen ist aber in den Computer-Account-Namen enthalten und macht die Option –force-badname nötig.

Mit der Zeile
/usr/sbin/adduser --disabled-login --ingroup machines --gecos "" --shell /bin/false --force-badname %u
im Abschnitt [globals] der Datei smb.conf hat es dann endlich funktioniert. Feierabend!

Software Updates aus Äthiopien

Gut ist, dass bei Ubuntu immer so schön wirklich alle unterstützen Software-Komponenten ständig akualisiert werden können. Blöd ist nur, wenn man keine so schnelle Internet Verbindung hat. Hier ist – soweit ich das erfahren habe – das gesamte Land über eine 40 MBit Satellitenverbindung angebunden. In der Mittagspause und Nachts ist der Zugang etwas schneller …Update-Download

Windows Rechtesystem

Ich habe ein interessantes Tool entdeckt, mit dem man unter Windows Zugriffsberechtigungen relativ komfortabel per Befehlszeile setzen kann. Also das Äquivalent zum chmod der Unixwelt.

Das Problem ist wohl einfach, dass die Windows ACLs einfach unnötig kompliziert sind: Sprich in der Praxis werden Sie seltenst voll ausgereizt und die Gefahr, dass ein unbedarfter Hobby-Administrator völlig an der Komplexität verzweifelt und einfach nur noch „jedem überall“ Zugriff gibt, ist groß.

Hier mal die Zugriffsberechtigungen auf einem Standard-XP-System auf die Datei C:\boot.ini

C:\Programme\Windows Resource Kits\Tools>subinacl /file c:\boot.ini

==================
+File c:\boot.ini
==================
/control=0x1400 SE_DACL_AUTO_INHERITED-0x0400 SE_DACL_PROTECTED-0x1000
/owner =vordefiniert\administratoren
/primary group =system
/audit ace count =0
/perm. ace count =3
/pace =vordefiniert\hauptbenutzer ACCESS_ALLOWED_ACE_TYPE-0x0
Type of access:
Read
Detailed Access Flags :
FILE_READ_DATA-0x1 FILE_READ_EA-0x8 FILE_EXECUTE-0x2
0
FILE_READ_ATTRIBUTES-0x80 READ_CONTROL-0x20000 SYNCHRONIZE-0x10
0000
/pace =vordefiniert\administratoren ACCESS_ALLOWED_ACE_TYPE-0x0
Type of access:
Full Control
Detailed Access Flags :
FILE_READ_DATA-0x1 FILE_WRITE_DATA-0x2 FILE_APPEND_DATA
-0x4
FILE_READ_EA-0x8 FILE_WRITE_EA-0x10 FILE_EXECUTE-0x2
0 FILE_DELETE_CHILD-0x40
FILE_READ_ATTRIBUTES-0x80 FILE_WRITE_ATTRIBUTES-0x100 DELETE-0x10000
READ_CONTROL-0x20000
WRITE_DAC-0x40000 WRITE_OWNER-0x80000 SYNCHRONIZE-0x10
0000
/pace =system ACCESS_ALLOWED_ACE_TYPE-0x0
Type of access:
Full Control
Detailed Access Flags :
FILE_READ_DATA-0x1 FILE_WRITE_DATA-0x2 FILE_APPEND_DATA
-0x4
FILE_READ_EA-0x8 FILE_WRITE_EA-0x10 FILE_EXECUTE-0x2
0 FILE_DELETE_CHILD-0x40
FILE_READ_ATTRIBUTES-0x80 FILE_WRITE_ATTRIBUTES-0x100 DELETE-0x10000
READ_CONTROL-0x20000
WRITE_DAC-0x40000 WRITE_OWNER-0x80000 SYNCHRONIZE-0x10
0000

Elapsed Time: 00 00:00:00
Done: 1, Modified 0, Failed 0, Syntax errors 0
Last Done : c:\boot.ini

Zum Vergleich die Linux Dateiberechtigungen:


self@self-laptop:~$ ls -al /boot/grub/menu.lst
-rw-r--r-- 1 root root 6146 2007-06-17 19:39 /boot/grub/menu.lst

damit kann man doch meist auch ganz gut leben?

OCR unter Linux

Wir würden gerne unsere Eingangsbelege halbautomatisch via OCR erfassen. Deshalb habe ich mich nach den OCR-Möglichkeiten unter Linux umgeschaut.

Es gibt zwar einige Software (gocr, ocrad, tesseract) die leide jedoch schon relativ alt und nicht mehr auf dem aktuellen Stand der Technik ist. Ocrad hat den Vorteil, dass es immerhin auch deutschen Text (d.h. auch Umlaute) erkennen kann. Das kann mein aktueller Favorit – tesseract – leider noch nicht. Ansonsten scheint tesseract aber die genausten Ergebnisse zu liefern.

Und jetzt die gute Nachricht: Google hat sich vor kurzem der Weiterentwicklung von tesseract angenommen: Tesseract wird zu Google-Code umgezogen (Projektseite) und für das Wochenende (21.7.) ist die Version 2.0 – welche unter anderem auch Deutsch unterstützt – angekündigt. Ich gespannt auf die Verbesserungen.

find ist toll

Man lernt ja unter Linux jeden Tag etwas neues. Zum Beispiel wie toll find ist 🙂

Mit

find -mmin -10

bekommt man beispielsweise alle in den letzten 10 Minuten geänderten Dateien. (das „-„“ steht dabei für kleiner, +10 bedeutet größer als 10 und nur 10 eben genau 10)

Nun kann man diese Liste von Dateien entweder per Backtick-Operator an einen anderen Befehl weitergeben:

cat `find -mmin -10`

Oder find selbst einen Befehl aufrufen lassen. Dafür ist die Option -exec gedacht. Man gibt einfach einen Befehl an, der für jede gefundene Datei ausgeführt werden soll. {} kann man dabei als Platzhalter für die Dateinamen verwenden. Etwas gewöhnungsbedürftig ist, dass man den Befehl mit \; abschließen muss, damit es funktioniert:

find -mmin -15 -exec echo {} \;

Oder um alle in den letzten 15 Minuten veränderten Dateien zu löschen (VORSICHT!):
find -mmin -15 -exec rm {} \;

Ich kann jedem Unix Nutzer, der das noch nicht längt getan hat, die Lektüre der Man-Page zu find nur empfehlen.

MySQL-Datenbank über das Netz kopieren

Als Webentwickler kommt man ja öfter mal in die Situation eine Datenbank zwischen zwei Hosts kopieren zu müssen. Meist ist der MySQL Server so konfiguriert, dass nur lokale Verbindungen erlaubt sind. Ein MySQL-Verbindungsaufbau vom Host Ziel zum Host Quell fällt also schonmal flach. Meist wird man sich also mysqldump oder phpMyAdmin behelfen. Am einfachsten geht es wohl, wenn man mysqldump und den mysql-Kommandozeilen-Client einfach hintereinander schaltet – mit einer SSH Verbindung dazwischen. Und weil es so einfach ist, werden die Daten vor dem Versand über das Netz noch komprimiert.

Heraus kommt ein Einzeiler, $server sei dabei die Adresse des Quell-Hosts und $db der Datenbankname (die Datenbank muss auf dem Zielrechner bereits exisitieren). Nun kann man auf dem Ziel-Rechner folgendes eingeben:

(ssh $server mysqldump -u root $db -p |gzip) |gunzip | mysql -u root $db

Hier wurde für den Zugriff auf die Quell-Datenbank der MySQL-Benutzer root mit Kennwort verwendet, auf dem Zielrechner sogar der MySQL Benutzer root ohne Kennwort – da es sich in dem Fall um meinen Laptop handelt und MySQL von außen nicht erreichbar ist 🙂
Ich denke, dass Prinip sollte klar geworden sein.

Zombieprozesse..

Ich habe mich gerade über die vielen Prozesse auf einem unserer Server gewundert (ps aux|grep defunct) und beim googlen einen Link gefunden, der das Problem recht anschaulich erklärt.
Da es sich in erster Linie um Bash-Prozesse handelt, sind die Ursache wohl in den meisten Fällen inkorrekt abgebrochene SSH-Verbindungen.

PDF mit Dateianhängen

Ich habe soeben eine PDF Datei mit Anhängen bekommen mit dem Hinweis, man solle doch bitte im Acrobat Reader das Fenster Anhänge öffnen um diese anzuzeigen. Leider zeigt der Gnome Dokumentenbetrachter solche Anhänge nicht an.

Es geht aber trotzdem ganz einfach mit dem PDF Toolkit:

1. aptitude install pdftk
2. pdftk dateimitanhang.pdf unpack_files output .

Kcachegrind


Ich habe gerade einmal – angeregt durch einen Thread auf Ubuntuusers näher mit Profiling beschäftigt und valgrind nochmals genauer ausprobiert.

Das Programm untersucht lauffähige Programme mit verschiedensten Tools, z.B. auf Speicherlecks oder auch generell die Laufzeit einzelner Funktionen.

Gestartet wird das z.B. mit

valgrind –tool=callgrind ./meinbinary

Die gesammelten Informationen kann man nun ziemlich nett aufbereitet mit dem KDE-Tool kcachegrind angesehen werden:

kcachegrind callgrind.out.XXXXX

Das Ergebnis ist rein optisch schon ziemlich interessant – finde ich 🙂

Wirklich informativ ist das aber leider nicht, wie man bei genauerem Hinschauen feststellt. Deshalb sollte man auf jeden Fall sein Programm mit Debug-Informationen kompilieren – dann wird auch angezeigt in welcher Codezeile die meiste Zeit verloren ging.

Zombieprozesse..

Ich habe mich gerade über die vielen Prozesse auf einem unserer Server gewundert (ps aux|grep defunct) und beim googlen einen Link gefunden, der das Problem recht anschaulich erklärt.
Da es sich in erster Linie um Bash-Prozesse handelt, sind die Ursache wohl in den meisten Fällen inkorrekt abgebrochene SSH-Verbindungen.