# Linux Systeembeheer/Bestanden en printers delen
## Inleiding

Tegenwoordig kan je voor weinig geld een netwerk-harde schijf (Network Attached Storage of NAS) kopen. Meestal draait op dit soort apparaten een vorm van Linux. Zelf een NAS bouwen is helemaal niet zo moeilijk.
Bij het maken van deze opdracht zijn enkele mensen op problemen gestoten die ze niet direct konden oplossen. Voor iedereen die met de gewone stappen niet tot het gewenste resultaat komen, staat er onderaan een alternatief pad om deze opdracht te vervullen. Dit is getest op CentOS, en zou volledig moeten werken.

## Leerdoelen

In een Redhat-gebaseerd Linux-systeem:
* Een NFS-server kunnen opzetten
** basisconfiguratie /etc/exports
*** permissies instellen
*** hosts toelaten (in /etc/exports, hosts.allow/deny)
** op afstand een NFS-directory mounten
* Een Samba-server kunnen opzetten
** bestanden delen
** printer delen
** permissies instellen
*** security = user/share/...
*** wachtwoorden beheren
** verschillende manieren om een share vanuit de client aan te spreken (Windows explorer, Gnome Nautilus, smbclient, mounten)
* Een eenvoudige FTP-server kunnen opzetten

## 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.

### 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.
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.
Tenslotte stellen we de firewall in om NFS verkeer toe te laten.
De configuratie is klaar. We starten de nodige services.
Als we de services automatisch willen starten bij het opstarten van de server kunnen we het commando chkconfig gebruiken.
Als het bestand /etc/exports gewijzigd wordt, kan de nieuwe configuratie gebruikt worden zonder de nfs service te herstarten met het exportfs commando.
Bemerk dat de poorten die NFS gebruikt standaard niet vastliggen. Controleren op welke poorten de services draaien kunnen we doen met rpcinfo.

### Testen

In het voorbeeld is het adres van de server 192.168.1.115.
1. Op de CentOS server zelf
2. Op een CentOS client
3. Op een Debian/Ubuntu client

### Alternatief met vaste poorten en hosts.allow/deny

Maak eerst de nodige mappen aan.
Nu gaan we het exportsbestand aanpassen om de nodige rechten op de shares in te stellen.
Daarin voegen we volgende regels toe.
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.
Vervolgens stellen we de hosts in die we willen toelaten tot de server.
* Opmerking: Indien je gebruik maakt van notatie 10.*.*.*/255.0.0.0 kan dit volgende fout opleveren: "RPC: Program not registered".
Tot slot stellen we de hosts in die geen toegang krijgen tot de server.
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 maakt.
Vervolgens voegen we de juiste poorten toe aan de firewall (/etc/sysconfig/iptables):
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 het starten van de service faalt ligt het probleem waarschijnlijk bij de portmap service die niet draait.
Nu kunnen we de NFS testen door ze te mounten op een andere pc/client. We zullen proberen een bestand aan te maken.
* Opmerking: Mount werkt niet altijd. Bij fout: mount.nfs : mount system call fail. Probeer mount -t nfs4 voor een beter resultaat.
De client moet ook NFS ondersteunen, indien dit niet het geval is krijg je een error.
Je kan dit oplossen door:
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 ervan uit 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:
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:
Als alternatief kan je ook netstat of nmap gebruiken:

## Bestanden delen, de Windows-manier: Samba

Samba is een open source softwarepakket dat gebruik maakt van het SMB protocol. De technologie wordt vooral gebruikt om UNIX-machines te laten communiceren met Windows-machines.

### Installatie

De opdrachtregels die verder volgen zijn getest op een minimale installatie van CentOS 5.5.

### Configuratie

We wijzigen de security context van de map die we delen.
We maken een gebruiker student aan, en verlenen hem toegang tot de Samba share.
Tenslotte stellen we de firewall in met system-config-securitylevel-tui
De configuratie is klaar. We starten de service. We zorgen ook dat de service opstart bij het opstarten van de server.

### Testen

In het voorbeeld is het adres van de server 192.168.1.115.
1. Met Ubuntu 10.10
Places => Connect to Server => Windows Share
    Server: 192.168.1.115
    Share: public
    Username: (blanco = "guest" account)
Resultaat: De schijf wordt read-only aangekoppeld.
Places => Connect to Server => Windows Share
    Server: 192.168.1.115
    Share: public
    Username: student
Resultaat: We kunnen inloggen met het Samba wachtwoord van de gebruiker student. De map upload is zoals verwacht schrijfbaar.
2. Met Ubuntu 13.04
Bestanden => Bestanden (menu bovenaan) => Verbinden met serveradres 192.168.1.115
3. Met Windows 7
Ga in Windows Explorer naar de locatie \\192.168.1.115.

## Een FTP-server opzetten

FTP staat voor File Transfer Protocol en maakt het mogelijk bestanden uit te wisselen over TCP/IP.

### Installatie

De opdrachtregels die verder volgen zijn getest op een minimale installatie van CentOS 5.5.

### Configuratie

Als voorbeeld configureren we een FTP-server waar je als anonieme gebruiker de inhoud van /shares/Public kan zien.
    $ vi /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    anon_root=/srv/shares/Public
    no_anon_password=YES
    local_root=/srv/shares
    chroot_local_user=YES uit commentaar halen
We stellen de firewall in met system-config-securitylevel-tui.
Naast het toelaten inkomende FTP verbindingen is het ook nodig enkele SELinux booleans te wijzigen, zodat de variabelen' effect heeft.
    setsebool -P ftp_home_dir on
    setsebool -P allow_ftpd_anon_write on
    setsebool -P allow_ftpd_full_access on
Nu moeten er ook nog wat rechten aangepast worden op de mappen:
    chown root:student /srv/shares/upload
    Sudo chmod 775 /srv/shares/public
    Sudo chkconfig vsftpd on
Het enige wat ons verder rest is de service te starten, alsook maken dat deze start bij het opstarten van de server.

### Testen

In het voorbeeld is het adres van de server 192.168.1.115.
De server testen kunnen we doen door met een FTP-client of webbrowser verbinding te maken met ftp://192.168.1.115/.

## De firewall instellen

Naast gebruik te maken van system-config-securitylevel(-tui) kan je de firewall uiteraard ook configureren met iptables.
Een overzicht van de iptables voor een NAS met NFS, Samba en FTP:

## Labo-opdracht

Tegenwoordig kan je voor weinig geld een netwerk-harde schijf (Network Attached Storage of NAS) kopen. Meestal draait op dit soort apparaten een vorm van Linux. De bedoeling van dit labo is zelf zo'n NAS te bouwen.
* Zet een NFS fileserver op met volgende eigenschappen:
** Het SELinux-niveau moet op Enforcing blijven
** De directory /var/shares/Public moet voor alle hosts uit het klasnetwerk leesbaar zijn
** De directory /var/shares/Public/upload moet voor alle hosts uit het klasnetwerk leesbaar én schrijfbaar zijn
** Test uit vanop een andere computer
* Zet op dezelfde machine een Samba fileserver op met volgende eigenschappen:
** Het SELinux-niveau moet op Enforcing blijven
** De directory /var/shares/Public moet voor alle hosts uit het lokale leesbaar zijn en inloggen is niet nodig (“gast-toegang”)
** De directory /shares/Public/upload moet voor alle hosts uit het lokale netwerk leesbaar zijn én schrijfbaar voor de gebruiker student (die moet inloggen)
** Test uit vanop een andere computer, zowel vanuit Windows als vanuit Linux. Probeer op een Linux client een gedeelde directory te mounten.
* Zet op dezelfde machine een FTP server op waar je als anonieme gebruiker de inhoud van /var/shares/Public kan zien.