Samba poskytuje serverový a klientský software umožňující sdílení souborů mezi počítači se systémem Linux a Windows. Instalace a konfigurace na RHEL 8 / CentOS 8 je docela snadná. Pokračujte ve čtení, abyste se dozvěděli, jak sdílet adresář se sambou a jak na něj použít vhodný kontext SELinux.
V tomto tutoriálu se naučíte:
- Jak nainstalovat sambu na RHEL8
- Jak povolit a spustit démony smb a nmb
- Jak vytvořit sdílení samby
- Jak nastavit bránu firewall tak, aby umožňovala přístup ke sdílení samba
- Jak nastavit správný kontext SELinux pro sambu, aby správně fungovala
Požadavky na software a použité konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | Red Hat Enterprise Linux 8 |
Software | Balíčky Samba, coreutils a policycoreutils-python-utils |
Jiné | Oprávnění ke spuštění příkazu s právy root. |
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Představujeme Sambu
Samba, jak je uvedeno na domovské stránce projektu, je software s otevřeným zdrojovým kódem, vydaný pod GPL
licence, která nám umožňuje sdílet soubory a tiskové služby pomocí SMB/CIFS
protokol.
Projekt poskytuje serverový i klientský software umožňující spolupráci s počítači se systémem Windows, což představuje ideální řešení ve smíšených prostředích. V tomto tutoriálu uvidíme, jak nainstalovat Sambu na Red Hat Enterprise Linux 8, jak nastavit sdílení samby, jak nastavit firewall pro umožnění přístupu ke sdíleným zdrojům a jak použít vhodný kontext SELinux.
Instalace
První věc, kterou musíme udělat, je nainstalovat sambu na náš počítač. Balíček a potřebné knihovny jsou k dispozici v oficiálních repozitářích RHEL 8 / CentOS 8, takže je můžeme nainstalovat pouze pomocí yum nebo dnf. V této verzi RHEL/CentOS je první příkaz pouze „odkaz“ na druhý:
$ sudo dnf install samba samba-client
Balíček samba-client není nezbytně nutný, ale nástroje, které poskytuje, mohou být užitečné. Jakmile jsou balíčky nainstalovány, musíme spustit a povolit smb
a nmb
démoni při startu. První je démon, který se stará o provádění skutečných přenosů a operací sdílení, zatímco druhý provádí NetBIOS
rozlišení názvů, umožňující zobrazení zdrojů při procházení sítě v systému Windows. Nyní můžeme povolit a spustit obě služby systemd jediným příkazem:
$ sudo systemctl enable --now {smb,nmb}
Konfigurace brány firewall
Dalším krokem je konfigurace firewallu. Musíme otevřít příslušné porty, aby zdroje sdílené sambou byly přístupné z jiných strojů. Výchozí software pro správu firewallu na RHEL 8 / CentOS 8 je firewalld.
Naštěstí pro nás není potřeba otevírat porty ručně:vše, co musíme udělat, je přidat službu „samba“ do naší zóny. „Služba“ je pouze abstrakce, která nám umožňuje povolit provoz přes všechny porty, které služba potřebuje, odkazem na název služby, místo abychom museli nastavovat (a pamatovat si) každý port, který používá. V případě, že chceme získat informace o „službě“, můžeme spustit:
$ sudo firewall-cmd --info-service samba samba ports: 137/udp 138/udp 139/tcp 445/tcp protocols: source-ports: modules: netbios-ns destination:
Z výstupu příkazu vidíme, že služba umožní provoz přes porty 173/udp, 138/udp, 139/tcp a 445/tcp. Chcete-li službu trvale přidat do výchozí zóny, můžeme spustit:
$ sudo firewall-cmd --permanent --add-service=samba
Při spouštění příkazu jsme použili --permanent
přepnout, aby naše změna byla trvalá. Také jsme předpokládali default
zóna, která se má používat. Pokud bychom chtěli specifikovat jinou zónu pro akci, na kterou se má použít, použili bychom --zone
a zadali název zóny jako argument (např. –zone=external). Protože je naše změna nastavena jako trvalá, aby se projevila, musíme znovu načíst konfiguraci brány firewall:
$ sudo firewall-cmd --reload
Můžeme ověřit, že služba „samba“ je nyní součástí naší zóny, spuštěním:
$ sudo firewall-cmd --list-services cockpit dhcpv6-client http samba ssh
Opět platí, že pokud není zadána žádná zóna, příkaz se použije na výchozí zónu.
Konfigurace sdíleného adresáře přístupného hostům
Řekněme, že chceme sdílet adresář prostřednictvím samby a chceme umožnit volný přístup k tomuto adresáři uživatelům typu host, aniž by museli zadávat heslo. Abychom získali požadovaný výsledek, musíme provést nějaké změny v souboru /etc/samba/smb.conf
a přidejte „stanzu“ pro náš podíl. Otevřete soubor pomocí svého oblíbeného editoru a v [global]
přidejte zvýrazněný text:
[global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw map to guest = bad user
map to guest = bad user
instrukce, mapuje pokusy o přihlášení se špatnými uživatelskými jmény na výchozího uživatele hosta, což je ve výchozím nastavení nobody
. To je nutné pro umožnění anonymního přístupu bez nutnosti zadávat heslo.
Po této změně musíme na konec souboru připojit novou stanzu věnovanou našemu sdílení. Sdílený prostředek pojmenujeme „linuxconfig“:
[linuxconfig] path = /mnt/shared guest only = yes
S výše uvedeným nastavením jsme deklarovali, že chceme sdílet obsah /mnt/shared
adresář, bez nutnosti autentizace uživatele. Toto nastavení je zjevně riskantní a je zde uvedeno pouze jako příklad:ve scénáři reálného světa možná budete chtít alespoň odepřít přístup pro zápis hostům (můžete to udělat přidáním writeable = no
návod). Aby byly změny účinné, musíme restartovat démony:
$ sudo systemctl restart {smb,nmb}
Nakonfigurujte sdílenou složku přístupnou pouze registrovaným uživatelům
Abychom ochránili přístup ke zdroji pomocí výzvy k přihlášení, když samba běží jako samostatný server, musíme do databáze samby přidat stávajícího uživatele. Pro přístup ke sdílenému adresáři budou nutné přihlašovací údaje tohoto uživatele. Z bezpečnostních důvodů je dobrým zvykem vytvořit pro tento úkol vyhrazeného uživatele, vynechat vytváření jeho domovského adresáře a přiřadit mu falešný shell:
$ sudo adduser -M sambauser -s /sbin/nologin
-M
volba předaná příkazu je zkrácená forma pro --no-create-home
, což je docela samovysvětlující; -s
místo toho zadejte shell, v tomto případě záměrně neplatný:/sbin/nologin
. V tomto okamžiku uživatel ani nemusí mít v našem systému nastaveno heslo.
Jakmile je uživatel vytvořen, musíme jej přidat do databáze samby:operaci můžeme provést pomocí smbpasswd
příkaz:
$ sudo smbpasswd -a sambauser New SMB password: Retype new SMB password: Added user sambauser.
Po spuštění příkazu jsme vyzváni k přiřazení hesla uživateli a také k jeho potvrzení:toto heslo bude platné pouze v kontextu samby, nemá nic společného s uživatelským účtem v našem systému. Chcete-li omezit sdílení, které jsme dříve vytvořili, musíme provést malou změnu ve vyhrazené sekci:
[linuxconfig] path = /mnt/shared guest ok = no
Platnost našeho nastavení můžeme ověřit pomocí testparm
příkaz:
$ testparm Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[homes]" Processing section "[printers]" Processing section "[print$]" Processing section "[linuxconfig]" Loaded services file OK. Server role: ROLE_STANDALONE
Znovu musíme restartovat smb
a nmb
démony, aby byly naše změny účinné. Sdílený adresář bude nyní přístupný pouze po zadání správných přihlašovacích údajů.
Nastavení SELinux pro sambu
SELinux je často vnímán jako komplikace a je okamžitě deaktivován. To není nutné:musíme se pouze naučit, jak jej nakonfigurovat, a využít výhod vylepšení zabezpečení, které poskytuje. Aby naše sdílení samby fungovalo, když je SELinux v režimu „vynucování“, musíme našemu sdílenému adresáři a souborům přiřadit příslušný kontext:
$ sudo chcon -R -t samba_share_t /mnt/shared
Ve výše uvedeném příkladu jsme použili chcon
pomocí -t
možnost změnit TYPE
části kontextu SELinux na samba_share_t
. Také jsme použili -R
přepnout, aby byl příkaz rekurzivní. Tato změna přežije restart, ale ne přejmenování systému, pokud pro náš adresář a soubory existuje výchozí politika, protože v takovém případě by bylo znovu použito výchozí nastavení.
Pokud chceme, aby naše změna přežila událost přeznačení, musíme do zásad přidat naše pravidlo. Můžeme to udělat pomocí semanage
příkaz:
$ sudo semanage fcontext -a -t samba_share_t "/mnt/shared(/.*)?"
Protože jsme použili (/.*)?
regex, pravidlo se použije na veškerý obsah „sdíleného“ adresáře a na adresář samotný. Můžeme ověřit, že naše pravidlo bylo přidáno do zásad, uvedením štítků používaných v našem systému:
$ sudo semanage fcontext -l | grep /mnt/shared /mnt/shared(/.*)? all files system_u:object_r:samba_share_t:s0
Nyní bychom měli mít funkční nastavení samby. K dalšímu vyladění konfigurace samby možná budeme muset také manipulovat s booleany SELinuxu. Například při přidávání existujících uživatelů do samby, aby bylo možné sdílet jejich domovské adresáře, musíme povolit dedikovaný SELinux boolean. K vypsání všech booleanů souvisejících se sambou můžeme spustit:
$ sudo semanage boolean -l|grep samba samba_create_home_dirs (off , off) Allow samba to create home dirs samba_domain_controller (off , off) Allow samba to domain controller samba_enable_home_dirs (off , off) Allow samba to enable home dirs samba_export_all_ro (off , off) Allow samba to export all ro samba_export_all_rw (off , off) Allow samba to export all rw samba_load_libgfapi (off , off) Allow samba to load libgfapi samba_portmapper (off , off) Allow samba to portmapper samba_run_unconfined (off , off) Allow samba to run unconfined samba_share_fusefs (off , off) Allow samba to share fusefs samba_share_nfs (off , off) Allow samba to share nfs sanlock_use_samba (off , off) Allow sanlock to use samba tmpreaper_use_samba (off , off) Allow tmpreaper to use samba use_samba_home_dirs (off , off) Allow use to samba home dirs virt_use_samba (off , off) Allow virt to use samba
Ve výše uvedeném výstupu druhý sloupec označuje aktuální hodnotu booleanu, zatímco třetí výchozí hodnotu (oba jsou v tomto případě vypnuté). Boolean, který chceme aktivovat, abychom umožnili sdílení domovských adresářů, je samba_enable_home_dirs
. Operaci můžeme provést pomocí setsebool
příkaz:
$ sudo setsebool samba_enable_home_dirs=1
Závěry
V tomto tutoriálu jsme viděli, jak nainstalovat sambu na systém RHEL 8 / CentOS 8. Také jsme viděli, jak sdílet adresář, umožnit přístup hostům nebo jej omezit na ověřené uživatele. Také jsme viděli, jak nakonfigurovat bránu firewall, aby byla sdílená složka přístupná z jiných počítačů v síti.
Nakonec jsme viděli, jak provést potřebné změny, abychom měli funkční nastavení samby se SELinuxem v režimu „vynucování“. Pokud vás SELinux zajímá, můžete si také přečíst náš článek na toto téma.