O tomhle jsem svého času dost dumal - měl jsem konkrétní zadání a snažil jsem se ho splnit v konfiguraci Samby. Zkusím shrnout pár poznatků.
Samba (CIFS) navenek podporuje windowsí systém práv, a snaží se ho vespod napasovat na Linux/UNIX/POSIX "práva souborů" (rwx) a POSIX ACL. Mapuje práva z Windowsího světa na Linuxový svět a snaží se, jak umí. Pro mne osobně systém práv pod Windows je dost zvěrstvo na pochopení sám o sobě - a pokud pochopíte pokročilé taje na straně Windows, a následně se k témuž pokusíte přimět Sambu, aby to pro Vás zařídila nad linuxovým filesystémem, možná se dost podivíte a není vyloučeno, že nad složitějším požadavkem hodíte flintu do žita :-)
Nicméně, Vaše zadání není nijak složité, a zřejmě se to dá zařídit několika způsoby (něco mi říká, že dvěma až třemi).
(Odstředivá poznámka: zdá se, že pokud mountujete CIFS z Linuxu, mohla by Samba propouštět POSIX ACL nastojato.)
Začal bych třeba globální opšnou
security = user - pakliže nejste už o kus dál :-)
Jak už zmiňovali předřečníci, "kdo kam smí" lze řešit neohrabaně holýma rukama na podkladovém linuxovém filesystému na serveru, a ono to nějak funguje (záleží, jak jste šikovný) ale jednak potom musíte nastavovat práva jinudy (SSH), než přistupujete k souborům (CIFS), druhak můžete třeba narazit na skutečnost, že pokud nastavujete práva jednotlivým souborům, tak po server-side přesunu souboru z jednoho "home adresáře" do jiného zůstanou práva původní (soubor si je ponechá) = práva k souboru se nezmění přestěhováním do cizího "home adresáře".
Tento aspekt nebyl požadován ve Vašem zadání, zmiňuji ho k tématu na okraj jako možné úskalí, pokud by někdo toto řešil (třeba já jsem to v zadání měl - šlo o přesuny z pracovního adresáře do "dlouhodobého finálního archivu".)
Souhlasím s jjrsk, že pokud to má fungovat z Windows, je vhodné, nastavit práva přednostně z prostředí Windows skrz CIFS. V tom případě je šance, že si Samba ty práva namapuje tak, aby jí fungovaly (což se občas taky úplně nepovede, historicky v některých verzích Samby. Stalo se mi to, zkoušel jsem to debugovat, hodil jsem flintu do žita.)
Pokud tedy Vaše zadání uchopím nastojato jako dva-tři samostatné shary, rád bych zmínil ještě jednu možnost, jak nastavit práva "per share": vyprdnout se na práva na adresáře a soubory (se všemi divokostmi mapování ACL Windows->POSIX) a zařídit to ultra-hnusně-postaru v konfiguraci sharů v smb.conf :-)
Sám jste nakousl
valid users (mimochodem lze také specifikovat
invalid users) - tady bych rád upozornil na jednu nuanci: zavináč před jménem znamená ve skutečnosti odkaz na skupinu (z /etc/group, nebo z remote autentikace). Chcete-li specifikovat jednoho konkrétního uživatele, uveďte prostě jeho jméno bez zavináče. Ono Vám to se zavináčem funguje taky, nejspíš na té bázi, že dnešní linuxová distra by default vytvářejí pro uživatele také jeho vlastní skupinu v /etc/group se shodným jménem.
No a mezi uživateli uvedenými ve
valid users můžete dále diferencovat pomocí opšen
write list a
read list . Takže je možné páchat třeba toto (neodpovídá Vašemu zadání):
#======================= Share Definitions =======================
[data-eva]
path = /samba/data-eva
read only = no
guest ok = no
write list = eva honza
read list = jana
valid users = jana eva honza
[data-jana]
path = /samba/data-jana
read only = no
guest ok = no
write list = jana honza
read list = eva
valid users = jana eva honza
Tzn. takto jde nastavit práva pro celý share. Následně může být šumák, pokud šoupete se soubory přímo na serveru, Sambě pod zadkem. Ano je to hnusně hrubé, ale jsou situace, kdy přesně toto chcete :-)
Jinak to Vaše zadání mi spíš velice připomíná
standardní home adresáře, kde má každý user svůj píseček, kam mu nikdo jiný z běžných smrtelníků nemá co koukat. Jestli správně koukám, Samba tohle umí dokonce dvěma způsoby: "šablonový share" v smb.conf se jmenuje
[homes] nebo
[users] . Pro Windows je údajně vhodnější druhý způsob.
Netuším, jak s tímto zkombinovat explicitní
valid users ,
read list a
write list - možná to vůbec nejde.
Chcete-li dát konkrétnímu uživateli "superuserská práva", možná bych vyrobil samostatný share na nadřazený adresář, a tamtudy bych superusera pustil dál. Nebo skrz server-side posix ACL, kde bych mu dal osobní výjimku na ten nadřazený adresář (a povolit dědění, ale to už se dostáváme na tenký led, zda se to dědění zdědí při vytváření podadresářů z Windows skrz CIFS apod.) Osobně, vzhledem k tomu že užovkám do dat nelezu, a pravomoci delegovat nepotřebuji, pro vyjímečné situace mi stačí server-side přístup (ssh, mc atd.)