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 -h pandora -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 -h pandora -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 -h ody -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 -h ody 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 -h ody -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]
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.
ody> klist -k /var/afsadm/afsadm.keytab Keytab name: FILE:/var/afsadm/afsadm.keytab KVNO Principal ---- ------------------------------------------------------------------------- 3 afsadm/ody.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).
ody> ls -lR /var/afsadm/ total 128 -rw------- 1 root sys 6636 Jan 29 14:38 afsadm.conf -rw------- 1 root sys 3011 Oct 3 12:18 afsadm.conf.03-10-2000 -rw------- 1 root sys 3841 Oct 6 07:47 afsadm.conf.06-10-2000 -rw------- 1 root sys 1667 Sep 7 13:55 afsadm.conf.07-09-00 -rw------- 1 root sys 2392 Sep 12 06:43 afsadm.conf.12-09-00 -rw------- 1 root sys 6073 Dec 19 14:58 afsadm.conf.19-12-2000 -rw------- 1 root sys 6294 Jan 26 07:13 afsadm.conf.26-01-2001 -rw------- 1 root sys 5621 Oct 31 06:41 afsadm.conf.31-10-2000 -rw------- 1 root sys 2364 Sep 8 15:44 afsadm.conf.new -rw------- 1 root sys 1663 Aug 9 16:05 afsadm.conf.problem -rw------- 1 root sys 1664 Aug 9 16:03 afsadm.conf.sav -rw------- 1 root sys 57 Jul 20 2000 afsadm.keytab drwx------ 2 root sys 113 Nov 16 12:28 bin
/var/afsadm/bin: total 24 lrwx------ 1 root sys 21 Oct 6 07:54 backup -> /usr/afsws/etc/backup lrwx------ 1 root sys 17 Sep 7 15:44 fs -> /usr/afsws/bin/fs lrwx------ 1 root sys 18 Jul 21 2000 pts -> /usr/afsws/bin/pts -rwx------ 1 root sys 1392 Sep 26 10:59 quota -rwx------ 1 root sys 3267 Dec 1 14:14 renameafsuser -rwx------ 1 root sys 470 Sep 26 10:59 shforward lrwx------ 1 root sys 18 Jul 20 2000 vos -> /usr/afsws/etc/vos
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).
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().
Jan 31 10:41:52 7X:ody afsadmd[608203]: connect from afrodite.zcu.cz Jan 31 10:41:52 7D:ody afsadmd: Parsing configfile /var/afsadm/afsadm.conf Jan 31 10:41:52 7D:ody afsadmd: Principal chlumsky/root@ZCU.CZ Jan 31 10:41:53 7D:ody afsadmd: Received 169 bytes Jan 31 10:41:53 7D:ody afsadmd: Principal chlumsky/root@ZCU.CZ is trying to execute command vos exa common Jan 31 10:41:53 7D:ody afsadmd: Principal chlumsky/root@ZCU.CZ : system(/var/afsadm/bin/vos exa common) Jan 31 10:41:55 7D:ody afsadmd: Sent 1359 bytes in 2s [3 fragment(s)] Jan 31 10:46:07 7X:ody afsadmd[608382]: connect from eryx1.zcu.cz Jan 31 10:46:07 7D:ody afsadmd: Parsing configfile /var/afsadm/afsadm.conf Jan 31 10:46:07 7D:ody afsadmd: Principal sustr/admin@ZCU.CZ Jan 31 10:46:08 7D:ody afsadmd: Received 177 bytes Jan 31 10:46:08 7D:ody afsadmd: Principal sustr/admin@ZCU.CZ is trying to execute command vos rel sw.nt40.is.avast Jan 31 10:46:08 7D:ody afsadmd: Principal sustr/admin@ZCU.CZ : system(/var/afsadm/bin/vos rel sw.nt40.is.avast) Jan 31 10:46:19 7D:ody afsadmd: Sent 201 bytes in 11s [1 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 -h ody -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