Linux Systeembeheer/Bestanden en printers delen: verschil tussen versies
Verwijderde inhoud Toegevoegde inhoud
Regel 24:
== Bestanden delen, de UNIX-manier: NFS ==
NFS staat voor Network File System en is een protocol dat oorspronkelijk ontwikkeld werd door Sun Microsystems in 1984. NFS maakt het mogelijk om bestanden op te vragen over het netwerk op dezelfde manier als men dit zou doen voor bestanden op de lokale schijf. De meest recente versie is NFSv4.
=== Installatie ===
''De opdrachtregels die verder volgen zijn getest op een minimale installatie van CentOS 5.5.''
We beginnen met de installatie van het pakket ''nfs-utils'', wat meteen ook de nodige ''dependencies'' installeert zoals onder andere ''portmap'' en ''nfs-utils-lib''.
$ yum install nfs-utils
=== Configuratie ===
In het bestand ''/etc/exports'' bepalen we welke map(pen) we met welke hosts willen delen. Een configuratieregel heeft volgende syntax:
:<export> <host1>(<options>) ... <hostN>(<options>)
Mogelijke opties zijn onder andere:
:ro/rw, async/sync, wdelay, all_squash, no_root_squash
De optie ''all_squash'' maakt dat gebruikers die verbinding maken met het NFS, de account en permissies van de ''nobody'' account krijgen. Met de optie ''no_root_squash'' kan het NFS benaderd worden als ''root'' gebruiker.
Als voorbeeld delen we de map ''/shares/Public'' met hosts op de netwerken 192.168.1.0/24 en 10.0.0.0/16. Uitsluitend in de map ''/shares/Public/upload'' mag het mogelijk zijn bestanden te schrijven naar het NFS.
$ vi /etc/exports
/shares/Public 192.168.1.0/24(rw,sync,all_squash,fsid=0) 10.0.0.0/16(rw,sync,all_squash,fsid=0)
Met de optie ''fsid=0'' vertellen we de server dat deze export de root van het NFS is. Bemerk ook dat we voor de optie ''rw'' kiezen, hoewel we hosts geen schrijfrechten gunnen. We doen dat omdat we aan de map ''upload'' wel schrijfrechten willen toevertrouwen. Een alternatief is twee configuratieregels te definiëren, een met ''ro'' en een met ''rw'', maar dat garandeert geen probleemloos resultaat.
Doordat we in het bestand ''exports'' al hosts definiëren, hoeven we geen gebruik te maken van de bestanden ''hosts.allow'' en ''hosts.deny''.
Vervolgens maken we de te delen mappen aan en verlenen iedereen schrijfrechten op de map ''upload''. We maken voor het voorbeeld ook enkele testbestanden aan.
$ mkdir -p /shares/Public/upload
$ chmod 777 /shares/Public/upload
$ for i in 0 1 2; do touch /shares/Public/file-$i; done
Tenslotte stellen we de firewall in om NFS verkeer toe te laten.
$ system-config-securitylevel-tui
Security Level: Enabled
SELinux: Enforcing
Klik op 'Customize' en vink 'NFS4' aan.
De configuratie is klaar. We starten de nodige services.
$ service portmap start
$ service nfs start
$ service nfslock start
Als we de services automatisch willen starten bij het opstarten van de server kunnen we het commando ''chkconfig'' gebruiken.
$ chkconfig --list
$ chkconfig nfs on
Als het bestand ''/etc/exports'' gewijzigd wordt, kan de nieuwe configuratie gebruikt worden zonder de nfs service te herstarten met het ''exportfs'' commando.
$ exportfs -ra
Bemerk dat de poorten die NFS gebruikt standaard niet vastliggen. Controleren op welke poorten de services draaien kunnen we doen met ''rpcinfo''.
$ rpcinfo -p
=== Testen ===
In het voorbeeld is het adres van de server 192.168.1.115.
'''1. Op de CentOS server zelf'''
$ mount -vt nfs4 192.168.1.115:/ /mnt
$ ls /mnt
file0 file1 file2 upload
$ touch /mnt/writetest
touch: cannot touch '/mnt/writetest': Permission denied # OK #
$ touch /mnt/upload/writetest; ls /mnt/upload
writetest # OK #
$ umount /mnt
'''2. Op een CentOS client'''
$ yum install nfs-utils
$ service portmap start
$ service nfs start
$ service nfslock start
$ mount -vt nfs4 192.168.1.115:/ /mnt
$ vi /mnt/upload/writetest
blah
:wq # OK #
$ umount /mnt
'''3. Op een Debian/Ubuntu client'''
$ sudo apt-get install nfs-common
$ sudo modprobe nfs
$ sudo mount -vt nfs4 192.168.1.115:/ /mnt
$ ls /mnt
file0 file1 file2 upload
$ umount /mnt
=== Alternatief met vaste poorten en hosts.allow/deny ===
Maak eerst de nodige mappen aan.
$ mkdir /shares /shares/Public /shares/Public/upload
$ chcon -R -t public_content_t /shares/Public
$ chcon -R -t public_content_rw_t /shares/Public/upload
Nu gaan we het exportsbestand aanpassen om de nodige rechten op de shares in te stellen.
$ nano /etc/exports
Daarin voegen we volgende regels toe.
/shares/Public *(ro,sync,all_squash)
/shares/Public/upload *(rw,all_squash)
De instellingen hieronder zijn van toepassing in het netwerklokaal, pas deze aan voor je eigen configuratie indien nodig.
Eerst stellen we de server-host in.
$ echo ’10.0.3.250 server’ >> /etc/hosts
Vervolgens stellen we de hosts in die we willen toelaten tot de server.
$ nano /etc/hosts.allow
portmap:10. : allow
lockd: 10. : allow
Regel 52 ⟶ 145:
rquotad: 10. :allow
statd: 10. : allow
{{Bericht
| titel=Opmerking:
| bericht=Indien je gebruik maakt van notatie 10.*.*.*/255.0.0.0 kan dit volgende fout opleveren: "RPC: Program not registered".
| type=opmerking
}}
Tot slot stellen we de hosts in die geen toegang krijgen tot de server.
$ nano /etc/hosts.deny
portmap:ALL
lockd:ALL
Regel 63 ⟶ 160:
statd:ALL
Omdat de poorten variabel zijn bij NFS, is het geen slecht idee om deze vast in te stellen, wat het configureren van de firewall daarna makkelijker
RQUOTAD_PORT=9403
LOCKD_TCPPORT=8001
Regel 73 ⟶ 168:
STATD_PORT=9401
Vervolgens voegen we de juiste poorten toe aan de firewall (/etc/sysconfig/iptables):
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 111 -j ACCEPT
Regel 88 ⟶ 183:
-A INPUT -p udp --dport 8002 -j ACCEPT
Als allerlaatste inspanning veranderen we nog de instellingen van SELinux
Nu dienen we juist nog de service te starten en deze ook automatisch te laten starten bij het booten van de server
Indien
$ service portmap start
# of
$ service rpcbind start
{{Bericht
| titel=Opmerking:
| bericht=Mount werkt niet altijd. Bij fout: ''mount.nfs : mount system call fail''. Probeer ''mount -t nfs4'' voor een beter resultaat.
| type=opmerking
}}
De client moet ook NFS ondersteunen, indien dit niet het geval is krijg je een error.
(for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try dmesg | tail or so
Je kan dit oplossen door:
$ sudo apt-get install nfs-common portmap # Ubuntu/Debian
$ sudo yum -y install nfs-utils portmon # Fedora/CentOS
Toen ik deze stappen de eerste maal volgde werkte alles zonder problemen. Bij een tweede poging werd mijn /shares/Public/upload folder steeds als "read-only" gemount. Ik ging er vanuit dat ik iets verkeerd gedaan had de tweede maal maar blijkbaar zijn er nog mensen bij wie deze folder als read-only mount. Ik heb dit "opgelost" door eerst de folder te mounten op de host en dan op de VM de rechten van de folder te veranderen als volgt:
$ sudo chmod ugo+rw /shares/Public/upload
Ik betwijfel of dit DE oplossing is, maar het werkt.
Indien dit niet zou lukken kunnen we altijd controleren of alle poorten open staan via het commando op de client in te geven:
Of op de server met:
$ rpcinfo -p
Als alternatief kan je ook ''netstat'' of ''nmap'' gebruiken:
$ netstat -ntl
== Bestanden delen, de Windows-manier: Samba ==
|