From 8081a5520a441b43a8a7a73f3a90c7aacfaa8e10 Mon Sep 17 00:00:00 2001
From: Timotej Lazar
+ VirtualBox | Server | Client | NFS | Samba | DHCP
+
+ Set up two virtual computers - SimpleArbiterDhcp and FileServer.
+
+ Make sure that the directory /srv/nfs/ERLbbBrT on FileServer is accessible
+ over NFS and over SMB under the sharename urania-03.
+ Set the SMB server name to zarptica-32.
+
+ SimpleArbiterDhcp should have write access to /srv/nfs/ERLbbBrT over NFS.
+
+ auto eth1
+ INTERFACES="eth1"
+
+ authoritative;
+ #privileges for SimpleArbiterDhcp After that run
+
+ services nfs-kernel-server restart
+
+
+ mkdir /home/student/urania-03
+ [global]
+ Test the syntax of smb.conf file with command
+
+ testparam
+
+
+ In order to define passwords for Samba users they have to exist on a local system, too.
+
+ Use command
+
+ useradd USERNAME --shell /bin/false
+
+ to create user with a disabled account and without home directory, e.g:
+
+ useradd tester --shell /bin/false
+
+ smb_nfs
+
+
+ Quick guide
+
+
+ Instructions
+
+
+
+ Download these VM images:
+
+
+
+
+
+ VirtualBox Settings:
+
+
+
+
+
+
+
+
+
+
+ Server FileServer
+
+
+
+
+
+
+
+
+ iface eth1 inet static
+ address 192.168.1.10
+ netmask 255.255.255.0
+ network 192.168.1.0
+ broadcast 192.168.1.255
+
+ default-lease-time 600;
+ max-lease-time 7200;
+
+ subnet 192.168.1.0 netmask 255.255.255.0 {
+ range 192.168.1.100 192.168.1.200;
+ option routers 192.168.1.10;
+ option domain-name-servers 193.2.1.66, 8.8.4.4;
+
+ host SimpleArbiter {
+ hardware ethernet 08:00:27:A2:FB:B4;
+ fixed-address 192.168.1.180;
+ }
+ }
+
+
+
+ /srv/nfs/ERLbbBrT 192.168.1.180(rw,sync,insecure)
+ /srv/nfs/ERLbbBrT 192.168.1.0/24(ro,sync,insecure)
+
+
+
+ chown -R root:users /home/urania-03/
+ chmod -R ug+rwx,o+rx+w /home/urania-03
+
+ workgroup = users
+ server string = zarptica-32
+ dns proxy = no
+ log file = /var/log/samba/log.%m
+ max log size = 1000
+ syslog = 0
+ panic action = /usr/share/samba/panic-action %d
+ security = user
+ encrypt passwords = yes
+ passdb backend = tdbsam
+ obey pam restrictions = yes
+ unix password sync = yes
+ passwd program = /usr/bin/passwd %u
+ passwd chat = *Enter\snew\s*\spassword:* %n\n
*Retype\snew\s*\spassword:* %n\n
*password\supdated\ssuccessfully* .
+ pam password change = yes
+ map to guest = bad user
+ usershare allow guests = yes
+
+ [homes]
+ comment = Home Directories
+ browseable = no
+ read only = yes
+ create mask = 0700
+ directory mask = 0700
+ valid users = %S
+
+ [printers]
+ comment = ALl Printers
+ browseable = no
+ path = /var/spool/samba
+ printable = yes
+ guest ok = no
+ read only = yes
+ create mask = 0700
+
+ [print$]
+ comment = Printer Drivers
+ path = /var/lib/samba/printers
+ browseable = yes
+ read only = yes
+ guest ok = no
+
+ [urania-03]
+ comment = All Users
+ path = /home/urania-03
+ users = @users
+ force group = users
+ create mask = 0660
+ directory mask = 0771
+ writable = yes
+
+ Define Samba password for your user: +
+ smbpasswd -a tester +
++ Add the user to your group. +
+ Open /etc/group file and add group and users: + + users:x:1002:tester + +
+ +
+ mkdir mnt
+ mkdir mnt/smb
+ mkdir mnt/nfs
+
+ sudo mount 192.168.1.10:/srv/nfs/ERLbbBrT /mnt/nfs +
+
+ sudo mount -t cifs //192.168.1.10/urania-03 /mnt/smb -o username=tester,password=test,workgroup=users
+
+ You should be able to access shared folders now. +
+V tej vaji postavimo na linux-u strežnik za nudenje datotek prek mreže in strežnik za SMB, s katerim lahko na Windows sistemih postavimo datoteko v skupno rabo. Pazi da bo simpleArbiterDhcpGW imel NFS pravico pisanja po imeniku!
+Naj ima 2 omrežna vmesnika, prvi naj bo preko NAT povezan na svetovni splet, drugi vmesnik pa naj vsebuje interno povezavo znotraj virtualnih sistemov na tvojem računalniku “intnet”.
+Naj ima 1 omrežni vmesnik, povezan na interno omrežje “intnet”.
+Parametri za reševanje naloge
+Tokrat imamo tri parametre. “Imenovani” dir, smb-share, smb-server.
+Oziroma iz slike so to:
+Ko zaženemo simpleArbiterDhcpGW in student-fileserver se najprej prijavimo v oba sistema. Nato pa na student-fileserver poženemo
+apt-get update && apt-get install nfs-kernel-server samba
V datoteki /etc/exports
dodamo sledečo vrtstico: /srv/nfs/[dir] [IP simpleArbiterDhcpGW](rw)
.
Datoteko shranimo in znova poženemo NFS strežnik.
+service nfs-kernel-server restart
Ustvarimo imenik, ki smo ga malce prej navedli v nastavitvah NFS. In nato omogočimo vsem pisanje po tem imeniku.
++mkdir /srv/nfs/[dir] +chmod oug+w /srv/nfs/[dir] ++
Vse nastavitvene datoteke SMB se nahajajo v imeniku: /etc/samba
. Zanima pa nas datoteka smb.conf
.
# Datoteka smb.conf + [global] + + workgroup = WORKGROUP + netbios name = [smb-server] # Nadomestek DNS, ki si ga je izmislil Microsoft + + # Malce nižje pod vrstico =========== Share Definitions =========== dodamo svoje nastavitve + + [[smb-share]] # Primer iz slike: [aurora-85] + path = /srv/nfs/[dir] + read only = no + guest ok = yes + browseable = yes
Ko popravimo to datoteko restartamo SMB in NetBios s spodnjima ukazoma.
+service smbd restart +service nmbd restart
Sedaj samo še testiranje :) Za to pa na simpleArbiterDhcpGW poženi testno skripto.
+./test_task.py
+Postavi dva navidezna računalnika: simpleArbiterDhcp in FileServer. + +
+Poskrbi, da bo imenik {{NFS_MOUNT}}
na FileServer dostopen prek NFS in prek SMB kot imenik v skupni rabi {{SMB_SHARENAME}}
. Ime strežnika SMB nastavite na {{FILESERVER_NAME}}
.
+
+
+SimpleArbiterDhcp naj ima prek NFS pravico pisati po imeniku. +''', + 'en': '''\ +
+Set up two virtual computers: simpleArbiterDhcp and FileServer. + +
+Make sure that the directory {{NFS_MOUNT}}
on FileServer is accessible over NFS and over SMB under the sharename {{SMB_SHARENAME}}
. Set the SMB server name to {{FILESERVER_NAME}}
.
+
+
+SimpleArbiterDhcp should have write access to {{NFS_MOUNT}}
over NFS.
+''',
+}
+
+computers = {
+ 'FileServer': {
+ 'disks': [
+ { 'name': 'student-fileserver',
+ },
+ ],
+ 'network_interfaces': [{'network': 'net1'}],
+ 'flavor': 'm1.tiny',
+ 'config_drive': False
+
+ },
+ 'SimpleArbiter': {
+ 'disks': [
+ { 'name': 'simpleArbiterDhcpGW',
+ },
+ ],
+ 'network_interfaces': [{'network': 'net1'}, {'network': 'test-net'}],
+ 'flavor': 'm1.tiny',
+ 'config_drive': False
+ }
+}
+
+networks = { 'net1': {'public': False}, 'test-net': {'public': True} }
+
+params_meta = {
+ 'FILESERVER_IP': {'descriptions': {'si': 'IP streznika'}, 'w': True, 'public':True, 'type': 'IP', 'generated': False},
+ 'FILESERVER_NAME': {'descriptions': {'si': 'Ime streznika'}, 'w': False, 'public':True, 'type': 'hostname', 'generated': True},
+ 'SMB_SHARENAME': {'descriptions': {'si': 'Ime imenika v skupni rabi prek SMB', 'en': 'SMB sharename'}, 'w': False, 'public':True, 'type': 'filename', 'generated': True},
+ 'NFS_MOUNT': {'descriptions': {'si': 'Imenik, dostopen prek NFS'}, 'w': False, 'public': True, 'type': 'filename', 'generated': True},
+ 'SHARED_FILENAME': {'descriptions': {'si': 'Iskana datoteka'}, 'w': False, 'public': True, 'type': 'filename', 'generated': True},
+ 'SHARED_CONTENT': {'descriptions': {'si': 'Vsebina iskane datoteke'}, 'w': False, 'public': False, 'type': 'short', 'generated': True},
+ 'SHARED_FILE_SEED': {'descriptions': {'si': 'Dodatni podatek za testiranje'}, 'w': False, 'public': True, 'type': 'filename', 'generated': True},
+}
+
+def task(FILESERVER_IP, FILESERVER_NAME, NFS_MOUNT, SMB_SHARENAME, SHARED_FILE_SEED):
+ import pexpect
+ import random
+ # TODO: (polz) Try using pexpect instead of subprocess, it's much nicer.
+ # Tabela vseh mountov.
+ # Samo mounti na streznik.
+ results = dict()
+ results['mount'] = pexpect.run('mount')
+ results['try_mount_nfs'] = pexpect.run('sudo mount -t nfs {}:/{} /mnt/nfs'.format(
+ FILESERVER_IP, NFS_MOUNT))
+ results['try_mount_smb'] = pexpect.run(
+ 'sudo mount -t cifs //{}/{} /mnt/smb -o ip={},guest'.format(
+ FILESERVER_NAME, SMB_SHARENAME, FILESERVER_IP))
+ results['mount_after'] = pexpect.run('mount')
+ results['ls_smbmount'] = pexpect.run('ls /mnt/smb')
+ results['ls_nfs'] = pexpect.run('ls /mnt/nfs')
+ r = random.Random(SHARED_FILE_SEED)
+ testfile = kpov_util.fname_gen(r)
+ teststring = kpov_util.alnum_gen(r, 200)
+ with open('/mnt/nfs/{}'.format(testfile),'w') as f:
+ f.write(teststring)
+ results['filestr'] = pexpect.run(
+ 'cat /mnt/smb/{}'.format(testfile))
+ results['filels'] = pexpect.run(
+ 'ls /mnt/smb/'.format(testfile))
+ pexpect.run('rm /mnt/nfs/{}'.format(testfile))
+ results['filels_later'] = pexpect.run('ls /mnt/smb')
+ pexpect.run("sudo umount /mnt/nfs")
+ pexpect.run("sudo umount /mnt/smb")
+ return results
+
+def gen_params(user_id, params_meta):
+ d = kpov_util.default_gen(user_id, params_meta)
+ r = random.Random(user_id)
+ d['FILESERVER_NAME'] = kpov_util.hostname_gen(r)
+ d['SMB_SHARENAME'] = kpov_util.hostname_gen(r)
+ d['NFS_MOUNT'] = "/srv/nfs/" + kpov_util.fname_gen(r, False)
+ d['SHARED_FILENAME'] = kpov_util.fname_gen(r)
+ d['SHARED_CONTENT'] = kpov_util.fortune(r, 4096)
+ d['SHARED_FILE_SEED'] = kpov_util.alnum_gen(r, 42)
+ return d
+
+def task_check(results, params):
+ score = 0
+ hints = []
+ r = random.Random(params['SHARED_FILE_SEED'])
+ testfile = kpov_util.fname_gen(r)
+ teststring = kpov_util.alnum_gen(r, 200)
+ # no need to check results['mount'] or results['try_mount_nfs']
+ # or results['try_mount_smb']
+ if results['mount_after'].find('//{}/{} on /mnt/smb type cifs'.format(
+ params['FILESERVER_NAME'], params['SMB_SHARENAME'])) >= 0:
+ score += 2
+ if results['mount_after'].find('{}:{} on /mnt/nfs type nfs'.format(
+ params['FILESERVER_IP'], params['NFS_MOUNT'])) >= 0:
+ score += 2
+ if results['ls_smbmount'].find(params['SHARED_FILENAME']) >= 0:
+ score += 1
+ if results['ls_nfs'].find(params['SHARED_FILENAME']) >= 0:
+ score += 1
+ if results['filestr'] == teststring:
+ score += 2
+ filels_later = set(results['filels_later'].split())
+ filels = set(results['filels'].split())
+ if "".join(filels - filels_later).find(testfile) >= 0:
+ score += 2
+ return score, hints
+
+def prepare_disks(templates, task_params, global_params):
+ d = templates['student-fileserver']
+ d.mkdir("/srv/nfs")
+ d.mkdir(task_params['NFS_MOUNT'])
+ d.write(task_params['NFS_MOUNT'] + "/" + task_params["SHARED_FILENAME"],
+ task_params["SHARED_CONTENT"])
+ d = templates['simpleArbiterDhcpGW']
+ d.mkdir('/mnt/nfs')
+ d.mkdir('/mnt/smb')
+ write_default_config(templates['simpleArbiterDhcpGW'], global_params)
--
cgit v1.2.1