Distributed filesystem AFS was chosen to be the primary system of sharing disk space in the METACentre project, mainly due to uniform structure of the directory tree as well as its authorisation and authentication capabilities.
This document consists of five section describing the user view on AFS in its setup in META centre. The sections are:
The structure of the /afs tree. AFS cell. AFS server. AFS volume.
Tickets and tokens. Long-term authentication. Pags. Cross-realm authentication.
Access control on AFS. ACL (access control lists) and their management. Access rights for backup of AFS volumes.
Creating user groups on AFS. Group membership. Group management by its owner.
AFS quotas. Changed semantics of standard UNIX commands.
The intended readers of this documents are beginner users of AFS. It is not ment as a replacement of section 1 man pages. Man pages exist for the most of AFS commands, the most of the commands also provides brief help with a "-help" or "-?" options.
AFS was developed as Andrew file system at Carnegie Mellon University. Further the development was carried on by the off-spring company Transarc Corporation which was finally bought by IBM. Currently, IBM sells the product as IBM AFS.
IBM also released a snapshot of the complete AFS source code, allowing foundation of an open-source project OpenAFS. Currently the infrastructure of METACentre is mostly based on OpenAFS.
Besides these implementations there exists a completely independent implementation of the AFS client ARLA. Some of the METACentre nodes use this implementation, mainly due to unavailability of OpenAFS on specific platforms.
However, behaviour of different AFS impolementation is indistinguishable from an ordinary user's view.
V rámci jedné buňky jsou určité adresářové podstromy (tj. např. domovský adresář konkrétního uživatele nebo kořenový adresář určitého programového produktu) uloženy v tzv. svazcích (volumes). Tyto svazky lze umísťovat na libovolném AFS serveru bez ohledu na jejich umístění v adresářovém podstromu AFS, a lze je v případě potřeby přesunovat mezi AFS servery (aniž by to ovlivnilo jeho umístění v adresářovém stromu). Klient (klientská pracovní stanice) zjistí aktuální místo uložení požadovaného svazku dotazem na Volume Location Server. K řádné činnosti systému AFS tedy není nutno, aby klienti byli o těchto přesunech informováni (na rozdíl od např. systému NFS, kde každá změna fyzického umístění vystavovaného adresáře musí být vhodným způsobem sdílena všem klientům, kteří tento adresář využívají).
Systém souborů AFS rovněž podporuje lokální diskovou (případně paměťovou) cache. Často používané soubory tak jsou permanentně uloženy na lokálním disku, a přístup k nim je většinou podstatně rychlejší než např. protokolem NFS. Dalším prvkem, který zvyšuje dostupnost dat (ale pouze dat vystavených pouze pro čtení), jsou replikační servery (replica servers). Soubory, do nichž není vyžadován zápis (například software), mohou být umístěny na více "replikačních" serverech, přičemž AFS klient vždy přistupuje k momentálně dostupnému serveru, pokud možno však k serveru nejbližšímu.
Protože adresářový strom /afs je na všech počítačích identický, a občas můžeme chtít rozlišovat adresáře v závislosti na architektuře počítače (binární spustitelné programy apod.), je v AFS možnost odkazovat se na platformu, na níž momentálně pracujeme, jménem @sys. V současné době jsou v METACentru podporovány platformy
Každý uživatel METACentra má svou domovskou buňku obvykle odpovídající instituci, které je zaměstnancem nebo studentem. V příkladech v tomto dokumentu budeme předpokládat domovskou buňku ics.muni.cz (pokud není explicitně uvedeno jinak).
Systém AFS je přístupný jako softwarový modul afs, spolu s ostatními základními balíky je také zahrnut pod virtuální modul metabase. Zpřístupnění AFS se tedy provede např. příkazem
(Při běžném přihlášení na počítače METACentra je již tento virtuální modul zpřístupněn.) K dispozici tak získáme příkazy kinit, kauth, afslog, regpag, klist, tokens, pts, fs, a další, které budou popsány v tomto dokumentu. Ke každému z těchto příkazů existuje ale i manuálová stránka, a všechny podporují volbu -help (případně -?) která vypíše stručnou syntaxi.module add metabase
Autentizace, tj. prokázání totožnosti uživatele, je v systému AFS postavena na systému Kerberos.
Při přihlášení na libovolný ze strojů METACentra je na základě nově vytvořeného nebo
přeneseného kerberovského lístku (viz dokumentace k systému Kerberos)
vytvořeno oprávnění k systému AFS, tzv. token.
(Na základě lístku jej lze získat i explicitně příkazem afslog.) The list of tokens can be printed out using command klist -T or tokens.
Token je, narozdíl od kerberovského lístku uloženého v obyčejném souboru, reprezentován položkou v tabulce udržované jádrem operačního systému, a přísluší (až na zde neuváděné vyjímky) skupině procesů, tzv. PAGu. PAGy jsou obdoba UNIXovských session ID v AFS. Daný token platí pouze pro konkrétní PAG, příslušnost k PAGu je děděna na potomky procesu. Procesu obyčeného uživatele (ne roota) není dovoleno přejít k jinému PAGu, může ale vytvořit nový PAG, a získat tak nezávislost na svém rodiči.
Příkaz pagsh spustí nový shell patřící do nového PAGu (také s přednastaveným novým unikátním jménem souboru s lístky). K takto vytvořenému PAGu nepřísluší prozatím žádný token (tj. PAG je vůči AFS zcela anonymní), ten je třeba získat příkazy kauth, resp. afslog.
Každá terminálová relace (při přihlášení via telnet, rlogin atd.) má svůj vlastní PAG. Standardní prostředí METACentra zajišťuje v těchto případech automatické vytvoření tokenu z kerberovských lístků.
Token zaniká automaticky se zánikem PAGu, tj. ukončením všech k PAGu příslušných procesů. Explicitně jej lze také zničit příkazem unlog, resp. je zničen i při explicitní destrukci kerberovských lístků příkazem kdestroy (není-li zadán s s volbou --no-unlog).
Prostředí METACentra také zajišťuje automatické vytvoření a údžbu lístků a tokenů pro procesy spuštěné dávkovými systémy LSF, NQE a PBS. Ze strany uživatele tedy nejsou nutné žádné speciální akce; je zaručeno, že procesy spuštěné dávkovým systémem budou mít po celou dobu běhu platný token pro přístup k AFS.
Pro pohodlnou práci s více dlouhotrvajícími terminálovými relacemi je určen příkaz regpag. Dovoluje zaregistrovat PAGy terminálových relací, a po obnovení kerberovských lístků (zpravidla následující pracovní den) automatické obnovení tokenů ve všech registrovaných PA(G)zích.
Jeho použítí je:
Při spuštění bez argumentů tento příkaz zaregistruje aktuální PAG. Volba "-l", případně "--list" vypíše zaregistrované PAGy, volba "-u" nebo "--unreg" odregistruje zaregistrovaný PAG, "-U" nebo "--unregall" odregistruje všechny zaregistrované PAGy, a volba "-r" nebo "--renew" obnoví tokeny pro všechny registrované PAGy. Volbou "-t ticketfile", resp. "--tkfile=ticketfile" lze specifikovat jméno souboru s lístky.regpag [-l] [-u] [-U] [-r] [-t tkfilename] [ gid gid ]
Příkazy popsané výše by měly stačit k zahájení běžné práce s AFS, pokud budeme na AFS nazírat jako na běžný souborový systém a nebudeme od něj chtít specifické vlastnosti. Těmito specifickými vlastnostmi máme na mysli především specifikaci přístupových práv (tzv. ACL, Access Control Lists), vytváření skupin uživatelů
Každá položka ACL se sestává ze sedmi práv (rlidwka), která mohou být specifikovanému uživateli nebo skupině přidělena (v případě, že položka specifikuje tzv. normální právo) nebo odňata (v případě tzv. negativního práva):
Pro přístup k souboru (čtení, zápis nebo spuštění) nestačí mít právo AFS, ale soubor musí mít nastaveno i příslušné UNIXovské právo pro vlastníka souboru (rwx). UNIXovská práva pro skupinu a ostatní jsou systémem AFS ignorována.
Pro manipulaci se souborovým systémem v AFS existuje příkaz fs, který má řadu podpříkazů. Jejich stručný seznam získáme příkazem
Výpis ACL provedeme podpříkazem listacl, který má zkratku la. Tak například příkazyfs help
jsou ekvivalentní a způsobí výpis ACL aktuálního adresáře. Předpokládejme, že výstup tohoto příkazu jefs listacl .
fs la .
Což znamená, že pro zmíněný adresář mají členové skupiny system:administrators a skupiny soft všechna práva a všichni ostatní uživatelé (tj. členové skupiny system:anyuser) mají práva rl (tj. číst soubory v adresáři a vypisovat obsah adresáře).Access list for /afs/ics.muni.cz/packages is
Normal rights:
system:administrators rlidwka
soft rlidwka
system:anyuser rl
Pro změnu ACL slouží podpříkaz setacl příkazu fs, který má zkratku sa. Jeho typická syntaxe je
případně je možné použít zkrácenou verzi v případě, že příkaz má pouze dva argumenty:fs setacl -dir directory -acl ACL... [-negative]
kde ACL je pár uživatel právo, případná volba -negative pak specifikuje, že položka je chápána jako negativní právo místo normálního (tj. právo je specifikovanému uživateli odňato). Například, chceme-li uživateli petr přidělit právo číst a zapisovat do souborů do adresáře zdrojaky a vytvářet v něm soubory nové, učiníme tak příkazemfs setacl directory ACL
Přípona @meta ve jménu uživatele je důsledkem použití společného realmu META (viz dokumentace k systému Kerberos) pro autentizaci do všech (jinak vzájemně oddělených) AFS buněk. Při specifikaci a výpisu ACL je nutno ji uvádět u všech uživatelů METACentra.fs setacl -dir zdrojaky -acl petr@meta rliw
Pro často používané kombinace práv existují symbolické zkratky, které můžeme použít místo položky právo v ACL. Tyto zkratky jsou uvedené v následujícím seznamu:
(Jde vlastně o vyřazení skupiny system:anyuser z ACL. Podrobněji se o těchto skupinách zmíníme v kapitole Ostatní běžné příkazy AFS.) Pokud naopak chceme uživateli pavel umožnit neomezený přístup do aktuálního adresáře, použijeme příkazfs sa -dir . -acl system:anyuser none
fs sa -dir . -acl pavel@meta all
Pro praktické použití může být velmi užitečná (i když nikoli nezbytná) volba -clear příkazu fs setacl. Tato volba způsobí nejprve úplné smazání všech položek ACL, a pak do nich zapíše pouze práva vyjmenovaná v rámci právě prováděného příkazu fs setacl.
Závěrem je nutno zdůraznit, že pro zálohování AFS filesystému je nezbytné, aby všechny adresáře měly alespoň právo
Pokud toto není splněno, adresář nemůže být zálohován, neboť zálohovací program z důvodů bezpečnosti běží s tokenem skupiny roots. a nikoli system:administrators.roots rl
Manipulace se skupinami zajišťuje řada podpříkazů programu pts. Skupinu vytvoříme příkazem pts creategroup, uživatele do skupiny přidáváme příkazem pts adduser a vyjímáme příkazem pts removeuser. Jméno skupiny má formát vlastník:jméno.skupiny. Vytvoření skupiny si ukážeme na příkladu:
grond$ id
cerno (uid=343, gid=50)
grond$ pts creategroup cerno:vyuka.chemie
group cerno:vyuka.chemie has id -210
grond$ pts adduser zak1@meta cerno:vyuka.chemie
grond$ pts adduser zak2@meta cerno:vyuka.chemie
grond$ pts adduser fyzik@meta cerno:vyuka.chemie
grond$ pts removeuser fyzik@meta cerno:vyuka.chemie
grond$ pts examine cerno:vyuka.chemie
Name: cerno:vyuka.chemie, id: -210, owner: cerno, creator: cerno
membership: 2, flags: S-M--, group quota: 0.
grond$ pts members cerno:vyuka.chemie
Members of cerno:vyuka.chemie (id: -210) are
zak1@meta
zak2@meta
grond$
Příkaz pts members vypíše členy skupiny, jestliže jeho argumentem je jméno skupiny; jestliže jeho argumentem je uživatelské jméno, vypíše skupiny, jichž je zmíněný uživatel členem. Příkaz pts examine vypíše informace o skupině. Ve výstupu příkazu pts examine si blíže povšimněme položky flags: která specifikuje různá práva uživatelů vůči skupině. Flags je pětiznakový řetězec, sestávající se ze znaků SOMAR, kde na místě každého znaku může být buď malé nebo velké písmeno nebo pomlčka. Malé písmeno znamená přidělení práva členům skupiny, velké pismeno přidělení práva všem uživatelům a pomlčka odepření práva všem kromě vlastníka a administrátorů. Tato práva jsou:
Vlastník skupiny (případně administrátor AFS) může skupinu zrušit příkazem pts delete.
Zda je příslušný AFS server v provozu, nebo zda je odstaven ("down"), zjistíme pomocí příkazufs whereis directory
fs checkservers
Všem uživatelům AFS je přidělena AFS quota, která nahrazuje klasické BSD quotas dostupné na většině UNIXovských filesystémů. Zjistit kvótu libovolného AFS svazku lze některým z příkazů
Ekvivalentní příkazy listquota a lq vypisují procentuální zatížení svazku a partition v tabelární formě. Příkaz quota vypisuje pouze procentuální zatížení svazku (podíl limitu a skutečného obsazení svazku). Jednotkou je vždy 1 kB.fs listquota [dir]
fs lq [dir]
fs quota [dir]
Dalším rozdílem je implementace systémového volání write(2), které nezajistí zápis dat na médium na AFS serveru, ale pouze do vyrovnávací paměti (AFS cache) na lokálním stroji. Pro vyvolání tohoto zápisu musí zapisující proces provést volání close(2) nebo fsync(2).
Na AFS filesystému není podporováno zamykání souborů s výjimkou volání flock(2).
Komponenta cesty (jména souboru) v AFS ve tvaru @sys je systémem souborů AFS expandována na jméno platformy (např. na počítači SGI PowerChallenge pod operačním systémem IRIX 6.5 je tento řetězec expandován na řetězec sgi_65.
Setuid bit mohou v AFS filesystému nastavovat pouze členové skupiny system:administrators.