Vím, že je to opravdu stará otázka, ale dnes jsem to udělal ve skriptu. Za předpokladu, že být sudo znamená být schopen spustit jakýkoli příkaz jako sudo (nebo alespoň uptime)
CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1|grep "load"|wc -l) if [ ${CAN_I_RUN_SUDO} -gt 0 ] then echo "I can run the sudo command" else echo "I can't run the Sudo command" fi
Pokud má však váš uživatel omezení ve visudu, nebude tato kontrola dostatečná, např. pokud váš uživatel může použít pouze příkaz make. Zkuste spustit nějaký příkaz, o kterém víte, že bude fungovat. Můžete přidat filtr grep -v Sorry, např.:$(sudo -n uptime 2>&1|grep "load" | grep -v Sorry|wc -l), abyste se vyhnuli těmto falešným poplachům.
-n
možnost je k dispozici v novějších verzích sudo, ale jak jste uvedli, není to možnost. Neexistuje žádný skutečný způsob, jak udělat to, co hledáte, kromě toho, že byste zkusili sudo a zjistili, zda se vrátí s výzvou k zadání hesla. Pokud chcete vizuální indikaci, proč nespustit sudo /bin/bash a zahájit relaci root bash? Všimněte si, že to není bezpečné, ale také je to poněkud nejisté, pokud si někdo uvědomí vaše rychlé změny v sudu.
Pro zjednodušení odpovědi poskytnuté @wags007
if sudo -n true
then
sudo id
else
echo "sorry, but did not want to bother you"
fi
Pokud však v konfiguraci https://www.sudo.ws/man/1.8.15/sudoers.man.html máte defaults mail_badpass
bude odeslán e-mail pro každý test, jehož výsledkem je nepravda (by se zobrazila výzva). Abyste se vyhnuli takovému obtěžování, změňte část vašeho souboru sudoers na
Defaults mail_badpass
Defaults! /bin/true !mail_badpass
V důsledku toho jsou e-maily s výstrahou zabezpečení odesílány pro všechny příkazy kromě /bin/true. No ano, někdo by se teď mohl pokusit vynutit heslo zavoláním sudo true
neomezený počet opakování, aniž by se odeslal e-mail s upozorněním na zabezpečení.
Poznámka:Vždy používejte visudo
místo vašeho oblíbeného editoru upravte soubor sudoers. Pokud tak neučiníte, riskujete uzamčení.