Portál AbcLinuxu, 9. května 2025 00:30
Řešení dotazu:
Asi by šlo opatchovat shell, ale nějak si nedokážu představit, jak byste takový seznam "nebezpečných" příkazů vlastně chtěl sestavovat. Problém by se měl řešit tam, kde vzniká: ve vaší hlavě. Jinak totiž docílíte jen toho, že budete dělat totéž co dosud, jenom při tom navíc budete obcházet svůj blacklist.
Mimochodem, nezvykejte si psát přepínače až po argumentech. Je to dost ošklivý GNU-ismus a pokud si na to navyknete, budete mít problémy, až si sednete k nějakému systému s korektně se chovající implementací getopt()
.
--x
. Ale zrovna bez chmod
se to bude blbě vracet, až ten příkaz budete chtít opravdu použít. Navíc pak budete naštvaný, že jste ten příkaz musel složitě zprovozňovat, a tomu, co děláte, budete věnovat ještě menší pozornost.
Dotaz by se dal řešit pomocí nějakého wrapperu, který byste spouštěl místo původního programu přes alias shellu. Některé programy už mají takovou možnost dotazu v sobě, a některé distribuce takové aliasy standardně nastavují, takže pak máte třeba alias rm=rm -i
. Ale tím si jen přidáte další zbytečný dotaz, jak ve Windows, a když bezmyšlenkovitě příkaz odeentrujete, stejně bezmyšlenkovitě pak odpovíte na „Are you sure?“… Podle mne jediné řešení je změnit své chování a pod rootem nepracovat zbrkle.
Dotaz by se dal řešit pomocí nějakého wrapperu, který byste spouštěl místo původního programu přes alias shellu.
Jak takový wrapper pozná, že byl příkaz zapsán jako 'chmod ... *
', když od shellu nedostane hvězdičku, ale expandovaný seznam jmen? Asi jsem tu první odpověď měl rozepsat podrobněji, aby další zbytečně neopakovali slepé uličky, které jsem už vyloučil.
alias rm'=rm -i' alias chmod='echo are you sure ?; read && chmod'Pripadne neco tvrdsiho jako grsec.. NN
Prepac, ale ja som ten, kto ten problem ma, takze viem najlepsie, kto podstatu mojho problemu pochopil a spravne to zodpovedal.
V tom případě máte dotaz formulovat tak, aby se to z něj dalo pochopit. V dotazu jednoznačně píšete, že vám nejde o příkaz (např.) chmod
jako takový, ale jen o případy, kdy je tento příkaz spuštěn s "nebezpečnými" parametry. Navíc jako konkrétní příklad takových parametrů uvedete wildcards, které ve skutečnosti expanduje shell a k příkazu se vůbec nedostanou. Z toho jednoznačně vyplývá, že problém, jak jste ho popsal, nemůže řešit nejen žádný systém typu SELinux/AppArmor, ale ani žádný wrapper místo příkazu, protože ten wrapper se nemůže rozhodovat na základě informace, která se k němu vůbec nedostane. Takže pokud teď skáčete radostí nad "řešením" založeným na wrapperu, znamená to, že buď jste do dotazu popsal úplně jiný problém, než který jste chtěl řešit, nebo jste si dodatečně zadání změnil na základě odpovědí, které se vám líbily svou jednoduchostí.
Navíc vůbec není pravda, že tazatel automaticky chápe podstatu problému nejlépe. Naopak, velmi často by se, pokud by tomu tak bylo, vůbec nepotřeboval ptát. Tato diskuze je toho názorným příkladem.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.