Aktówka w Linuksie

aktówka

Tak jak system Windows „od zawsze” ma swoją aktówkę, tak Linux od zawsze ma Network File System. Program ów pozwala montować katalogi z innego komputera tak samo, jakby były podłączonymi lokalnie urządzeniami.

Zaczniemy od serwerka:

apt-get install nfs-kernel-server
dnf install nfs-utils

co pozwoli nam cokolwiek udostępniać. Następnie włączymy sobie na chwilkę demona, żeby sprawdzić czy wszystko działa. Na Debianie jest to:

systemctl enable rpcbind
systemctl start rpcbind
systemctl enable nfs-kernel-server
systemctl start nfs-kernel-server

lub w przypadku Fedory

systemctl enable rpcbind
systemctl start rpcbind
systemctl enable nfs-server
systemctl start nfs-server

i usługa działa, tylko niczego jeszcze nie udostępnia. Żeby to zmienić, zajmiemy się plikiem /etc/exports. Nfs musi mieć tylko jedną linijkę:

/home/magazyn 192.168.123.0/24(rw,sync,no_subtree_check,crossmnt,no_root_squash,fsid=0)

Już piszemy co to wszystko znaczy:

  • /home/magazyn to katalog, który będziemy udostępniać,
  • 192.158.123.0/24 to podsieć, której pozwalamy na dobranie się do naszych plików,
  • rw oznaczy read/write
  • dzięki sync nie trzeba czekać na odmontowanie „partycji”, żeby Linux doprowadził do ładu wszystkie operacje I/O (pamiętacie odmontowywanie dyskietek? 🙂 ),
  • no_subtree_check to od jakiegoś czasu domyślna opcja, dzięki której po zamontowaniu nie będzie widać katalogów nadrzędnych, czyli /home/magazyn,
  • crossmnt to opcja pozwalająca widzieć w zamontowanym katalogu zamontowane tak urządzenia, np. pendrajwa w /home/magazyn/pen, albo kolajny nfs w /home/magazyn/nfs2,
  • no_root_squash pozwala na nadpisywanie plików utworzonych przez roota,
  • fsid=0 przydaje się jeżeli system plików, na którym stoi serwer nfs, nie ma UUID (jeżeli ma i jest zwykłą partycją, to podanie fsid nie ma żadnego znaczenia).

Następnie trzeba utworzyć ten cały katalog i pozwolić zapisywać:

mkdir /home/magazyn
chmod 2770 magazyn

No dobrze, ale kto właściwie ma prawa do zapisu w tym katalogu? Na razie root. Utworzymy się sobie grupę, która będzie mogła tam zapisywać:

groupadd -g 9876 druzyna
chown -R nfsnobody:druzyna /home/magazyn
usermod -aG druzyna uzytkownik1

Grupę druzyna o GID 9876 należy dodać na każdym kliencie oraz wrzucić do niej użytkowników mających mieć prawa do zapisu.

Pozostało jeszcze otwarcie kilku portów: 111 i 2049, tcp oraz udp. Można dopisać do skrptu iptables:

# nfs
-A INPUT -s 192.168.123.0/24 -p tcp -m tcp --dport 111 -j ACCEPT
-A INPUT -s 192.168.123.0/24 -p udp -m udp --dport 111 -j ACCEPT
-A INPUT -s 192.168.123.0/24 -p tcp -m tcp --dport 2049 -j ACCEPT
-A INPUT -s 192.168.123.0/24 -p udp -m udp --dport 2049 -j ACCEPT

[aktualizacja: zajrzyj też do wpisu Porty dla NFS]

Skoro już o firewallu, to musimy też o sprawie poinformować plik /etc/hosts.allow

portmap 192.168.123.

Teraz wystarczy zrestartować przy pomocy ststemctl demony rpcbind oraz nfs-kernel-server / nfs-server i gotowe.

Na kliencie podpiętym do sieci 192.168.123. trzeba tylko zamontować „partycję”, tak jak wszystko inne podłączane do komputera:

mkdir /mnt/magazyn
mount -t nfs4 192.168.123.10:/home/magazyn /mnt/magazyn

i nic więcej. Jeżeli chcemy szybciej, to dodajemy do pliku /etc/fstab linijkę:

192.168.123.10:/ /mnt/magazyn nfs4 users,rw,noauto 0 0

przy czym lubię dodawać parametr noauto (serwer nie zawsze jest włączony). Wówczas wystarczy w dowolnym momencie krótkie

mount /mnt/magazyn
umount /mnt/magazyn

No i mamy swoją aktówkę. 🙂 Skomplikowane? Na pewno. Dużo roboty jak na tak prosty efekt? Trochę tak. Pasuje mi jednak to rozwiązanie. Trudno znaleźć dystrybucję bez nfs w repozytorium, unikamy wysyłania naszych rzeczy (nawet zaszyfrowanych) w internet, nie potrzebujemy serwerów pośredniczących, itd… Zamontowany udział nfs traktowany jest przez Linuksa jak każdy inny pejdrajw, partycja, płyta CD, czy cokolwiek. Nie trzeba doinstalowywać programów klienckich, dbać o odpowiednie wersje, i znowu itd… Kiedy już się raz przejdzie przez konfigurację, wszystko po prostu działa. Tak, jak powinno być na Linuksie.