Linux als SOHO-Server

für Linux- und Windows-Clients
http://linux.eusterholz.dyndns.org

Kapitel:

Home
Debian Installation
Debian Etc.
Internet-Zugang
Telnet
FTP
r-Utilities
SSH
Printing
NTP
Nameserver
NFS/NIS/Automount
Samba (SMB-Server)
Apache (WEB-Server)
Modem / ISDN
Backup
Etc.


Sonstiges

Installation ] Vorbemerkungen ] 'Stand-alone'-Server ] Domänencontroller ] Netz-Drucker ] Windows-Zugriff ] Linux-Zugriff ] SWAT ] [ Sonstiges ]


Auf der vorliegenden Seite werden einige Erweiterungen bezüglich im Umgang mit Samba aufgeführt. Die Seite kann als unstrukturierte kleine HowTo-Sammlung angesehen werden.

CD/DVD-Laufwerk als Netzlaufwerk

Sollte der Samba/Linux-Server über ein CD- oder DVD-Laufwerk verfügen, kann es sinnvoll sein, dieses dem SMB-Nutzern, sozusagen als CD/DVD-Server zur Verfügung zu stellen. Die Bereitstellung kann wie eine Normale Freigabe in der Konfigurationsdatei eingebracht werden, Hierzu ein Beispielauszug aus der 'smb.conf':

Auszug aus: /etc/samba/smb.conf

...
[cdrom]
        comment = CD-ROM Laufwerk
        path = /media/cdrom
        fake oplocks = Yes
        locking = No
        share modes = No
        root preexec = /bin/mount /dev/cdrom /media/cdrom
        root postexec = /bin/umount /media/cdrom
...

Beim Zugriff auf die Freigabe, wird eine im Laufwerk befindliche CD/DVD automatisch ge-mountet. Bei Nichtbenutzung, wird das Laufwerk wieder un-mountet. Für das automatische mounten/un-mounten des CD/DVD-Laufwerks kommen die Parameter: 'root preexec' und 'root postexec' zum Einsatz.

Zugriff auf FTP-/HTTP-Datenbereich

Sollte neben Samba-Dienst noch ein FTP- oder HTTP-Dienst betrieben werden, kann es für den Administrator bequem sein, die Pflege des Datenbereichs über den Explorer unter Windows durchzuführen. Auch hierfür können normale Freigaben in der 'smb.conf' eingebracht werden:

Auszug aus: /etc/samba/smb.conf

...
[ftp]
        comment = FTP Verzeicnisse (anonym)
        path = /usr/local/ftp
        valid users = root, @root
        read only = No
        browseable = No

[http]
        comment = HTTP Verzeichnisse
        path = /usr/local/httpd
        valid users = root, @root
        read only = No
        browseable = No
...

Der Zugang zu den beiden Datenbereichen sollte nur den Administratoren erlaubt sein.

Passwort-Synchronisation

Die Samba-Passwortdatei '/etc/samba/smbpasswd' und die System-Passwortdatei '/etc/passwd' lassen sich bei Änderung der Benutzerpasswörter synchronisieren. Dazu sind in der 'smb.conf' folgende Zeilen in der Sektion '[globals]' einzufügen:

Auszug aus: /etc/samba/smb.conf

[global]
        ...
        unix password sync = Yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *new*password* %n\n *new*password* %n\n *changed*
        ...

Der Parameter 'unix password sync = Yes' aktiviert die Synchronisation zwischen den beiden Passwortdateien. Mit 'password program' wird das Programm festgelegt, welches für die Änderung des Passworts verantwortlich ist, '%u' steht dabei für den User. Der 'passwort chat' ist der String, der als Dialog läuft, wenn ein Benutzer sein Passwort ändert. Die Variable '%n\n' steht dabei für das neue Passwort, gefolgt von der Eingabetaste. Das Zeichen '*' steht dabei für beliebige Zeichen.

Winpopup

Winpopup-Ausgaben sind sich öffnende Fenster auf einem Client, indem kurze Nachrichten für den Client stehen. Bei den NT-Betriebssystemen ('Win NT 4', 'Win 2000', 'Win XP') ist der entsprechende Messenger-Dienst, für die Darstellung der Winpopup-Ausgaben permanent aktiv.

Um unter 'Windows NT' eine Nachricht zu versenden, kann das eingebaute Kommando 'net send' genutzt werden. Mit dem Kommando können Nachrichten an andere Benutzer-, Computer- oder Nachrichtennamen im Netzwerk gesendet werden.

net send {Name | * | /domain[:Name] | /users} Nachricht

z.B.:

net send ovation "Das ist eine Nachricht !"

Bei den Betriebssystemen 'Windows 9x/ME' ist dazu das Programm 'winpopup.exe', welches zum Lieferumfang der Betriebssysteme gehört, zu starten. Ist das Programm gestartet, so können Nachrichten empfangen, als auch gesendet werden.

Unter Linux, sofern Samba installiert ist, können auch Nachrichten empfangen werden. Dazu muss Samba mitgeteilt werden, wie die Nachricht zu verarbeiten ist. Hierzu dient der Parameter 'message command' der in der Sektion '[global]' der Konfigurationsdatei 'smb.conf' einzufügen ist:

Auszug aus: /etc/samba/smb.conf

[global]
        ...
        message command = echo "Nachricht von %f an %t" ´cat %s´ | ´cat %s´ | wall; rm %s
        ...

Dieser Befehl wird ausgeführt, sobald eine Nachricht empfangen wird. Dabei steht '%f' für den Namen des Absenders und '%t' für den Namen des Empfängers (normalerweise ist nur der Servername möglich). Das Makro '%s' ist der Dateinamen in dem die Nachricht sich befindet.

Eine wesentlich komfortablere Möglichkeit bietet das Programm 'LinPOPUP', welches unter einer graphischen Oberfläche (z.B. KDE oder Gnome) zu betreiben ist. Das Programm kann ebenfalls, ähnlich wie 'winpopup.exe' Nachrichten empfangen und senden.

Unter Linux ist das versenden von Nachrichten mit dem Programm 'smbclient' (welches zu Samba gehört) möglich. Um eine Nachricht zu versenden ist der Parameter '-M' zu verwenden:

smbclient -M <HOST>

Nach dem Kommando kann der zu sendende Text eingegeben werden, mittels der Tastenkombination 'STRG' & 'D' wird der Text abgesendet. Als Host ist der 'NetBIOS'-Name anzugeben, an dem die Nachricht gelangen soll.
Möchte man den Text nicht von Hand eintragen, sondern einen statischen Text versenden, kann Folgendes angewandt werden:

echo "Das ist eine Nachricht !" | smbclient -M <HOST>

Leider ist es nicht möglich, mit 'smbclient' eine Nachricht an alle im Netzwerk befindlichen Clients zu senden (Broadcast-Message), um eine globale Information zu versenden. Damit auch dieses möglich wird kann ein kleines Shell-Script erstellt werden:

/etc/samba/msg2all.sh

#!/bin/sh

##############################################################################
# PATH: /etc/samba/msg2all.sh                                                #
# DESCRIPTION: send a winpopup to all hosts                                  #
# USAGE: /etc/samba/msg2all.sh <message>                                     #
# AUTHOR: Norbert Eusterholz <norbert@eusterholz.com>                        #
# HISTORY:                                                                   #
# +------------+----------------------------------------------------+------+ #
# | DATE       | CHANGES                                            | NAME | #
# +============+====================================================+======+ #
# | 2002.09.16 | creation (SuSE 8.0)                                | NE   | #
# +------------+----------------------------------------------------+------+ #
##############################################################################

MESSAGE=$1
SUBNET="192.168.10"

for i in `nmblookup '*' -T | grep ", $SUBNET" | cut -d. -f1`
do
        echo -e $MESSAGE | smbclient -M $i > /dev/null
done

Das Shell-Script sendet an alle bekannten Benutzer im Subnetz nacheinander eine Nachricht ('for'-Schleife). Die in Frage kommenden Rechner werden mit dem 'nmblookup'-Kommando bestimmt. 'grep' und 'cut' extrahieren dabei den 'NetBIOS'-Namen (grüne Markierung).
Das eigentliche Senden der Nachricht geschieht wir schon bekannt, mit 'smbclient' (gelbe Markierung, innerhalb der 'for'-Schleife).
Um nun eine Nachricht zu senden ist das Script z.B. wie folgt aufzurufen:

./msg2all.sh 'ACHTUNG:\n\nNetzwerk wird in 10 Minuten Heruntergefahren !'

Danach sollten alle Clients mit der Nachricht versorgt werden.

ACL-Support

Mittels ACLs (Access Control Lists) ist es möglich zu kontrollieren, welche Benutzer zu welchen Diensten (Dateien, Netzwerkdiensten) Zugang haben. Dabei sind die ACLs feiner einstellbar als die regulären Zugriffsrechte unter Unix/Linux, die nur Benutzerkennung oder Gruppenzugehörigkeit berücksichtigen. Auch wird die Homogenität zwischen neueren Windows Betriebssystemen (z.B.: W2K/XP mit NTFS-Dateisystem) und einem Linux/Samba-Server verbessert, da auch Windows-Clients die ACL-Funktionalität auf Netz-Freigaben einsetzen können.

Damit auch unter Linux in Kombination mit Samba vom Windows-Client aus ACLs genutzt werden können, sind einige Bedingungen und Vorraussetzungen zu beachten:

  • Kernel-Unterstützung
    Damit ACL-Unterstützung gegeben ist, müssen die erweiterten Attribute und ' POSIX Access Control Lists' im Linux-Kernel unterstützt werden. Gegebenfalls muss dieses bei der Kernel-Konfiguration unter 'File system' aktiviert werden; anschließend ist der Kernel neu zu übersetzen und zu installieren. Um festzustellen ob der Kernel dieses berücksichtigt, kann das folgende Kommando eingegeben werden:

        meridian:~# grep "XATTR\|POSIX_ACL" /boot/config-$(uname -r)
        CONFIG_EXT2_FS_XATTR=y
        CONFIG_EXT2_FS_POSIX_ACL=y
        CONFIG_EXT3_FS_XATTR=y
        CONFIG_EXT3_FS_POSIX_ACL=y
        # CONFIG_REISERFS_FS_XATTR is not set
        CONFIG_JFS_POSIX_ACL=y
        CONFIG_FS_POSIX_ACL=y
        CONFIG_XFS_POSIX_ACL=y
        CONFIG_DEVPTS_FS_XATTR=y
        # CONFIG_CIFS_XATTR is not set
        meridian:~#


    Die ACL relevanten Parameter sollten mit 'y' aktiviert sein. Unter Debian/GNU (Sarge) ist der Standard-Kernel bereits für ACL-Unterstützung vorgesehen, d.h. es brauchen normalerweise keine Änderung durchgeführt werden.
  • Dateisystem
    Unter Linux unterstützen die Dateisysteme: 'ext2', 'ext3', 'JFS' und 'ReiserFS' ACLs vollständig. Unter Debian empfiehlt sich bei ACLs auf das 'ext3'-Dateisystem zurückzugreifen.
    Es genügt jedoch nicht einfach eine Partition mit 'ext3' zu formatieren um ACLs nutzen zu können, sondern beim Mounten der Partition muss dieses explizit aktiviert werden. Soll z.B. die Partition 'hda1' für ACL-Unterstützung genutzt werden, kann zum Mounten folgendes Kommando genutzt werden:

        mount -o remount,acl /dev/hda1

    Als Mount-Option ist 'acl' zusätzlich anzugeben.
    Damit die Mount-Optionen bei jeden Hochlauf des Systems berücksichtigt wird, sollte diese in die Datei '/etc/fstab' eingebracht werden:
     

    Auszug aus: /etc/fstab

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>  <type>    <options>                      <dump> <pass>
    proc            /proc          proc      defaults                       0      0
    /dev/hda1       /              ext3      acl,defaults,errors=remount-ro 0      1
    /dev/hda5       none           swap      sw                             0      0
    /dev/fd0        /media/floppy0 auto      rw,user,noauto                 0      0

    Beim Eintrag des Schlüsselworts 'acl' ist zu beachten, dass dieses vor dem Bezeichner 'defaults' eingefügt wird, anschließend ist das Linux-System neu zu starten.

  • Linux-Tools für ACL-Support
    Zum Bearbeiten der ACL-Rechte unter Debian ist das entsprechende Paket mit 'apt-get install acl' zu installieren. In dem Paket befinden sich die 'getfacl'- und 'setfacl'-Tools zum manipulieren der ACLs.
  • Samba ACL-Unterstützung
    Auch in den Samba-Komponenten muss die Unterstützung von Attributen und ACL eingebaut sein. Mit folgenden Kommando kann dies überprüft werden:

        meridian:~# ldd $(which smbd)| grep "attr\|acl"
                libacl.so.1 => /lib/libacl.so.1 (0x4017c000)
                libattr.so.1 => /lib/libattr.so.1 (0x40347000)
        meridian:~#


    Samba benutzt die 'libacl' und 'libattr' um vollen ACL-Support der Shares zu gewährleisten. Sollten diese nicht mit bei der Kompilierung mit berücksichtigt sein, so muss Samba mit den entsprechenden Optionen neu übersetzt werden.
    Unter Debian/GNU 3.1 (Sarge) ist die Unterstützung von ACLs bei Samba bereits gegeben, d.h. das Standard-Paket 'samba' kann einfach installiert werden.

Arbeiten mit ACLs unter Linux

Um unter Linux auf der Kommandozeile mit ACLs zu arbeiten können die Tools 'getfacl' und 'setfacl' genutzt werden. Hierzu ein Beispiel mit der Datei 'acl.txt' die sich im Verzeichnis '/home/linux/tmp' befindet:

Die Datei wurde zunächst als Benutzer 'linux' normal angelegt; hier die Langform der Verzeichnisausgabe:

meridian:/home/linux/tmp# ls -lisa
insgesamt 16
7274553 4 drwxrwxr-x 3 linux users 4096 2006-03-26 10:02 .
7225345 4 drwxr-xr-x 8 linux users 4096 2006-03-25 09:34 ..
7274608 0 -rwxr--r-- 1 linux users 0 2006-03-26 10:02 acl.txt
meridian:/home/linux/tmp#

Um sich nun die ACLs der einzelnen Dateien anzuzeigen zu lassen, wird der Befehl 'getfacl' genutzt, aus Kompatibilitätsgründen werden die klassischen Zugriffsrechte ebenfalls ausgegeben:

meridian:/home/linux/tmp# getfacl acl.txt
# file: acl.txt
# owner: linux
# group: users
user::rwx
group::r--
other::r--

meridian:/home/linux/tmp#

Um nun zusätzliche Zugriffsrechte für diese Datei zu setzen ist der 'setfacl' anzuwenden,

setfacl -m u:norbert:rw- acl.txt

Mit dem Befehl wird nun dem Benutzer 'norbert' das Recht zum Lesen und Schreiben auf die Datei gegeben.
Eine erneute Ausgabe mit 'getfacl' ergibt nun:

meridian:/home/linux/tmp# getfacl acl-test.txt
# file: acl-test.txt
# owner: linux
# group: users
user::rwx
user:norbert:rwx
group::r--
mask::rwx
other::r--

meridian:/home/linux/tmp#

Der neue Eintrag 'user:norbert:rwx' sollte nun zusätzlich bei der Ausgabe erscheinen. Bei der Ausgabe des Verzeichnisinhalts mit 'ls -lisa' sollte folgendes erscheinen:

meridian:/home/linux/tmp# ls -lisa
insgesamt 20
7274553 4 drwxrwxr-x 3 linux users 4096 2006-03-26 10:02 .
7225345 4 drwxr-xr-x 8 linux users 4096 2006-03-25 09:34 ..
7274608 4 -rwxrw-r--+ 1 linux users 0 2006-03-26 10:02 acl.txt
meridian:/home/linux/tmp#

Zu erkennen ist das sich hinter der Spalte Zugriffsrechte ein '+'-Zeichen befindet, welches auf vorhandene ACLs hinweist. Die Rechte für die Gruppe stehen jetzt auf 'rw-'.

Sichern/Wiederherstellen von ACLs

Um die ACL-Informationen von allen Dateien und Verzeichnissen zu sichern kann ebenfalls Programm 'getfacl' genutzt werden. Hierzu ein Beispiel:
getfacl --recursive --skip-base /home > backup.acl
Mit der Option '--recrusive' wird alles ausgehend vom Verzeichnis '/home' gesichert, mit der Option '--skip-base' werden alle Dateien ausgelassen die Standard-Unix-Rechte besitzen. Laut Empfehlungen sollte man für jedes Datei-System eine eigene ACL-Sicherung durchführen. Im vorliegenden Beispiel ist das Verzeichnis '/home' auf einem eigenen Datei-System untergebracht.

Das Wiederherstellen der ACLs aus der Sicherungsdatei kann mit dem Befehl 'setfacl' erfolgen:

setfacl --restore=backup.acl

Das Wiederherstellen ist durchzuführen nachdem z.B. eine Datensicherung zurückgespielt wurde.

Arbeiten mit ACLs unter Windows

Um unter Windows die ACLs einer Datei zu beeinflussen, sind mit der rechten Maustaste die Eigenschaften der Datei aufzurufen. Unter dem Reiter 'Sicherheit' können die Rechte eingesehen werden. Die erweiterten Zugriffsrechte können durch den Button 'Erweitert' angezeigt und modifiziert werden:

  

Zu beachten ist, dass der Dialog auch dann zur Verfügung steht, wenn der Samba-Server ACLs nicht unterstützt. Nach gemachten Änderungen, sollten diese nochmals überprüft werden, ob diese tatsächlich übernommen wurden.

Weitere Infos

Homepage: Samba http://www.samba.org/
The Official Samba-3 HOWTO and Reference Guide http://us4.samba.org/samba/docs/man/Samba-HOWTO-Collection/
Samba-3 by Example http://us4.samba.org/samba/docs/man/Samba-Guide/
Deutschsprachige Übersetzung der Dokumentation zu Samba 3 http://gertranssmb3.berlios.de/
Samba Version 3.0.9-Referenz http://www.millin.de/downloads/3-89990-121-5/kapitel17/index.html
Samba, 2. Auflage http://www.oreilly.de/german/freebooks/samba2ger/
Manualseite zu: smbclient man smbclient
Hilfe von Windows Start/'Hilfe und Support'
LinPopUp http://www.littleigloo.org/downloads.php3
Unofficial Samba + ACL Howto http://www.bluelightning.org/linux/samba_acl_howto/
Access Control Lists (ACLs) unter Debian Sarge mit Kernel 2.6 einrichten http://www.brueck-computer.de/index2.php?modul=1401&link=1
Manualseiten zu: ACL man acl

Home ] Nach oben ] Installation ] Vorbemerkungen ] 'Stand-alone'-Server ] Domänencontroller ] Netz-Drucker ] Windows-Zugriff ] Linux-Zugriff ] SWAT ] [ Sonstiges ]

letzte Änderung: 26. März 2006

 

Copyright © 2004 Norbert Eusterholz