PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linux und Windows im Netzwerk (Samba)



hunter
28.01.03, 09:58
Einführung

Mit dieser HowTo möchte ich erklären wie man mit Windows und Linux Rechnern untereinander Dateien austauschen kann. Dazu wird Samba benutzt dessen Installation ich hier nicht beschreibe, da es jeder Distribution beiliegt und es einfacher ist es zu installieren als es selbst zu compilieren.


Installationen

Im folgenden solltet ihr nun mal auf eurer CD nachsehen welche Pakete es zu Samba gibt. Die genauen Namen sind von Distribution zu Distribution unterschiedlich, jedoch haben sie immer das Wort "samba" im Namen. Wenn ihr also ein genanntes Paket nicht habt, dann kann es durchaus sein das es in einem anderen Paket mit drin ist. Die Namen die ich hier nenne beziehen sich auf Mandrake.

Installieren solltet ihr:

samba-server (oft auch nur samba)
samba-client
samba-common

samba-docs
samba-swat

LinNeighborhood -> http://freshmeat.net/projects/linneighborhood/
XfSamba -> http://freshmeat.net/projects/xfsamba

Wer will kann sich die beiden letzten Programme auch als Quellcode besorgen und installieren. Da es hilfreiche aber von Samba unabhängige GUIs sind, könnt ihr das auch selbst compilieren.


Samba aktivieren

Jetzt müsst ihr in eurem Kontrollzentrum, Yast oder sonst was nur noch sicherstellen das der smb und der nmb Dienst läuft bzw. beim booten aktiviert werden soll.

Alternativ könnt ihr auch in einem Bootscript diesen Befehl einbauen: "samba start"

Zusätzlich ist es auch noch Sinnvoll Swat zu aktivieren. Das ist ein Webbasierendes Config Tool das später nützlich sein kann.


Samba Server einrichten

Samba besteht aus zwei Teilen: Server und Client. Der Server stellt nur Dateien und Geräte für andere Rechner bereit. Wenn ihr also Verzeichnisse "freigeben" wollt, müsst ihr den Server einrichten.

Dazu sichert zunächst einmal nur die folgende Datei: /etc/samba/smb.conf
Also: cp /etc/samba/smb.conf /etc/samba/smb.conf_org [als Root]

Nun editiert die /etc/samba/smb.conf mit einem Editor und löscht ihren kompletten Inhalt (passiert ja nichts, da die Datei gesichert wurde)

Folgenden Inhalt einfügen und anpassen:

[global]
workgroup = "selbe wie auch der Windows Rechner"
guest account = nobody
keep alive = 30
os level = 2
kernel oplocks = false
security = share
interfaces = "IP der Linux Rechners"/255.255.255.0
bind interfaces only = yes
socket options = TCP_NODELAY

-> Was in Anführungszeichen steht incl. (!) der Anführungszeichen ändern. Also letztendlich ohne die Anführungszeichen.

Damit habt ihr zunächst einmal nur den Server grundsätzlich eingestellt. Da ist noch nichts freigegeben (kommt gleich).

Die Bedeutung ist:

workgroup -> Windows verwendet Arbeitsgruppen innerhalb von Subadressen, diese muss hier eingetragen werden
guest account = nobody -> Jeder darf zugreifen (im Netzwerk)
[...]
security = share -> Ermöglicht das freigeben von Verzeichnissen (ohne besonderen Schutz)
interfaces = "IP der Linux Rechners"/255.255.255.0 -> Festlegen des Servers auf die IP eurer Lankarte
bind interfaces only = yes -> Gültigkeit des Servers nur für das Lan
[...]

Den Rest übernehmt einfach wie ich ihn genannt habe.


Nun könnt ihr Verzeichnisse freigeben:

["Name des Shares"]
comment = "kurzer Komentar"
browseable = yes
path = /../../ "also Verzeichnis zum Share" (muss natürlich entsprechnede Rechte haben)
writeable = yes
public = yes
guest only = no
directory mask = 777
create mask = 666

-> Solch einen Block legt ihr nun für jeden Share/ jede Freigabe an. Es ist wichtig das dieses Verzeichnis auch die entsprechenden Rechte für andere Benutzer bekommt damit man von außen darauf zugreifen kann (unabhängig von den Einstellungen hier).

Bedeutung:

["Name des Shares"] -> Name den der Share haben soll; Beliebig aber einzigartig !
comment = "kurzer Komentar" -> Ein Kommentar dient dazu den Clients einen Hinweis zu geben was das für ein Share ist
browseable = yes -> Muss "yes" sein da man sonst den Inhalt nicht durchsuchen kann
path = /../../ -> Die Pfadangabe für das freizugebende Verzeichnis
writeable = yes -> Kann auch "no" sein wenn ihr schreiben nicht zulassen wollt
public = yes -> Kann auch "no" sein wenn ihr nicht wollt das es sichtbar ist; Verzeichnis muss dann expliziet angegeben werden
[...]

So könnt ihr jetzt für jeden Share vorgehen den ihr anlegen wollt. Kopiert einfach den Block und passt ihn jeweils an.

-> Speichert nun die Datei und führt folgende Befehle aus [als Root]:

samba condrestart
samba status

Ergebnis sollte sein:

> samba condrestart
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]

> samba status
smbd (PID 3604) läuft ...
nmbd (PID 3613) läuft ...

- Sollte Samba nun nicht mehr laufen dann habt ihr in der Config einen Fehler gemacht. Korregiert das dann und wiederholt diese Befehle.

- Prüft dann mal von einem Windowsrechner aus ob ihr diese Shares nun sehen und darauf zugreifen könnt. Oder von einem Linuxrechner mit Samba Client (siehe nächsten Abschnitt).


Samba Client benutzen

Der Samba Client ist im Prinziep nun das gleiche wie das Windows Netzwerklaufwerk. Er mounted einen Share auf ein Verzeichnis in eurem System. Dabei könnt ihr Samba Shares oder Windows Freigaben mounten und dann benutzen.

Ich empfehle das benutzen einer GUI wie LinNeighborhood oder XfSamba. Das ist am einfachsten.


Alternativ könnt ihr aber auch die Konsole verwenden:

mount -t smbfs -o "Optionen" //Rechner/Freigabe /mount/point

-o "Optionen" -> Optionen für das mounten (siehe smbmount --help); oft reicht "guest"
//Rechner -> Name des Rechners (Server, Windows oder Linux (Samba))
../Freigabe -> Name des Shares den ihr mounten wollt (muss bekannt sein)
/mount/point -> Mountpoint auf den ihr die Freigabe mounten wollt (muss vorhanden sein)


Zum unmounten gebt ihr ein: smbumount /mount/point


Wichtig ist hier vor allem die Option -o, da es eventuell sein kann das ihr ein Passwort und / oder einen Benutzernamen angeben müsst um den Share überhaupt mounten zu dürfen. Das ist Serverseitig bestimmt.


Anmerkungen

Wie ihr bereits gemerkt habt, habe ich beim Client mit einbezogen das Shares vieleicht durch Passworte geschützt sein können. Die von mir angegebene Config für den Samba Server beinhaltet dies nicht. Es ist nur die Sicherung drin das das nur im Lan freigegeben sein soll. Wer nun in großen Netzwerken ist, der sollte entweder nur "unbedeutende" Daten sharen oder mit Passwortschutz arbeiten. Ich empfehle dazu eine HowTo von LKH:

http://www.linuxforen.de/forums/showthread.php?s=&threadid=18923


Drucker freigeben

Samba beherrscht neben der Freigabe von Dateien auch das teilen des Druckers. Ich beschreibe hier wie man das macht wenn man das weit verbreitete Drucker System CUPS verwendet.

Editiert die Datei /etc/samba/smb.conf

Fügt unter die [global] (unten) ein:

printcap name = lpstat
load printers = yes
printing = cups

-> Damit habt ihr die grundsätzliche Freigabe für Drucker aktiviert


Fügt nun unter die [global] und über den Shares den folgenden Block ein:

[printers]
comment = All Printer
spath = /var/spool/samba
browseable = no
guest ok = yes
writable = no
printable = yes
create mode = 0700
print command = lpr-cups -P %p -o raw %s -r # using client side printer drive
lpq command = lpstat -o %p
lprm command = cancel %p-%j

-> Dieser Block gibt nun euren default Drucker aus CUPS frei und lässt zu, das andere darauf drucken können. Dabei wird deren Druckertreiber verwendet. Samba gibt den Druckauftrag nur an CUPS weiter, das ihn wiederrum an den Drucker weiterleitet.

Der Knackpunkt könnte dabei die Zeile "print command" sein. Solltet ihr Probleme haben, dann liegt es an den Optionen in dieser Zeile. In der Regel sollte das aber so laufen.

Danach wieder speichern und diese Befehle ausführen:

samba condrestart
samba status


Schlussbemerkung

Solltet ihr Probleme mit Samba haben, öffnet einen Thread im Bereich: Linux in heterogenen Netzen

Bei Fehlern in dieser HowTo oder Anmerkungen bitte direkt eine PN an mich.

spychodelics
25.09.03, 09:58
Nur als kleiner Tipp :

Um den Drucker bei mir wie oben aufgezeigt laufen zu lassen
waren folgende Eintraege noetig


[global]
printcap = cups <---------
load printers = yes
printing = cups



[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = yes
writeable = no
printable = yes
create mode = 0700
print command = lpr-cups -P %p -o raw %s -r
lpq command = lpstat -o %p
lprm command = cancel %p-%j


Und eine Aenderung in /etc/cups/mime.types

application/octet-stream

und in der /etc/cups/mime.convs

application/octet-stream application/vnd.cups-raw 0 -

beides erlauben.




Ich hoffe das hilft eventuell jemandem :-)


System : Redhat9 , Brother HL5040

mfg spy

uTaNG
19.03.04, 15:38
Ich möchte diesem Thread noch eine kurze erläuterung der Variablen, die von Samba verwendet werden hinzufügen.
Samba stellt zwar nur eine geringe Anzahl von Variablen zur Verfügung,aber dennoch können sie sich in manchen fällen als sehr hilfreich erweissen.
Die Variable in der Konfigurationsdatei beginnt mit einem Prozentzeichen (%),gefolgt von einem Groß- oder Kleinbuchstaben. Zudem dürfen die Variablen nur auf der rechten Seite des Gleichheitszeichens auftauchen.

Samba kann 20 Definierte Variablen, die in 5 Bereiche aufgeteilt werden können benutzen.
Diese Bereiche sind:


Client-Variablen

%a = Client Architektur (siehe weiter unten "Die %a-Variable")
%I = IP-Adresse des Clients
%m = NetBIOS-Name des Clients
%M = DNS-Name des Clients

Benutzer-Variablen

%u = Aktueller Linux/Unix-Benutzername
%U = Angefoderter Client-Benutzername
%H = Home-Verzeichnis von %u
%g = Primäre Gruppe von %u
%G = Primäre Gruppe von %U

Freigabe-Variablen

%S = Name der aktuellen Freigabe
%P = root-Verzeichnis der aktuellen Freigabe
%p = bekommt den Pfad des Automounters auf das root-Verzeichnis,wenn es ein anderer ist als %P

Server-Variablen

%d = Prozess-ID des aktuellen Servers
%h = DNS-Hostname des Samba-Servers
%L = NetBIOS-Name des Samba-Servers
%N = Home-Verzeichnis-Server aus der automount-Map
%v = Samba-Version

Sonstige-Variablen

%R = Ausgehandelte SMB-Protokollstufe
%T = Aktuelles Datum und Uhrzeit
%$var = Wert der Umgebungsvariablen "var"

Die %a-Variable
.. je nach eingesetzem OS,kann diese Variable folgenden String erhalten ...

Windows 2000 und Windows XP = Win2k
Windows NT = WinNT
Windows 95 und Windows 98 = Win95
Windows for Workgroups = WfwG
Samba = Samba
Jedes OS,das noch nicht aufgelistet wurde = UNKNOWN


So und nun zu einigen Beispielen wo man die ganze Geschichte Anwenden kann.


[global]
server string = wIr Tanzen Samba %v auf %L

Mit der server string Option können wir ein Kommentar vereinbaren was neben dem Server Namen in der Netzwerkumgebung auftaucht.(Und mit Hilfe der Variablen,gibt es noch zusatz Infos.)


Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (wIr Tanzen Samba 2.2.8a auf gustaf)
ADMIN$ Disk IPC Service (wIr Tanzen Samba 2.2.8a auf gustaf)

Server Comment
--------- -------
GUSTAF wIr Tanzen Samba 2.2.8a auf gustaf



In dem nächsten Beispiel weisst Samba jedem Client,der sich anmeldet eine Freigabe hinzu die von der Architektur des Client-Systems abhängig ist.


[pustekuchen]
path = /tmp/samba/%a

somit sehe das zum Beispiel so aus:

/tmp/samba/Win2k
/tmp/samba/WinNT
/tmp/samba/Win95
/tmp/samba/WfwG
/tmp/samba/Samba
/tmp/samba/UNKNOWN

Dann ist es noch möglich zu der verwendetet Konfigurationsdatei ein weiter zuverwenden. Das kann sehr nützlich sein wenn ein Client noch weitere Optionen für seine Freigabe benötigt.


[pustekuchen]
include = /etc/samba/smb.conf.%m

Möchte man allerdings das ein Spezielle Konfigurationsdatei verwendet werden soll wenn sich ein Client anmeldet dann nehmen wir nicht include sondern:


[pustekuchen]
config file = /etc/samba/smb.conf.%m

Somit kann man eine Ersatz Konfigurationsdatei angeben.

Weiter ist es Möglich auch speziell loggen zu lassen.


[pustekuchen]
log file = /var/log/smb.log.%m

So das waren nun ein Paar Beispiele um vlt. mal zu demonstrieren was man mit den Variablen alles anfangen kann.

uTaNG
27.03.04, 14:23
Da es für den ein oder anderen immer eine neue kleine Welt ist mit Samba umzugehen haben ich nochmal 2 ..Szenarien ausgepickt,die ich erläutern möchte.

1.) das hinzufügen eines neuen Benutzers
2.) Verzeichnisfreigaben für unterschiedliche User



1.) das hinzufügen eines neuen Benutzers
Wenn sich ein User von einem Client-System auf den Samba-Server einloggen möchte,dann muss auf dem Samba-Server ein Account für den jeweiligen User existieren. Hier gibt es häufig eine Verwechslung. Samba setzt vorraus das bereits ein System-Account vorhanden ist, ansonsten wird es nicht gelingen einen Samba-Acount zu erstellen.

Also legen wir als erstes einen Account für den User "flo" auf dem Linux-rechner an,dem gleichzeitig noch ein Home-Verzeichnis erstellt und in die Gruppe "users" aufgenommen wird.

test@linuxforen.de # useradd flo -m -G users
test@linuxforen.de # passwd flo
New UNIX password:
Retype new UNIX password:


Ob ihr nun dem User ein Homeverzeichnis oder eine Shell gebt bzw. in welche Benutzergruppe ihr ihn aufnimmt,liegt ganz in euerem Interesse. Für Samba reicht es, wenn es den Benutzer gibt.

Damit ein Benutzer sich auf eine Samba-Freigabe einloggen kann,muss Samba ihn in der eigen Datenbank gelistet haben.


test@linuxforen.de # smbpasswd -a flo
New SMB password:
Retype new SMB password:
Added user flo.

Dabei ist es zu beachten das die Option -a genutzt wird,da ansonsten nur das Passwort geändert wird. Dazu kommt,dass wenn es das erstemal ist das ein Benutzer mit smbpasswd angelegt wird, Samba eine Fehlermeldung bringt, das die Datenbank nicht existiert. Das sit aber nicht weiter schlimm da die Datenbank nun,mit dem hinzufügen des neuen Users erstellt wurde.

Das wär es eigentlich zum Thema das hinzufügen eines neuen Benutzers gewesen.
Wenn man sich aus irgendeinen Grund,irgendwo vertippt hat bzw. den User-Account löschen möchte geht das ganz schnell.


test@linuxforen.de # smbpasswd -x flo
test@linuxforen.de # userdel -r flo


2.) Verzeichnisfreigaben für unterschiedliche User

Mein Ziel soll es sein,euch zu zeigen wie man Freigaben User-Spezifisch konfigurieren kann.
Ein kleines alltägliches Beispiel ist schnell gefunden und zwar bin ich mal so frech und nehme gleich ein Problem was einen Board-Member beschäftigte. Er wollte das der User root vollenzugriff auf alle Verzeichnisse hat,während der User Flo nur in seinem Home-Verzeichniss Arbeiten kann.

Ich hoffe er hat es auch so gemeint,nicht dsa ich ihn flasch verstenden habe... :D
Aber ich werde euch mal dieses Szenario demonstrieren.


Schritt Nummer -eins-

Als erstes müssen wir den User root in die Samba-Datenbank aufnehmen,da wir dieses mit flo schon im vorrigen Abschnitt getan haben,werde ich diesen schritt mit ihm überspringen.


test@linuxforen.de # smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root.


Schritt Nummer -zwei-

Wir werden hier folgendes tun.

Als erstes erstellen wir für jeden User eine seperate smb.conf und diese bekommt als Erweiterung den Usernamen: smb.conf.username.

Meine /etc/samba/smb.conf.root

# Samba config file created by uTaNG
#
# Date: 2004/03/12
# Version: 0.1

[global]
server string = wIr Tanzen Samba
workgroup = ARBEITSGRUPPE
encrypt passwords = yes
; Log Options
log level = 0
log file = /var/log/samba.log.%m
max log size = 50
debug timestamp = yes
wins support = yes
wide links = no
; Zugriff auf Freigaben steuern
invalid users = bin daemon adm sync shutdown halt mail news uucp operator
security = user
smb passwd file = /etc/samba/private/smbpasswd
client code page = 850
character set = ISO8859-1
oplocks = no
level2 oplocks = no

[ROOT]
path = /
comment = du kommst hier net rein
writeable = yes

Meine /etc/samba/smb.conf.flo

# Samba config file created by uTang
#
# Date: 2004/03/12
# Version: 0.1

[global]
server string = wIr Tanzen Samba
workgroup = ARBEITSGRUPPE
encrypt passwords = yes
config file = /etc/samba/smb.conf.%u
; Log Options
log level = 0
log file = /var/log/samba.log.%m
max log size = 50
debug timestamp = yes
wins support = yes
wide links = no
; Zugriff auf Freigaben steuern
invalid users = bin daemon adm sync shutdown halt mail news uucp operator
security = user
smb passwd file = /etc/samba/private/smbpasswd
client code page = 850
character set = ISO8859-1
oplocks = no
level2 oplocks = no

[FLO]
path = /home/flo
comment = kratz mich =)
writeable = yes
valid users = flo

Und nun meine Normale /etc/samba/smb.conf

# Samba config file created by uTang
#
# Date: 2004/03/12
# Version: 0.1

[global]
server string = wIr Tanzen Samba
workgroup = ARBEITSGRUPPE
encrypt passwords = yes
config file = /etc/samba/smb.conf.%U
; Log Options
log level = 0
log file = /var/log/samba.log.%m
max log size = 50
debug timestamp = yes
wins support = yes
wide links = no
; Zugriff auf Freigaben steuern
invalid users = bin daemon adm sync shutdown halt mail news uucp operator
security = user
smb passwd file = /etc/samba/private/smbpasswd
client code page = 850
character set = ISO8859-1
oplocks = no
level2 oplocks = no

Wie ihr seht hat sich im Globale-Teil bei mir, abgesehen von einer Option, nichts verändert.
Und zwar handelt es sich in der normalen /etc/samba/smb.conf um die Option:


[global]
config file = /etc/samba/smb.conf.%U

Diese lädt, entsprechend dem Benutzer eine neue smb.conf rein und ersetzt somit die "alte".
Fals sich nun ein 3ter User mit dem Namen "hunsekuns" einloggt und wird Samba in diesem Fall,keine smb.conf.hunsekuns finde,da wir keeine erstellt haben. Aber das macht nichts, wenn es keine Spezielle smb.conf für den jeweiligen eingeloggten User gibt, wird die Standardt smb.conf verwendet.

Um das ganze euch zu demonstrieren, das das auch fein klappt:


test@linuxforen.de $ smbclient //192.168.99.12/root -U root
added interface ip=192.168.99.4 bcast=192.168.99.255 nmask=255.255.255.0
Password:
Domain=[ARBEITSGRUPPE] OS=[Unix] Server=[Samba 2.2.8a]
smb: \> ls
. D 0 Sun Feb 22 15:19:40 2004
.. D 0 Sun Feb 22 15:19:40 2004
bin D 0 Fri Mar 19 18:18:35 2004
dev D 0 Thu Jan 1 01:00:00 1970
etc D 0 Sat Mar 27 13:30:44 2004
lib D 0 Fri Mar 19 18:18:35 2004
mnt D 0 Fri Mar 12 12:28:04 2004
opt D 0 Tue Feb 24 22:19:39 2004
tmp D 0 Sat Mar 27 12:54:17 2004
sys D 0 Thu Mar 25 12:21:52 2004
var D 0 Tue Feb 24 22:19:39 2004
usr D 0 Sun Mar 7 23:29:27 2004
boot D 0 Tue Mar 9 01:02:40 2004
home D 0 Sat Mar 27 13:28:45 2004
proc DR 0 Thu Mar 25 12:21:52 2004
sbin D 0 Tue Mar 23 22:03:07 2004
root D 0 Tue Mar 23 22:02:41 2004

38184 blocks of size 262144. 27240 blocks available
smb: \>


test@linuxforen.de $ smbclient //192.168.99.12/flo -U flo
added interface ip=192.168.99.4 bcast=192.168.99.255 nmask=255.255.255.0
Password:
Domain=[ARBEITSGRUPPE] OS=[Unix] Server=[Samba 2.2.8a]
smb: \> ls
. D 0 Sat Mar 27 13:28:45 2004
.. D 0 Sat Mar 27 13:28:45 2004
.bashrc H 812 Sat Mar 27 13:28:45 2004
.bash_profile H 232 Sat Mar 27 13:28:45 2004

38184 blocks of size 262144. 27240 blocks available
smb: \> cd ..
smb: \> ls
. D 0 Sat Mar 27 13:28:45 2004
.. D 0 Sat Mar 27 13:28:45 2004
.bashrc H 812 Sat Mar 27 13:28:45 2004
.bash_profile H 232 Sat Mar 27 13:28:45 2004

38184 blocks of size 262144. 27240 blocks available
smb: \>

So ich hoffe ich konnte dem ein oder anderem etwasbehilflich sein. :)