19.04.2023

Programminstallation unter Linux

Apache Webserver
Samba Server
eMail-Server
Kerberos einrichten
OpenSSH Server / Client
DSL Konfiguration unter Linux
NTP Server / Client
DNS Server
Subversion
iSCSI
LDAP-Server
Radius-Server
OpenSSL-Server einrichten
NNTP Server (NEWS-Server) INN und Leafnode
DHCP-Server einrichten
SNMP Service einrichten
Stunnel einrichten
MySQL-Server einrichten
Datensicherung auf Bandlaufwerk
Audio CDs in WAV umwandeln
CDs und DVD erstellen
Grafiken bearbeiten erstellen
FAX Versand und Empfang
Web und FTP Sites syncronisieren
Verschlüsselung von E-Mails und Dokumenten
Programm Übersicht
Datenrettung
Linux Terminalserver
PXE Boot
sonstige Programme

Seitenanfang

Samba Server

Installation
Sambe Authentifizierung
Befehle
/etc/smb.conf Variablen
/etc/smb.conf Globale Parameter
/etc/smb.conf Share Parameter
Samba als Standalone Server
Samba als Domaincontroller
Samba Mitgliedsserver Domain
Samba Mitgliedsserver ADS
DC-Verbindungsproxy winbindd
SWAT (Samba Web Administrationstool)
Drucken mit SAMBA
DFS mit Samba
Zugriff auf Freigabe
Samba mit Windows administrieren
sonstiges

Seitenanfang

Installation

tar xvfz samba-lastest.tar.gz Packet entpacken
./configure Installation vorbereiten
make install Installation
make installbin  
make installman  
make revert  
Pakete Debian
samba samba-common samba-doc Hauptprogrammpakete
smbclient Linux Konsolenclient
linneighborhood Linux X-Client, mit Share mounten
smbfs Linux Share mounten auf der Konsole und mit Linneighborhood
tdb-tools TDB- Tools, tdbbackup, tdbdump, tdbtool
winbind Winbindd Daemon
   
Samba Daemonen
smbd SMB Server
nmbd Netbios Name Server Daemon
winbindd Verbindungsproxy für die Kommunikation mit dem DC
Dateien
/etc/samba/smb.conf Konfigurationsdatei
/etc/samba/smbpasswd Standard Passwortdatei (passdb backend = smbpasswd)
/var/lib/samba/passdb.tdb Passwortdatei (passdb backend = tdbsam)
/var/lib/samba/secrets.tdb Maschinenkonto Datei (passdb backend = tdbsam)
/var/lib/samba/winbindd_idmap.tdb Benutzerzuordnung von winbindd
/var/lib/samba/registry.tdb smb.conf Parameter mit Regedit bearbeiten

wenn der Parameter passdb backend = smbpasswd gesetzt ist, ist es nicht möglich unterschiedliche Eigenschaften z.B. für Profilpfade zu setzen, die ist erst mit dem Parameter passdb backend = tdbsam möglich. Da die passdb.tdb nicht im normalen laufenden Betrieb gesichert werden kann, muss man den Daemon anhalten, oder vor der Sicherung mit tdbbackup /var/lib/samba/passdb.tdb als .bak gespeichert werden.

Seitenanfang

Sambe Authentifizierung

Zugriffsrechte

- Share Level Security (veraltet, sollte nicht mehr zum Einsatz kommen)
Dem Share wird ein Passwort fest zugeordnet. Jeder der das Passwort kennt, hat Zugriff auf das Share

- User Level Security (Standardeinstellung von Samba, Standalone Server oder DCs)
Jeder Benutzer muss sich beim Server mit Passwort anmelden. Abhängig vom Benutzername in smbpasswd

- Server Level Security (veraltet, sollte nicht mehr zum Einsatz kommen)
Samba übergibt alle Passwortanfragen an einen anderen User Level Mode Server, der die Authentifizierung übernimmt ( in smb.conf zusätzlich der Parameter [password server = ] erforderlich) wurde durch security=domain ersetzt.

- Domain Level Security (NTLM Authentifizierung, Mitgliedsserver)
Samba leitet die Passwortanfragen an einen DomainController weiter. Kann auch bei einer W2003 Domain verwendet werden, die Domain kann dabei auch im "Infrastruktur Mode" laufen.

- ADS Level Security (Kerberos Authentifizierung, Mitgliedsserver)
wie Domain Level Security nur mit Kerberos Authentifizierung, die Anmeldelast auf dem DC wird verringert, da das Kerberos Ticket eine gewisse Zeit gültig ist, stellt wesentlich höhere Vorraussetzungen, DNS muss funktionieren, die Zeit zwischen den Server muss angeglichen werden, eine neuere Kerberos Version muss laufen.

# Beispiel Einrichtung Security Level smb.conf
[global]
...
security = user
...
Seitenanfang

Befehle

Befehl Beschreibung
/sbin/init.d/samba start Samba starten
/sbin/init.d/samba restart Konfiguration neu lesen (Restart)
/sbin/init.d/samba stop Samba anhalten
kill -1 (alle smbd) Konfigurationsdatei wird neu eingelesen
killall smbd beendet alle Prozesse von smbd
nmbd -D Dämone für Samba müssen
smbd -D immer beide gestartet werden
smbstatus gibt Informationen über eingelogte Benutzer und offene Dateien
nmblookup Server zeigt IP des Rechners
nmblookup -A 192.168.0.1 zeigt Netbios Namen der IP 192.168.0.1
nmblookup Workgroup -S ähnlich der MS-Dos ausgabe von nbtstat -a NetBIOS-Name
nmblookup -T -M Workgroup Master Browser der Workgroup anzeigen
testparm testet Konfigurations Parameter in smb.conf (nur explizit gesetzte)
testparm -v wie oben, explizit gesetzten und Standardparametern
cat /etc/passwd | mksmbpasswd > /etc/samba/smbpasswd Unix Accounts in die Samba Passwortdatei eintragen, wichtig wenn Global Option "security = user" und "encrypt passwords = yes" für die Verbindung zu W2k oder WXP der Admin muß die Passwörter der Samba User mit "smbpasswd -a Benutzer" eintragen
ypcat passwd | mksmbpasswd > /etc/samba/smbpasswd gleiche Bedeutung wie oben
net groupmap add rid=1000 ntgroup="Master" unixgroup="master" legt eine Windows-Gruppe "Master" auf dem Samba-Server an
net groupmap list zeigt angelegte MAP der Windows-Gruppen zu Unix GID an
net groupmap delete sid=S-1-5-32-545 eine Gruppe löschen
net rpc join -U Administrator Maschinenkonto in einer Domain erstellen
net help rpc Hilfe für die Optionen zeigen
wbinfo -t Verbindung zum DC prüfen
wbinfo -a domain\\user%passwort Authentifizierungsanfrage zum DC schicken
wbinfo -p Ping zum DC schicken
wbinfo -n local\\user1 Windows SID eine DomainUsers oder Gruppe anzeigen
wbinfo -u Windows Domain User anzeigen
wbinfo -g Windows Domain Gruppen anzeigen
   
   
tdbdump /var/lib/samba/passdb.tdb Samba-User Passwortdatei anzeigen
tdbdump /var/lib/samba/secrets.tdb Domain Maschinenkonto Passwortdatei anzeigen
tdbbackup /var/lib/samba/secrets.tdb Backup der Passwortdatenbank anlegen (Binärdatei)
net idmap dump Backup der winbindd_idmap.tdb Datei (Klartext)
net idmap restore Restore der winbindd_idmap.tdb Datei
smbpasswd -m user1 Samba Benutzer anlegen
smbpasswd -x user1 Samba Benutzer löschen
pdbedit -L zeigt aktive Benutzer an
pdbedit -Lv user1 ausführliche Infos zum Benutzer
pdbedit -i smbpasswd -e tdbsam Konvertiert die /etc/samba/smbpasswd in die /var/lib/samba/passdb.tdb beim wechsel des Benutzer-Datenbankformates
smbpasswd -a benutzer1 SambaUser anlegen
smbpasswd -x benutzer1 SambaUser löschen
smbpasswd -d benutzer1 SambaUser deaktivieren
smbpasswd -e benutzer1 SambaUser aktivieren
   
   

Samba Dienst automatisch starten durch das setzen der Variablen <START_SMB> in /etc/rc.config. (Suse Linux)

Seitenanfang

/etc/smb.conf Variablen

in smb.conf wird Grundsätzlich ein Share beschrieben, dessen Name durch den Abschnittsname festgelegt wird. Es gibt noch zusätzlich vier Abschnitte, [globals], [Beispiel], [cdrom] und [printers]. Unter [globals] werden Parameter festgelegt, die sich nicht auf die Beschreibung der Shares beziehen. Unter [Beispiel] kann jeder Client ohne Passwortabfrage mit den Rechten des Users nobody auf das Share zugreifen. Gleiches gilt für [printers], mit dem alle unter /etc/printcap def. Drucker für die Clients verfügbar gemacht werden.

Download: smb.conf
Samba Variablen

Client Variablen

%a Client Architektur Beispiel: Win95, WfWg, WinNT, Samba ...
%I Client IP Adresse
%m Client NetBios Name
%M Client DNS Name
%p Pfad zum Home Verz. des Benutzers, wie in auto.home definiert (%N:%p)
%U Benutzername, den der Client bei der Aufnahme der Sitzung verlangt hat
Benutzer Variablen
%g primäre gruppe des Benutzernamens %u
%G primäre gruppe des Benutzernamens %U
%H Homeverzeichnis für den Benutzernamen %u
%u Benutzername der aktuellen Freigabe
  Freigabe Variablen
%P Root Verz.des aktuellen Dienstes
%S Name der aktuellen Freigabe
Server Variablen
%d ProzessID des aktuellen Server Prozesses
%h DNS Name des Samba Servers
%L NetBios Name des Samba Servers
%N Name des NIS-Home Directory Servers, bei Samba ohne AUTOMOUNT Option gleich %L
%v Samba Versionsnummer
verschiedene Variablen
%T aktuelles Datum und Zeit
%R Protokoll, das während der Protokollabstimmungsphase zwischen Client und Server ausgewählt wird
Seitenanfang

/etc/smb.conf Globale Parameter

passdb backend = smbpasswd legt fest wie Samba die Passwörter speichert, weitere mögliche Werte tdbsam, ldapsam
netbios name = Data-Server NetBios Name des Servers
netbios aliases = SERVER Alias Name (es können mehrere Namen definiert werden)
server string = Samba Server %v Meldung des Servers in der NW Umgebung
workgroup = local Arbeitsgruppen Nmae
security = user Authentifizierungs Modus (user, share, server, domain sind möglich)
encrypt passwords = yes Verschlüsseltes Passwort (ab Win98)
hosts allow = 192.168.1.0/255.255.255.0 Liste der Hosts die auf den Server zugreifen dürfen
hosts deny = 192.168.2. denyhost.local.de gesperrte Hosts
map to guest = bad user Anmeldung von Gästen ermöglichen, z.B. für Public Freigaben
guest account = nobody (Samba benötigt einen in der /etc/password aufgeführten Benutzer mit so wenig wie möglichen Rechte guest account muss immer definiert sein sonst ist der Samba Rechner nicht in der Netzwerkumgebung sichtbar.
public = yes/no Gastzugang zu diesem Share wird erlaubt
keep alive = 30 alle 30 Sekunden wird nachgeschaut, ob der Client noch am Netz hängt
printing = cups Drucker aktivieren Unix Drucksystem eistellen (cups, bsd)
name resolve order = host lmhosts wins bcast Reihenfolge wie der Name aufgelöst wird (hier DNS - lmhosts Datei - WINS Server - Broadcast )
time server = yes Samba Server als Time Server aktivieren (yes/no oder true/false)
dead time = 30 Zeit die gewartet wird, bis eine Verbindung, die inaktiv ist und keine offenen Dateien hat getrennt wird, aktuell 30 Min (dead time = 0 Verbindung wird nie getrennt)
maxopenfiles = 246 Max. gleichzeitig offene Dateien
smb passwd file = /etc/samba/privat/smbpasswd andere Passwort Datei einbinden
socket option = TCP_NODELAY  
oplocks = yes Schreibzugriffe auf geänderte Dateien werden erst dann ausgeführt, wenn ein anderer Client auf die Datei zugreift (Schreibcache)
veto oplock files = /*.mbx/ oplocks für einzelne Dateien deaktivieren
write raw = yes erlaubt es 65535 Bytes in jedem Datenpaket zu senden(kann Probleme bei billigen Netzkarten geben [no])
read raw = yes / no für das lesen
unix password sync = true bewirkt das bei einer Änderung des Samba-Passwortes das Passwort des dazugehörigen Unix Benutzers auch geändert wird
passwd program = /bin/passwd Programm das zum ändern des Unix Passwortes benutzt wird
wins server = 192.168.0.1 / none WINS Server zur Abfrage definieren
wins support = yes / no Samba als WINS Server einrichten, die Datenbank steht in einer Textdatei "wins.dat"
wins proxy = yes / no Samba leitet WINS Anfragen an einen festgelegten Rechner weiter
dns proxy = yes / no wenn ein Rechner nicht in der WINS Datenbank gefunden wird, wird er im DNS gesucht
local master = yes / no Samba nimmt an der Wahl des Master Browsers teil oder nicht
os level = 0 / 1 / 16 / 32 32 - NT Server, 16 - WinNT, 1 - Win9x, WfW, 0 - Samba verliert immer die Wahl des Master Browsers z.B. Wert 33 - Samba gewinnt jede Wahl (Browser Liste "browse.dat")
preferred master = yes / no Samba erzwingt beim Start die Wahl des Master-Browsers ( je nach os level Einstellung kann er gewinnen oder verlieren)
domain master = yes / no Samba als Domain Master Browser (bei existens eines PDC nicht verwenden)
local master = yes / no Samba als Local Master Browser des Subnetzes ("os level" ist für die Wahl von Bedeutung, ist es zu niedrig, kann der Samba Server die Wahl des Master Browsers nicht gewinnen)
remote announce = IP/Workgroup sendet Host Ankündigung an einen localen Master Browsers in einem entfernten Subnetzes (entweder Broadcast Adresse und Workgroup wenn Router Broadcast-Weiterleitung unterstützt oder IP des localen Master Browser angeben)
z.B. 192.168.1.255/local oder 192.168.1.1/local

remote browse sync = 192.168.1.1 Syncronisiert Bowserlisten mit anderem Subnetz. Wenn das Netzwerk nur aus Samba Servern besteht, einen Server mit "domain master = yes" zum Domain Master machen und mit "remote browse sync = 192.168.0.255 192.168.1.255" das entferte Subnetz eintragen. (wenn Router Broadcast nicht weiterleitet, IP der entfernten locale Master Browser eintragen)
domain logons = yes / no Samba als Domain Controller
log file = /var/log/samba/log.%m LOG Datei festlegen, jeder Client hat eine eigene Datei mit Netbiosname
max log size = 5000 maximale LOG Datei Grösse Standard 5MB, Wert=0 bedeutet unbegrentzt Grösse
log level = 0 von 0 - 100, 0 nur die wichtigsten Meldungen (Standard), 3 zum Debuggen, 5 fals 3 nicht reicht, das sollte ausführlich genug sein
log level = 0 winbind:5 ab Samba 2.2.x gibt es DebugKlassen, der Wert bedeutet das für alle Komponenten der LogLevel 0 gesetzt ist, nur für den winbind-Daemon der LogLevel 5
   
Seitenanfang

/etc/smb.conf Share Parameter

hosts allow = 192.168.1.0/255.255.255.0 Liste der Hosts die auf den Server zugreifen dürfen
hosts deny = 192.168.2.0 denyhost.local.de gesperrte Hosts
guest only = yes nur Gastverbindungen zur Freigabe erlaubt
guest ok = yes Gastverbindungen zur Freigabe erlaubt
invalid users = root, fred, @users Benutzer die kein Zugriff auf die Freigabe haben (User root und fred sowie die Unix Gruppe users)
valid user = willi,@sales nur diese Benutzer können auf eine Freigabe zugreifen (User Willi und Gruppe sales)
max connections = 100 Maximale Verbindungen zu einer Freigabe
read list = fred,@printer Nur Lese Berechtigng für fred und Gruppe printer
writeable = yes in der Freigabe können Daten gespeichert werden, gleich wie "read only = no "
read list = willi Liste von Benutzern mit lese-Rechten
write list = hans, root, @manager Liste von Benutzern und Gruppen mit schreib-Rechten
create mask = 0755 Einstellung für die Rechte beim erstellen von Dateien(alle Dateien in der Freigabe werden mit den Rechten Besitzer RWX, Gruppe R-X, andere Benutzer R-X erstellt)
force create mode = 0755 wie create mask, am besten beide Parameter setzen
directory mask = 0744 wie create mask, nur für Verzeichnisse, in der Freigabe werden Verzeichnisse mit den Rechten Besitzer RWX, Gruppe R--, andere Benutzer R-- erstellt.
force directory mode = 0744 wie directory mask, am besten beide Parameter setzen
force group = users alle neuen erstellten Dateien werden der Gruppe "users" zugeordnet
force user = boss alle neuen erstellten Dateien werden dem Benutzer "boss" zugeordnet
   

Mit diesen Optionen, kann man mit Samba automatisch eine CDROM Mounten, wenn man auf diese über die Freigabe zugreift. Sie wird wieder Abgemeldet wenn man die Freigabe trennt.

root preexec = /bin/mount /dev/cdrom /mnt/cdrom
root postexec = /bin/umount /mnt/cdrom
Seitenanfang

Samba als Standalone Server

Samba läuft im User Level Security, die Authentifizierung wird durch den Sambaserver ausgeführt. Der Samba Server ist mit einem Arbeitsgruppenserver vergleichbar.

Die SambaUser Passwortdatei liegt unter /var/lib/samba/passdb.tdb und kann mit tdbdump /var/lib/samba/passdb.tdb angezeigt werden.

Als erstes muss der Unix Benutzer angelegt werden, danach der Samba Benutzer. Der Zugriff auf Dateien erfolgt über die Unix UserIDs (UIDs) und GroupIDs (GIDs).

useradd -m benutzer1
smbpasswd -a benutzer1
#/etc/samba/smb.conf
[global]
 netbios name = smbsrv
 workgroup = local
 security = domain
 ...
 map to guest = bad user
 guest account = nobody
[share]
 path = /srv/daten
 ...
[homes]
 comment = Home Directories
 browseable = no 
 writable = no
 create mask = 0700
 directory mask = 0700
 valid users = %S

[public]
 comment = Public Directory
 path = /srv/public
 browseable = yes
 writable = yes
 guest ok = yes

[srv]
 comment = Work Directory
 path = /srv/daten
 browseable = yes
 writable = yes
 share modes = no

 

Seitenanfang

Samba als Domaincontroller

# /etc/samba/smb.conf
[global]
workgroup = local
security = user
os level = 33
# DomainMasterBrowser
domain master = yes
# PDC der Domain   
domain logons = yes
# automatisiertes Anlegen der Maschinenkonten beim Domainbeitritt  
add machine script = /usr/sbin/useradd -d /nodir -s /bin/false '%u'
# Servergespeicherte Profile ink. Freigabe profile
logon path = \\%N\profile\%U\%a
# Anmeldescript ink. Freigabe netlogon
logon script = %U.bat preferred master = yes

[profile]
  path = /srv/profile
  writeable = yes
  profile acls = yes

[netlogon]
  comment = Network Logon Service
  path = /var/lib/netlogon 
  browsable = no

Die Profile von W2k und WXP sind untereinander nicht kompatibel und können daher nicht im gleichen Path gespeichert werden.

- das NETLOGON Verzeichnis muss noch mit mkdir -p /var/lib/netlogon angelegt werden.
- den neuen Rechner, der der Domain beitreten soll smbpasswd -a -m rechner, dann alle bestehenden Verbindungen zum Server trennen.
- durch das Script, add machine script = /usr/sbin/adduser --firstuid 20000 --lastuid 29999 --ingroup smbhost --gecos "machine account" --disable-login --no-create-home --force-badname %u werden die Rechnerkonten beim Eintritt in die Domain automatisch angelegt.
- läuft Samba als Domaincontroller werden die Konten der Rechner und Benutzer in *.tdb Dateien gespeichert (Trivial Database).

mit dem Samba-Server einer Domain beitreten
- Auf den Domaincontroller einen Account für den Rechner der beitreten soll anlegen
- Samba Daemon stoppen

smbpasswd -j Domain

- Samba Daemon wieder starten

Einstellungen testen

liefert IP des Domain Master Browser

nmblookup LOCAL#1b

liefert IP des Logon Servers der Domain (des PDCs der Domain)

nmblookup LOCAL#1c

Die Namen die ein Server oder ein Client registriert hat erhält man wie folgt.

# nmblookup -A localhost
Looking up status of 127.0.0.1
	SMBSRV          <00> -         B <ACTIVE> 
	SMBSRV          <03> -         B <ACTIVE>
	SMBSRV          <20> -         B <ACTIVE> 
	..__MSBROWSE__. <01> - <GROUP> B <ACTIVE> 
	LOCAL           <1d> -         B <ACTIVE> 
	LOCAL           <1b> -         B <ACTIVE> 
	LOCAL           <1c> -         B <ACTIVE> 
	LOCAL           <1e> - <GROUP> B <ACTIVE> 
	LOCAL           <00> - <GROUP> B <ACTIVE> 

	MAC Address = 00-00-00-00-00-00

ein PDC muss Domain Master Browser (Hauptsuchdienst) und Domain Logon Server der Domain sein, er muss 1c und 1b für sich registriert haben.

Um Maschinenkonten in die Domain erstellen zu können, muss der User root in der Benutzerdatenbank existieren. Man kann auch mit dem Befehl net rpc rights grant <user> SeMachineAccountPrivilege einen anderen User das Recht erteilen Maschinenkonten zu erstellen.

Das Maschinenkonto muss als Unix Benutzerkonto erstellt werden, dieser Name wird dann um ein $ erweitert. %u steht.

Profile Path
%N	NetBIOS Name des Servers
%U	Benutzername
%a	Betriebssystemversion

Die Zuordnung der WindowsBenutzern SID zu Samba UID und GID wird über WinBind ermöglicht.

#/etc/nsswitch.conf
passwd:         compat winbind
group:          compat winbind

für Winbind ist das gleichnamige Paket zu installieren.

Das automatische Anlegen eines Users testen

net rpc user add user1 -U root
Seitenanfang

Samba Mitgliedsserver Domain

Samba läuft im Domain Level Security, als Authentifizierung wird NTLM oder NTLMv2 verwendet. Benutzer und Passwörter werden vom DC geholt.

#/etc/samba/smb.conf
[global]
netbios name = smbsrv
workgroup = local
security = doamin
...

als nächstes muss für den Samba Server ein Computerkonto auf dem DC erstellt werden.

net rpc join -U Administrator

mit dem net Befehl am Samba Server ausgeführt, wird das Maschinenkonto mit einem zufälligen Passwort erzeugt, als Name für des Maschinenkonto wird der Eintrag von Parameter netbios name verwendet. Das Maschinenpasswort wird in der Datei/var/lib/samba/secrets.tdb abgelegt. Mit dem Befehl tdbdump /var/lib/samba/secrets.tdb kann man es sich ansehen. Wenn die Datei verloren geht oder beschädigt wird muss mit net rpc join eine neue erstellt werden.

Wenn Samba der Domain begetreten ist muss smbd neu gestartet werden.

/etc/init.d/samba restart
Seitenanfang

Samba Mitgliedsserver ADS

Samba läuft im ADS Level Security, die Authentifizierung erfolgt über Kerberos, Samba sucht den DC über seinen DNS Eintrag, daher ist darauf zu achten, das der DNS der Domain in der /etc/resolv.conf eingetragen wird und auch in der /etc/ntp.conf als Zeitserver, auch die /etc/krb5.conf muss korrekt konfiguriert sein.

#/etc/samba/smb.conf
[global]
netbios name = smbsrv
workgroup = local
realm = LOCAL.ZZ
security = ads
...

Der REALM enthält den FQDN der Domain in Grossbuchstaben.

#/etc/krb5.conf
[libdefaults]
	default_realm = LOCAL.ZZ
[realms]
	LOCAL.ZZ = {
		kdc = 192.168.1.1
		admin_server = 192.168.1.1
	}
#/etc/resolv.conf
nameserver = 192.168.1.1
#/etc/ntp.conf
# NTP-Server im LAN
server 192.168.1.1
# Zugriff durch NTP-Server gestatten
restrict 192.168.1.1

wenn in der krb5.conf im Parameter KDC mit DNS Namen gearbeitet wird, muss darauf geachtet werden das diese auch auflösbar sind, z.B. durch einen Eintrag in der /etc/hosts.

Seitenanfang

DC-Verbindungsproxy winbindd

Der winbindd Daemon hält die Verbindung zum DC offen, läuft als Socket Dienst unter /tmp/winbindd/pipe. Der smbd Versucht sich bei einer Authentifizierung mit dem Socket zu verbinden, wenn dies scheitert Verbindet er sich direct mit dem DC.

Winbindd ist auch für das Mapping der Windows SID (Security Identifier) zur Unix UID (UserID) und GID (Group ID) verantwortlich. Probleme beim Mapping können auftreten, wenn mehrere Unix Memberserver in der Domain existieren, da die Zuordnung zum Benutzer nur local gespeichert wird und ein Benutzer mit der SID ...-1033 auf den einen Server die UID 1003401 haben kann und auf den anderen die UID 1001923. Es gibt verschiedene Möglichkeiten wie winbindd das Mapping vornehmen kann.

Namensauflösung für Benutzer

#/etc/nsswitch.conf
...
passwd:	files winbind
group:	files winbind
...

Das System sucht einen Benutzer erst in der Datei /etc/passwd, wird dieser da nicht gefunden wird über winbindd gesucht. Winbindd sucht auf dem WindowsDC nach dem Benutzernamen und generiert aus der SID des Windows Domainbenutzers eine Unix-UID die dann für den Zugriff auf den Sambaserver herrangezogen wird.

Syntax: Domain\\Benutzer

debian:/# wbinfo -n local\\administrator
S-1-5-21-2820835608-3531398149-4270041815-500 User (1)

Eine Windows Benutzer SID setzt sich zusammen aus S-1-5-21-x-y-z-RID, z,y und z ist eine Zufallszahl und diese ist jeweils 32Bit lang (zusammen 96Bit) und einer 32Bit großen RID.

Damit winbindd automatisch aus der SID eine UID und GID bilden kann, ist es ratsam in der smb.conf einen Parameter zu setzen. Dieser definierte einen UID | GID Bereich, der für die Windows DomainBenutzer reserviert ist und wird genutzt wenn dieser sich am Samba Server anmeldet. Dieser reservierte Bereich darf in der localen Benutzerdatenbank (z.B. /etc/passwd, /etc/group) nicht verwendet werden.

TDB

#/etc/smb.conf
[global]
...
idmap backend = tdb
idmap uid = 1000000-2000000
idmap gid = 1000000-2000000
...

Beste Einstellung für einen einzellnen Unix MemberServer in der Domain. Jeder Windows-Domain Benutzer erhält eine Unix UID | GID aus dem Pool von 1000000-2000000, diese wird beliebig automatisch zugeordnet.

RID

#/etc/smb.conf
# ab Samba v3.0.25
[global]
...
idmap domain = DOMAIN1 TRUSTDOMAIN
idmap config DOMAIN1:backend = rid
idmap config DOMAIN1:range = 1000000-1999999
idmap config TRUSTDOMAIN:backend = rid
idmap config TRUSTDOMAIN:range = 2000000-2999999
...

Es gibt eine Vertrauensstellung zwischen der Windows-Domain Domain1 und TrustDomain. Da es vorkommen kann, das ein Windows RID in beiden Domain vorkommen kann, (die RIDs sind nur innerhalb einer Domain eindeutig) wird für jede Domain ein eindeutiger Bereich definiert.

z.B. das Administratorkonto, das eine RID von 500 hat, erhält in der Domian1 die UID 100500 und in der TrustDomain die UID 200500.

AD

#/etc/smb.conf
# ab Samba v3.0.25
[global]
...
idmap config DOMAIN1:backend = ad
idmap config DOMAIN1:schema_mode = sfu
idmap config DOMAIN1:range = 1000000-1999999
winbind nss info = sfu
...

Die Windows Domain heist DOMAIN1, der Service for Unix muss installiert sein.

mögliche Werte für den Parameter winbind nss info rfc2307, sfu oder sfu20 je nach verwendeter Service for Unix Version.

LDAP

#/etc/smb.conf
[global]
...
idmap backend = ldap:ldap://LDAPServer/
ldap suffix = dc=samba,dc=org
ldap admin dn = cn=sambadamin,dc=samba,dc=org
...

 

 

NSS

 

 

Shell und HomeDirectory zuordnen

#/etc/smb.conf
[global]
...
template homedir = /home/%D/%U
template shell = /bin/false
...

Benutzer und Gruppen zuordnen

Domain Gruppen anzeigen

wbinfo -g

SID für die Gruppe Domänen-Benutzer anzeigen

wbinfo -n local\\domänen-benutzer

Windows Domain-Gruppen für Samba anlegen

groupadd domadm
groupadd domusers
groupadd domguest

Gruppe Domänen Administratoren der Gruppe adm zuordnen

net groupmap add ntgroup="domänen administratoren" unixgroup=domadm
oder
net groupmap add rid=512 ntgroup="domänen administratoren" unixgroup=adm

Gruppe Domänen-Benutzer zuordnen

net groupmap add ntgroup="domänen-benutzer" unixgroup=domusers
oder
net groupmap add rid=513 ntgroup="domänen-benutzer" unixgroup=users

Gruppe Domänen-Gäste zuordnen

net groupmap add ntgroup="domänen-gäste" unixgroup=domguest
oder
net groupmap add rid=514 ntgroup="domänen-gäste" unixgroup=guest

gemappte Gruppen anzeigen

net groupmap list

Zugriff auf Freigabe setzen

#/etc/smb.conf
[share]
...
valid users = @users
...

 


 

 


 

 



 

Befehle

Ping an winbindd schicken

debian:/# wbinfo -p
Ping to winbindd succeeded on fd 4

winbindd Verbindung mit dem DC prüfen

debian:/# wbinfo -t
checking the trust secret via RPC calls succeeded

winbindd Authentifizierung mit dem DC prüfen Syntax: Domain\\Benutzer%Passwort

debian:/# wbinfo -a local\\benuter%geheim
plaintext password authentication succeeded
challenge/response password authentication succeeded
Seitenanfang

SWAT (Samba Web Administrationstool)

SWAT läuft über inetd|xinetd und muss in /etc/services eingetragen sein.

#/etc/services
...
swat	901/tcp
...
#/etc/inetd.conf
swat    stream  tcp     nowait.400      root    /usr/sbin/swat  swat
#/etc/xinet.d
service swatservice swat
{
	socket_type = stream
	protocol = tcp
	wait = no
	user = root
	server = /usr/sbin/swat
	only_from = 127.0.0.1
	disable = no
}

aufgerufen wird SWAT mittels http://localhost:901/

Seitenanfang

Drucken mit SAMBA

Damit die Treiber bei der Druckereinrichtung unter Windows mit eingebunden werden, muss die smb.conf erweitert werden.

[global]
   ; -----	mit BSD Drucksystem ---------------------------------------------------------
   ; printcap name	= /etc/printcap
   ; printing	= BSD
   ; print command	= lpr -r -P'%p' %s
   ; printer driver	= hp deskjet 970c series
   ; -----	mit CUPS Drucksystem --------------------------------------------------------
   printcap name	= /etc/printcap.cups
   printing	= cups
   print command	= lp -c -d'%p' %s
   printer driver	= hp deskjet 970c series
   
   [HP_Deskjet_RAW]
   comment	= HP Deskjet 970c
   path	= /var/spool/samba
   printable	= yes
   public	= yes

- Drucker muss unter CUPS, wenn er als Freigabedrucker von Windows Clients genutzt werden soll, ein zweites mal alls RAW Drucker eingerichtet werden, da die Clients die Druckdaten schon aufbereitet zum Drucker schicken.
- der Name hinter "printer driver" muss mit dem Namen des Druckers aus der .inf Datei übereinstimmen, damit der Treiber automatisch auf dem System installiert werden kann.
Am besten erst mal den Drucker auf einem Win-Client installieren und dann die Treiber-Dateien von \Windows\System32\Spool\drivers auf den Linux Rechner kopieren.

[print$]
    comment = Freigabe für Druckertreiber
    path = /windows/printers
    browsable = yes
    read only = yes
    write list = root,@printadmin
    add printer command = /etc/samba/apw.sh

die Option "write list = root, @printadmin" gibt an das der Benutzer ROOT die Servertreiber ergänzen darf.
mit "smbpasswd -a root" muß man dem User ein Samba-Password einrichten.
das Paket CUPS muss möglicherweise nachinstalliert werden, CUPS wird konfiguriert über den Browser http://localhost:631

zugehöriges Verzeichnis für die Treiber erstellen

mkdir /windows/printers
mkdir /windows/printers/W32X86
mkdir /windows/printers/W32X86/2
mkdir /windows/printers/W32X86/3
mkdir /windows/printers/WIN40
mkdir /windows/printers/COLOR

/W32X86/2 - Verzeichnis für die Treiber von WinNT 4.0
/W32X86/3 - Verzeichnis für die Treiber von W2k und WinXP
/WIN40 - Win9x und WinME
/COLOR - Farbschema

#!/bin/bash
#---- Shell Script APW.SH ------------------------------------
# Skript zum Anlegen eines Samba-Druckers mit CUPS
# $1 = Ausführlicher Druckername
# $2 = Drucker/Queue/Share-Name
# $5 = Ort des Druckers
/usr/sbin/lpadmin -p "$2" -D "$1" -L "$5"
echo "Samba Printer Port"
#-------------------------------------------------------------
Seitenanfang

DFS mit Samba

- DFS Stamm anlegen und für die Benutzer freigeben

mkdir -p /export/samba/dfs
chmod 777 /export/samba/dfs

- Eintragung in der smb.conf, nach dem ändern der Einstellung den Samba Server neustarten.

[global]
host msdfs = yes

[dfsstamm]
path = /export/samba/dfs
msdfs root = yes

- DFS Weiterleitung als symbolischen Link setzen

cd /export/samba/dfs
ln -s msdfs:server\\daten dfsdata

- Load Balancing hier versorgen zwei Server die Freigabe "dfsdata" mit dem gleichen Datenbestand

ln -s msdfs:server1\\daten,server2\\daten dfsdata
Seitenanfang

Zugriff auf Freigabe

Es sollte als Dateisystemtype cifs statt smbfs verwendet werden, da smbfs nicht mehr weiterentwickelt wird,

smbclient '\\server\freigabe' -U User
oder
smbclient "\\\server\freigabe" -U User

Samba Home Freigabe spionieren (smbclient //server/user1 -U user2) verhindern, durch Parameter "valid user=%S" in der Freigabe.

Samba mit FUSE (Filesystem in Userspace)
Verzeichnis mounten, ins Home Directory, damit keine root Rechte vorhanden sein müssen.

smbnetfs ~/mnt/win-share

Freigabe aushängen

fuermount -u ~/mnt/win-share

Passwörter werden aus der Datei ~/.smb/smbnetfs.conf geladen

#smbnetfs.conf
auth "winserver" "user" "passwort"

- Backup mit smbclient erstellen

smbclient //Server/Freigabe -U Administrator%pass -Tc backup.tar /path/verzeichnis

Die Datei backup.tar wird im aktuellen Verzeichnis erstellt, mit einer Sicherung von //Server/Freigabe/path/verzeichnis

Die Datei datei.txt aus dem TAR File backup.tar wiederherstellen.

smbclient //Server/Freigabe -U Administrator%pass -Tx backup.tar /path/verzeichnis/datei.txt

- nmbd Namensauflösung testen

nmblookup -B Server __SAMBA__
nmblookup -B Client-Name '*'

- Freigaben eines Servers auflisten

smbclient -L SERVER -N
oder
smbclient -L SERVER -U Username

- Netzlaufwerk mounten, Username, Servername und Freigabe muss angepasst werden.

mkdir /mnt/netzwerk
mount -t cifs -o noperm,username=benutzer //server/freigabe /mnt/netzwerk
oder
mount -t smbfs -o rw,username=benutzer //server/freigabe /mnt/netzwerk

Freigabe //SMBServer/freigabe nach /mnt mounten.

mount.cifs //SMBServer/freigabe /mnt -o user=user1,password=geheim

bei Problemen mit den Umlauten hilft es den Parameter iocharset zu setzen.

mount -t cifs -o noperm,iocharset=utf8,username=benutzer //server/freigabe /mnt/netzwerk
oder
mount -t cifs -o noperm,iocharset=iso8859-15,username=benutzer //server/freigabe /mnt/netzwerk

- Zugriff mit smbmount

smbmount //server/freigabe /mnt/netzwerk -o username=Benutzer

kann auch in der /etc/fstab gesetzt werden.

//server/freigabe /mnt/netzwerk smbfs username=Benutzer,password=Geheim 0 0

wenn Passwörter in der fstab nicht behagen geht auch folgendes

//server/freigabe /mnt/netzwerk smbfs credentials=/etc/smb.pass 0 0

die passende smb.pass sieht dann wie folgt aus, darf auch nur für root lesbar sein.

username=Benutzer
password=Geheim
Seitenanfang

Samba mit Windows administrieren

- in der smb.conf die Parameter setzen, dann vom WinPC eine Verbindung zum Samba Server aufbauen

# /etc/samba/smb.conf
[global]
# registry shares = yes
# include = registry
config backend = registry
net use \\Samba-SRV /user:root

mittels regedit den RegistryEditor starten und Datei | mit Netzwerkregistrierung verbinden eine Verbindung zum Samba Server aufbauen.

die Registry wird in der TDB (Trivial Data Base) /var/lib/samba/registry.tdb gespeichert.

wenn es zu Problemen bei der Anmeldung kommt, kann es helfen das Passwort noch mal zu setzen und die Rechte zu vergeben.

smbpasswd -a <Benutzer>
net rpc rights grant <Benutzer> SeMachineAccountPrivilege
net rpc rights grant <Benutzer> SePrintOperatorPrivilege
net rpc rights grant <Benutzer> SeAddUsersPrivilege
net rpc rights grant <Benutzer> SeRemoteShutdownPrivilege
net rpc rights grant <Benutzer> SeDiskOperatorPrivilege
net rpc rights grant <Benutzer> SeTakeOwnershipPrivilege

wenn es nicht der Benutzer root sein soll, muß der Benutzer das Recht SeDiskOperatorPrivilege haben.

Freigaben hinzufügen

um Freigaben von einem WindowsPC auf dem Samba Server einzurichten, sind noch ein paar Vorbereitungen nötig. Der add share command Parameter muß gesetzt werden und ein Script zum erzeugen der Freigaben mit den nötigen Rechten.

# /etc/samba/smb.conf
[global]
...
add share command = /usr/bin/addshare
...

oder per Befehl

net conf setparm global "add share command" "/usr/bin/addshare"
#! /bin/bash
# Datei als /usr/bin/addshare speichern

SHARENAME="$2"
PATH="$3"
COMMENT="$4"
NET="/usr/bin/net"
if [ ! -d $PATH ]; then /bin/mkdir -p $PATH
fi $NET conf addshare $SHARENAME $PATH writeable=n guest_ok=n $COMMENT echo $?

Datei addshare für den User root mit ausführbaren Rechten speichern.

Fehlersuche

- Registry Parameter auf dem Samba Server anzeigen

net conf list

Fehlermeldungen anzeigen

tail -f /var/log/samba/log.smbd /var/log/samba/log.nmbd
net conf setparm global "eventlog list" "SyslogLinux"
apt-get install samba-doc
cp /usr/share/doc/samba-doc/examples/scripts/eventlog/parselog.pl /usr/bin
chmod 0750 /usr/bin/parselog.pl
tail -f /var/log/samba/log.smbd /var/log/samba/log.nmbd | parselog.pl | eventlogadm -o write "SyslogLinux"

jetzt kann man auf dem WinPC unter Verwaltung | Ereignisanzeige | Verbindung zu einem anderen Computer herstellen... | Samba-Server, die Ereignisse anzeigen.

 

Seitenanfang

sonstiges

net rpc samdump - Einblick in die Benutzerdatenbank
net rpc vampire - überschreibt die Samba Datenbank mit den Werten der Windows Domain

net groupmap modify rid=512 unixgroup=adm
net groupmap modify
net help rpc
net groupmap modify ntgroup="Domain Admins" unixgroup=adm type=domain.local
[global]
add user script = /usr/sbin/useradd "%u"
add group script = /usr/local/bin/creategroup "%g"
add user to group script = /usr/sbin/gpasswd -a "%u" "%g"
delete user from group script = /usr/sbin/gpasswd -d "%u" "%g"
set primary group script = /usr/sbin/usermod -g "%g" "%u"
delete user script = /usr/sbin/userdel "%u"
delete group script = /usr/sbin/groupdel "%g"