magloman skrev:Står erbjudandet kvar?
...
You bet.
Om vi börjar med att definera vad du vill åtstakomma så alla har en klar bild av det;
* Köra NFS3 mot en eller flera shares på zfs-poolen,
* Köra SMB mot en eller fleras shares på zfs-poolen,
* Ha skriv och läsrättigheter till filerna på dessa shares med en och samma användare
Har jag uppfattat behovsbilden rätt då?
Om vi börjar med NFS3 så använder sig det protokollet av UID och GID i de filsystemsanrop som det gör, t.ex. om du skapar en fil på en NFS-monterad volym på en linux server som användaren dnmasq (som vi kan se GID och UID på med följande kommando)
- Kod: Markera allt
➜ ~ getent passwd dnsmasq
dnsmasq:x:618:618:dnsmasq daemon:/:/usr/bin/nologin
så kommer operativsystemet på den linuxmaskinen skicka ett nfs-CREATE-kommando till servern (innehållandes den UID och GID från användaren som försöker skapa filen, i detta fall UID 618 och GID 618, UID kommer först av de båda i kodsnutten ovan). Ifall servern tycker att det är OK utefter dess permissions på den sharen så kommer filen skapas. Detta är viktigt att komma ihåg, för det förutsätter att samma mappning av användarnamn mot UID och GID finns på både server och klient. Unixpermissions är ganska enkla, du har tre stycken read/write/execute-attribut att leka med, en för ägare av filen, en för gruppen som filen tillhör, och en för precis allting. Dessa kan man se i ett vanligt skal med en "ls -l fil"
- Kod: Markera allt
➜ ~ ls -l tmp/messages
-rw-r--r-- 1 cekstam cekstam 554493 Jun 10 2015 tmp/messages
den intressanta biten är "-rw-r--r--", första byten där representerar vad det är för typ av fil. Vanliga filer har "-", kataloger har "d", sockets har "s" osv, vi kan skita i den nu. De tre efterföljande bytesen definerar rättigheterna för ägaren, här är dom read och write (representerat av rw-), de efterföljande tre är för gruppen, och de tre sista för allt annat (alla users). För att man ska kunna accessa innehåll i en katalog så behöver man ha read OCH execute satt på den.
Anledningen till att jag ältar allt det här är för att man behöver förstå hur (fil)systemet bakom NFS och SMB hanterar filrättigheter för att kunna få båda att fungera bra ihop. Om man ser till att ha samma UID och GID-mappning på både NFS-server och klient (t.ex. om man i regel använder en användare som heter "bosse" för att spara filer på server och klient så ser man till att "bosse" har samma UID på alla klienter, "bosse" behöver nödvändigtvis inte finnas på själva servern, utan hans UID kommer att sparas där oavsett om han finns som en användare i systemet eller inte.)
Sambabitarna behöver jag nog friska upp lite inför det här, då det säkert var 5-10 år sen jag höll på med det senast. Det finns en del olika sätt att köra samba på (samba är en applikation i *nix som pratar SMB med windows/whatever-klienter), men ett av dom är ivf att man kan använda den lokala användardatabasen på servern som SMB-användare (på den tiden behövde man sätta ett specifikt smb-lösenord på användaren med kommandot "smbpasswd", vet inte om det är aktuellt längre), dvs om "bosse" finns upplagd på servern så kan man använda den som user när man monterar smb-shares. Det enklaste i detta fallet är att se till att man använder just det läget på samba, då kommer man kunna accessa filer från båda protokollen med samma användare.
Så;
1. Se till att du har en användare som du vill använda upplagd både på server och klienter
2. Se till att alla dina filer ägs av den användaren
3. Se till att alla dina filer har de rättigheter du vill ha på dom
4. Se till att samba kör läget som tillåter systemanvändare att accessa sharesen
Nu var det väl några kameror som skrev till NFS-sharesen va? Då är det ju inte helt otippat att dom kör allting som användaren "root", och då får vi gå in på några andra NFS-attribut för att lösa det, men vi väntar med det tills det är bekräftat isf.
-ekstam
perl -e'foreach (qw(5A 47 56 30 49 48 5A 68 63 69 42 70 62 6E 52 6C 49 47 78 70 64 47 55 67 5A 48 56 72 64 47 6C 6E 64 43 42 68 64 48 51 67 61 47 6C 30 64 47 45 67 61 47 6C 30 49 44 6F 70 43 67 3D 3D)) { print chr (hex $_); }'