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
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.
- 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 ...
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)
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 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 |
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 |
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
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
# /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
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
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
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.
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.
#/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.
#/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.
#/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.
#/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.
#/etc/smb.conf [global] ... idmap backend = ldap:ldap://LDAPServer/ ldap suffix = dc=samba,dc=org ldap admin dn = cn=sambadamin,dc=samba,dc=org ...
#/etc/smb.conf [global] ... template homedir = /home/%D/%U template shell = /bin/false ...
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 ...
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
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/
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" #-------------------------------------------------------------
- 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
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
- 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.
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.
- 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.
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"