Przejdź do głównej zawartości

Linux RHCE - SAMBA - Współpraca z platformą Windows

Samba w skrócie serwer plików i drukarek dedykowany dla środowisk Linux i współpracujący z systemami Windows. Jeśli jako administrator systemów Linux pomyślisz kiedykolwiek o systemach Windows przez myśl przejdzie Ci również hasło SAMBA. Protokołem do transmisji danych wykorzystywanym przez program samba oraz środowiska Windows jest SMB (ang. Server Message Block), ale protokołem transportowym niższej warstwy jest już TCP/IP. Samba jest doskonałą technologią jeżeli zachodzi potrzeba wymiany plików i współpracy pomiędzy systemami Linux, a Windows dając możliwość interakcji z serwerami i klientami Windows. Dzięki temu rozwiązaniu możemy udostępniać katalogi, działać jako serwer wydruku oraz pełnić bardziej zaawansowane funkcję jak kopia bezpieczeństwa dla kontrolera domeny Windows. Strona domowa projektu : http://www.samba.org/

INSTALACJA PAKIETÓW SAMBA 

Krok 1 - Instalacja wymaganych pakietów dla programu Samba

# yum install -y samba samba-common samba-client

Krok 2 - Sprawdzenie instalacji pakietów 

# rpm -qa | grep samba

samba-winbind-clients-3.5.10-114.el6.i686
samba-common-3.5.10-114.el6.i686
samba-3.5.10-114.el6.i686
samba-client-3.5.10-114.el6.i686

Krok 3 - Ustawienie uruchamiania samba przy starcie/restarcie systemu 

# chkconfig smb on

Krok 4 - Sprawdzenie poprawności uruchamiania z systemem

# chkconfig --list smb
smb   0:off   1:off   2:on    3:on    4:on    5:on    6:off

Krok 5 - Ustawienie uruchamianie NetBios z systemem

# chkconfig nmb on

Krok 6 - Sprawdzenie poprawności ustawień


# chkconfig nmb --list
nmb  0:off   1:off   2:on    3:on    4:on    5:on    6:off


KONFIGURACJA SERWISU SAMBA

 Jeżeli nigdy wcześniej nie mieliście do czynienia z SAMBA na początek warto poznać dwie usługi odpowiedzialne za działanie samba. 
  • smbd     - demon usługi samba
  • nmbd     - demon serwisu NetBIOS
Do dyspozycji mamy również pliki konfiguracyjne : 
  • /etc/samba/smb.conf        - Główny plik konfiguracyjny 
  • /etc/samba/smbusers         - Mapowanie samba i użytkowników Red Hat 
  • /etc/samba/smbpasswd       - Zawiera hasła użytkowników samba
Jak łatwo można się domyślić istnieje również grupa poleceń zarządzających : 
  • mount.cifs          Montowanie zasobów samba z uprawnieniami root 
  • smbclient           Połączenie do zasobów samba 
  • smbpasswd        Konfiguracja haseł dla użytkowników
  • smbstatus          Wyświetla status połączeń do samba 
  • testparm            Test składni poleceń w pliku głównym 
  • umount.cifs        Od montowanie zasobów samba z uprawnieniami root
Teraz znamy już lokalizację plików konfiguracyjnych oraz polecenia umożliwiające zarządzanie usługami. By rozpocząć konfigurację należy dokonać odpowiednich wpisów w głównym pliku konfiguracyjnym gdzie ustawimy lokalizację zasobów i inne parametry. Tak więc podstawowa konfiguracja znajduje się w  pliku


/etc/samba/smb.conf 

W sekcji global seting ustawiamy następujące parametry :

            workgroup = GRUPA12
        server string = Samba Server Version %v

        netbios name = host1

        interfaces = lo eth0 192.168.0.12
        hosts allow = 127. 192.168.0.5

 Czyli :

  • workgroup - nazwa grupy domowej 
  • server string - opis grupy domowej 
  • netbios name - nazwa pod jaką host będzie widoczny w sieci 
  • interfaces - interfejsy na jakich nasłuchuje usługa samba 
  • host allow - hosty, podsieci jakie mają uprawniania do zasobów samba

Kolejną sekcją jest sekcja konfiguracji logów gdzie : 

              # logs split per machine
        log file = /var/log/samba/log.%m
        # max 50KB per log file, then rotate
        max log size = 50

możliwe jest ustawienie lokalizacji plików logów i ich maksymalnego rozmiaru

UDOSTĘPNIANIE ZASOBÓW

Istotną sekcją określającą i konfigurującą zasoby jakie zastaną udostępnione jest sekcja "Share Definitions" w jakiej znajdują się instrukcję wskazujące na udostępniane zasoby i sposoby ich udostępnienia.

[homes]
       comment = Home Directories
       browseable = no
       writable = yes
       valid users = %S
       valid users = MYDOMAIN\%S

[printers]
       comment = All Printers
       path = /var/spool/samba
       browseable = no
       guest ok = no
       writable = no
       printable = yes

[samba]
        comment = dla usera sambauser
        path = /samba
        browsable = yes
        writable = yes
        public = no
        valid users = sambauser

Powyższy wycinek przedstawia trzy udostępnione zasoby jakimi są katalogi domowe użytkowników, drukarki oraz katalog /samba dla użytkownika sambauser. 

Krok 1 - By udostępnić katalog /samba rozpoczynamy od jego utworzenia:

# mkdir samba

USTAWIENIA SELINUX DLA SAMBA

Krok 2 -Następnie ustawiamy odpowiedni kontekst SELinux: 

# chcon -Rt samba_share_ /samba

Krok 3 - Ustawienie odpowiednich zmiennych SELinux 

# getsebool -a | grep -i samba 

samba_export_all_ro --> off
samba_export_all_rw --> off

Powyższe zmienne przestawiamy na on 

# setsebool -P samba_export_all_ro on
# setsebool -P samba_export_all_rw on

Sprawdzamy :

# getsebool -a | grep -i samba 

samba_export_all_ro --> on
samba_export_all_rw --> on

Krok 4 - Aby użytkownik mógł zapisywać do katalogu nadajemy odpowiednie uprawnienia

# chown sambauser:sambauser samba/
# chmod 777 samba/ - lub inne zgodnie z wymaganiami


Krok 5 - Ustawienie udostępnienia w pliku /etc/samba/smb.conf


[samba]
        comment = dla usera sambauser
        path = /samba
        browsable = yes
        writable = yes
        public = no
        valid users = sambauser

Powyższe oznacza : 
  • [samba] - nazwa pod jaką widoczny będzie zasób
  • path - ścieżka do katalogu, który udostęniamy
  • browsable - czy zasób będzie widoczny czy ukryty
  • writable - określenie prawa zapisu yes/no 
  • public - czy zasób będzie publiczny yes/no 
  • valid users = udostępnienie dla wybranych użytkowników

Krok 6 - Sprawdzenie poprawności składniowej pliku konfiguracyjnego

W celu sprawdzenia czy nie występują błędy w składni pliku smb.conf wydajemy polecenie :

# testparm

W wyniku, którego zobaczymy :


Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[samba]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        workgroup = GRUPA12
        server string = Samba Server Version %v
        interfaces = lo, eth0, 192.168.0.12
        log file = /var/log/samba/log.%m
        max log size = 50
        hosts allow = 127., 192.168.0.5
        cups options = raw

[samba]
        comment = dla usera sambauser
        path = /samba
        valid users = sambauser
        read only = No
        browseable = No



Wiemy już, że plik jest poprawny i nie zawiera błędów, ale możemy odczytać jakie na tą chwilę mamy ustawienia globalne, oraz różne udostępnienia dla użytkowników. Zanim zaczniemy podłączać się jako klient możemy również utworzyć użytkowników posiadających uprawnienia dostępowe do zasobów samba, którzy będą działać niezależnie od użytkowników znajdujących się w systemie. W tym celu skorzystamy z polecenia smbpasswd, które pomoże utworzyć nowych użytkowników dla samba. 

Składnia : smbpasswd [opcje] [user]

Opcje:
  • -a     dodanie użytkownika 
  • -d     Zablokowanie (disables) użytkownika 
  • -e     Odblokowanie (enables) użytkownika
  • -x     Usunięcie użytkownika


 Dodanie nowego użytkownika : 

UWAGA ! 
Ponieważ w konfiguracji używamy tdbsm i w pliku smb.conf mamy zapis : 

### Use a local password file (/etc/samba/smbpasswd) ###
security = user
passdb backend = tdbsam

Musimy pamiętać, że każdy użytkownik jakiego będziemy chcieli dodać do użytkowników samba musi posiadać również swoje konto w systemie (adduser sambauser). Jeżeli użytkownik nie ma konta systemowego podczas dodawania go do samba otrzymamy komunikat: 

# smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
Failed to add entry for user sambauser.

Krok 1 - utworzenie pierwszego użytkownika samba 

# smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
Added user sambauser.

Krok 2 - Sprawdzenie czy użytkownik został dodany poprawnie 

# pdbedit -w -L
sambauser:4229:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:E80F8E3BEE095A6482F800FFC5F44730:[U   ]:LCT-50AB71F4:

Ważne - restart po wprowadzeniu zmian ! 

Po dokonaniu jakichkolwiek zmian należy pamiętać , że zostaną one wprowadzone do użycia dopiero po restarcie usługi samba. 

Krok 1 - Uruchomienie lub restart serwisu Samba

# service smb start
Starting SMB services:                       [  OK  ]

# service smb restart
Shutting down SMB services:                  [  OK  ]
Starting SMB services:                       [  OK  ]

Krok 2 - Sprawdzenie czy usługa jest uruchomiona 

# service smb status
smbd (pid  5388) is running...

Wprowadzenie reguł zapory - iptables 

Krok 1 - używając narzędzia iptables dodajemy nowe reguły 

# iptables -I INPUT 5 -p tcp -m tcp --dport 137 -j ACCEPT
# iptables -I INPUT 5 -p udp -m udp --dport 138 -j ACCEPT
# iptables -I INPUT 5 -p udp -m udp --dport 139 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 139 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 445 -j ACCEPT

Krok 2 - Zapisanie nowo wprowadzonych reguł 

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[OK]

Krok 3 - Restart usługi zapory (iptables) 

# service iptables restart
iptables: Flushing firewall rules:                    [  OK  ]
iptables: Setting chains to policy ACCEPT: filter     [  OK  ]
iptables: Unloading modules:                          [  OK  ]
iptables: Applying firewall rules:                    [  OK  ]

Te cztery porty (137,138,139,445) są bardzo powszechne dla administratorów Windows. Teraz trzeba się dogadać z zabezpieczeniami SELinux. 

Zmienne logiczne SELinux dla Samba

Podstawowe zmienne logiczne (Booleans) SELinux dla samba. 

samba_domain_controler
Umożliwia by samba działała jako kontroler domeny dla użytkowników, grup i haseł 

samba_enable_home_dirs
Umożliwia udostępnianie katalogów domowych użytkowników

samba_export_all_ro 
Umożliwia udostępnienie każdego pliku i katalogu w trybie do odczytu 

samba_export_all_rw
Umożliwia udostępnienie każdego pliku i katalogu w trybie odczytu i zapisu

use_samba_home_dirs
Umożliwia serwerowi samba tworzenie nowych katalogów domowych

allow_smbd_anon_write
Umożliwia dokonwać zmian w udostępnionych przez samaba plikach publicznych 

samba_share_fusers
Zezwala na eksport wolumenów NTFS

samba_share_nfs
Umożliwia udostpenianie wolumenów NFS

samba_run_uncofined
Umożliwia uruchamianie skryptów 

virt_use_samba
Umożliwia zarządzanie plikami CIFS

KATALOGI DOMOWE SELinux

Jeżeli chcemy by dla użytkowników po zalogowaniu dostępne były ich katalogi domowe należy pamiętać, że musimy do tego celu przestawić jeszcze jedną zmienną SELinux. :

 setsebool -P samba_enable_home_dirs on

Udostępnienie w pliku /etc/samba/smb.conf  powinno wyglądać następująco ; 


[homes]
        comment = Home Directories
        browseable = no
        writable = yes
        read only = no
;       valid users = %s
;       valid users = MYDOMAIN\%S


Powyższe ustawienia umożliwiają logowanie się użytkowników do własnych katalogów domowych. 

Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości