LPS:Afsadm
Afsadm
Afsadm je prostředkem, který umožňuje vybraným uživatelům provádět privilegované operace nad souborovým systémem AFS. Celek je založen na architektuře klient/server, jako autentizační mechanismus je využit Kerberos5, veškerá přenášená data jsou zabezpečena. S drobnými problémy přeloženo/rozchozeno pro IRIX, DUX, Linux a Solaris.
Klient
V současné verzi je potřeba znát jméno serveru, který zprostředkuje provedení zadaného příkazu s privilegii administrátora AFS. Tímto prostředníkem je pandora.zcu.cz. Připravena je i verze, ve které si klient zjistí jména KRB serverů, s nimiž se pokusí o navázání spojení (z obav o snížení bezpečnosti KRB serverů doposud nenasazeno). Program podporuje interaktivní i řádkový režim (vhodný do scriptů).
afrodite> afsadm -c "backup volinfo sw" backup: waiting for job termination DumpID lvl parentID creation date clone date tape name 904891405 0 0 09/04/1998 08:43 09/04/1998 08:53 sw.full3.1 (904891405) 870259089 0 0 07/30/1997 12:38 07/30/1997 12:50 sw.full.1 (870259089) 855746075 0 0 02/12/1997 12:14 02/12/1997 12:14 sw.full2.1 (855746075)
Pokud výsledek snažení vypadá následovně
afrodite> afsadm -c "vos release common" You are not privileged to execute this command.
zkontrolujte nejprve svá oprávnění.
afrodite> klist Ticket cache: /tmp/krb5cc_xdm_0 Default principal: chlumsky@ZCU.CZ Valid starting Expires Service principal 31 Jan 01 09:47:37 31 Jan 01 19:47:36 krbtgt/ZCU.CZ@ZCU.CZ 31 Jan 01 09:47:37 31 Jan 01 19:47:36 afs@ZCU.CZ 31 Jan 01 10:08:25 31 Jan 01 19:47:36 afsadm/ody.zcu.cz@ZCU.CZ
Jako pricipal chlumsky pravděpodobně nemám oprávnění k provedení takové operace (obvykle používáme principal/root nebo principal/admin).
Pokud dosáhnete stejně žalostného výsledku i v případě, že vlastníte stoprocentně správná pověření, potom kontaktujte člověka, který je odpovědný za konfiguraci afsadm - s nejvyšší pravděpodobností nejste totiž ve skupině vyvolených jedinců.
afrodite> afsadm -c "vos release sw.proe -v" Command doesn't match any allowed regexp.
V tomto případě nenašel server ve své konfiguraci žádný regulární výraz, který by váš příkaz uspokojil. Důvodem je, že skupina do které patříte nemá privilegia k jeho provedení, takový příkaz v konfiguraci neexistuje nebo je reg. výraz napsán tak, že neakceptuje argumenty v pořadí, ve kterém jste je napsali. Obvykle nejprve pomůže help k danému příkazu. Pokud se i po "precizním" zápisu příkazu nepovede operaci provést, kontaktujte opět správce afsadm.
Jak bylo zmíněno, lze afsadm provozovat v interaktivním režimu. Program využívá knihovnu readline, která poskytuje plný komfort při editaci příkazové řádky (historie, mazání, pohyb na řádce).
afrodite> afsadm afsadm> help vos release vos remove vos examine pts examine pts membership pts adduser pts remove fs setacl fs setquota fs listquota backup volinfo backup volrestore renameafsuser quota shforward help [command] quit/exit afsadm> help fs setacl fs setacl [-dir] directory [-acl] afsadm> quit afrodite>
Pokud jsou s afsadm nějaké potíže (server se neozývá ap.), je možné vyzkoušet debug mode.
afrodite> afsadm -c "vos exa common" -d Trying ody ... Connected to server Received init msg: 4 bytes Successfuly authenticated Sent encrypted message: 169 bytes Receiving encrypted stdout/stderr: 1) Expected 225 bytes, received 225/69 bytes (encr/decr) common 536871833 RW 17975 K On-line 2) Expected 663 bytes, received 663/500 bytes (encr/decr) ori.zcu.cz /vicepc RWrite 536871833 ROnly 536871834 Backup 0 MaxQuota 20000 K Creation Fri Apr 5 10:51:04 1996 Last Update Wed Jan 31 02:52:14 2001 2487 accesses in the past day (i.e., vnode references) RWrite: 536871833 ROnly: 536871834 number of sites -> 9 server nic.zcu.cz partition /vicepa RO Site server oknos.zcu.cz partition /vicepb RO Site server ori.zcu.cz partition /vicepc RW Site server ori.zcu. 3) Expected 471 bytes, received 471/299 bytes (encr/decr) cz partition /vicepc RO Site server oneus.zcu.cz partition /vicepa RO Site server ariane.zcu.cz partition /vicepb RO Site server hp-2.zcu.cz partition /vicepa RO Site server fennel.zcu.cz partition /vicepa RO Site server dce.zcu.cz partition /vicepa RO Site
End of stdout/stderr [Total: 1359/868 bytes (encr/decr) in 2s]
Pro lepsi prehled jsme vyrobili jednoduchy wrapper afsadm.sh, ktery posle mail zadanym lidem (osklive a jednoduse).
Server
Služba afsadm je vázána na port 35353/tcp (viz /etc/services). Server je spouštěn daemonem inetd.
afsadm stream tcp nowait root /usr/sbin/tcpd /software/krb5/sbin/afsadmd -S /var/afsadm/afsadm.keytab -c /var/afsadm -d
Parametr -d dovoluje spuštění v debug modu, -S specifikuje uložení klíče (keytab), -c pak adresář s patřičnou konfigurací. Jak je patrné, tato služba využívá k autentizaci Kerberos5. Keytab by měl tedy obsahovat klíč pro afsadm/HOSTNAME@REALM.
pandora:/usr/local/afsadm# klist -k /usr/local/afsadm/pandora.keytab Keytab name: WRFILE:/usr/local/afsadm/pandora.keytab KVNO Principal ---- -------------------------------------------------------------------------- 3 afsadm/pandora.zcu.cz@ZCU.CZ 3 afsadm/pandora.zcu.cz@ZCU.CZ 3 afsadm/pandora.zcu.cz@ZCU.CZ
V případě potřeby lze využít i jiné jméno služby (než afsadm), to však vyžaduje na straně klienta i serveru použít parametr -s servicename a do keytabu umístit patřičný klíč (POZOR ! Netestováno !!!) Konfigurační soubor nese název afsadm.conf a je umístěn v určeném adresáři. Ten obsahuje podadresář bin, ve kterém jsou programy, jež může server spustit. Ve chvíli spuštění příkazu je proměnná PATH nastavena pouze do tohoto adresáře (potenciální problémy ve scriptech).
pandora:/usr/local/afsadm# ls -lR .: total 58 -rw------- 1 root other 12603 Aug 20 21:57 afsadm.conf -rw------- 1 root other 12603 Aug 24 15:32 afsadm.conf.20090811 drwxr-xr-x 2 root other 512 Aug 24 11:35 bin drwxr-xr-x 2 root other 1024 Aug 24 15:33 lib -rw------- 1 root other 219 Aug 10 20:14 pandora.keytab ./bin: total 7698 -rwxr-xr-x 1 root other 168128 Aug 24 15:26 afsadmd -rwxr-xr-x 1 root other 475276 Aug 21 15:21 aklog -rwxr-xr-x 1 root other 1198300 Jan 26 2005 fs -rwxr-xr-x 1 root other 170836 Aug 11 14:31 pagsh -rwxr-xr-x 1 root other 183100 Aug 10 14:10 tokens -rwxr-xr-x 1 root other 222248 Aug 11 00:18 unlog -rwxr-xr-x 1 root other 1426872 Aug 10 14:08 vos ./lib: total 16 -rwxr-xr-x 1 root other 7968 Aug 21 15:52 libkafs.so
Aby byl celý mechanismus funkční, musí být principal afsadm.HOSTNAME (v tomto případě tedy afsadm.pandora.zcu.cz) členem AFS skupiny system:administrators a privilegovaným uživatelem v souboru /usr/afs/etc/UserList na každém fileserveru (viz příkazy pts mem system:administrators, bos listusers servername).
Na DB serverech je treba take pridat ruco superuzivatele afsadm.HOSTNAME, protoze tam nebezi upclient.
bos adduser srv afsadm.HOSTNAME
Pro svou činnost využívá server knihovnu libkafs.so, která pochází z krb implementace Heimdal. Z té využívá 3 funkce pro práci s PAGem (k_hasafs, k_setpag, k_unlog) tak, aby byl privilegované pověření dostupné aktuálnímu běžícímu procesu a ne všem uživatelům se stejným UID. Pro překlad na Solaris 5.9 jsme knihovnu vysekali ze stávajících zdrojů Heimdalu a přidali ke zdrojovým kódům projektu. Pro právný běh, je při překladu potřebná správně nastavená definice AFS_SYSCALL, číslo syscallu je k nalezení v /etc/name_to_sysnum. Zřejmě by chtělo tuto část dále přepsat podobně jako to ma AIX (tj. automatické vyhledání ID syscallu) ... TODO
Veškeré aktivity jsou logovány standardním způsobem - syslog(). V roce 2009 na pandore je to ve /var/adm/daemon.
Aug 24 15:28:29 pandora afsadmd[5895]: [ID 927837 mail.info] connect from bodik.zcu.cz Aug 24 15:28:29 pandora afsadmd[5895]: [ID 479126 daemon.debug] Parsing configfile /usr/local/afsadm/afsadm.conf Aug 24 15:28:29 pandora afsadmd[5895]: [ID 273315 daemon.debug] Principal bodik/root@ZCU.CZ Aug 24 15:28:29 pandora afsadmd[5895]: [ID 522531 daemon.debug] Received 195 bytes Aug 24 15:28:29 pandora afsadmd[5896]: [ID 513530 daemon.info] Principal bodik/root@ZCU.CZ is trying to execute command vos rel project.kiosky -v Aug 24 15:28:29 pandora afsadmd[5896]: [ID 225413 daemon.info] Principal bodik/root@ZCU.CZ : system(/usr/local/afsadm/bin/vos rel project.kiosky -v) Aug 24 15:28:35 pandora afsadmd[5896]: [ID 705303 daemon.debug] Principal bodik/root@ZCU.CZ : system(/usr/local/afsadm/bin/vos rel project.kiosky -v) returns with 0 Aug 24 15:28:36 pandora afsadmd[5895]: [ID 186288 daemon.debug] Sent 1559 bytes in 7s [3 fragment(s)]
Konfigurace
Konfigurační soubor afsadm.conf je tvořen ze dvou částí. První obsahuje definici skupin, druhá pak přiřazení skupin a regulárních výrazů. Při vytváření skupin lze využít vnořování, vnořená skupina musí být ale nejprve definována, jinak je považována za jméno principala. Předdefinovanou skupinou je anyuser (libovolný autentizovaný uživatel).
# # Groups # # ( Predefined groups: anyuser ) # # define group GrpName { # Principal1 # Principal2 # ... # GrpName1 # GrpName2 # ... # } # define group administrators { chlumsky/root@ZCU.CZ kejzlar/root@ZCU.CZ sitera/root@ZCU.CZ } define group ISS { pulc/root@ZCU.CZ urbanec/root@ZCU.CZ indy/root@ZCU.CZ administrators }
Definice povolených příkazů a přiřazení ke skupinám může vypadat např. takto:
# # Commands # # define command CmdSuite { # GroupName1 "regexp1" # Groupname2 "regexp2" # ... # } { "Command name" "Usage" } # # # vos release # define command vos_release { # vos rel sw.nt40* admswNT "^vos[ ]+rel(ease)?[ ]+(-id )?[ ]*(sw\.)?nt40[.a-zA-Z0-9_-]*[ ]*([ ]+-f)?([ ]+-v(erbose)?)?$" # vos rel common* lpsadmin "^vos[ ]+rel(ease)?[ ]+(-id )?[ ]*common[.a-zA-Z0-9_]*[ ]*([ ]+-f)?([ ]+-v(erbose)?)?$" } { "vos release" "vos release [-id] volID [-f] [-v|-verbose]" }
# # pts examine # define command pts_examine { anyuser "^pts[ ]+e(xa(mine)?)?[ ]+(-na(meorid)? )?[ ]*[:.a-zA-Z0-9_-]+$" } { "pts examine" "pts examine [-nameorid] user or group" } # # backup volrestore # define command backup_volr { backuprestore "^backup[ ]+volr(estore)?[ ]+(-s(erver)? )?[ ]*[a-zA-Z0-9.-]+[ ] +(-pa(rtition)? )?[/a-z]+[ ]+(-v(olume)? )?[:.a-zA-Z0-9_-]+(( -e | -extension )? )[a-zA-Z0-9.-_:]+)?(( -d | -date )?[0-9/]+)?([ ]+-n)?$" } { "backup volrestore" "backup volrestore [-server] server [-partition] partiti on [-volume] volumename [-extension] new_volume_name_extension [-date] date_from _which_to_restore [-n]" }
Pokud je v konfiguračním souboru chyba, měl by server na toto místo upozornit. Klient v dané chvíli reaguje následovně:
afrodite> afsadm -c help Received init msg: 0 bytes
V logu pak nalezneme:
Jan 31 11:39:56 7X:ody afsadmd[124858]: connect from afrodite.zcu.cz Jan 31 11:39:56 7D:ody afsadmd: Parsing configfile /tmp/afsadm/afsadm.conf Jan 31 11:39:56 3D:ody afsadmd: Quoted "string" expected at line 118
V konfiguračním souboru na řádce 118 chybí uvozovky:
# # pts examine # define command pts_examine { anyuser "^pts[ ]+exa(mine)*[ ]+(-nameorid )*[ ]*[:.a-zA-Z0-9]+$" } { "pts examine" "pts examine [-nameorid] user or group }
Záloha konfigurací a zdrojový kód je dostupný na AFS v adresáři /afs/zcu.cz/project/software/afs/afsadm