Una versione avanzata di Run As

Gli utenti di Linux sanno bene che non si dovrebbe mai utilizzare l’utenza amministrativa (root) per uso quotidiano. L’uso dovrebbe essere limitato alla manutenzione ordinaria (aggiornamenti) e straordinaria (installazione di programmi e nuovi componenti hardwere) del computer.

Questa regola è ancor più valida per gli utenti Windows dove, a parer mio, l’abuso dell’utenza amministrativa è più marcata.

In Linux, per accedere all’utenza di root dopo aver fatto il logon è possibile usare il comando "su" mentre in Windows si può utilizzare il comando "runas". Nonostante i due comandi siano essenzialmente simili, il loro utilizzo nella pratica non è il medesimo.

Mi sono reso conto negli anni che in Windows non è sempre agevole sostituirsi all’Amministratore per eseguire singoli comandi.

Per eseguire un comando come altro utente è sufficiente cliccare sull’icona con il tasto destro. Se tutto è eseguito correttamente nell’elenco comparirà l’opzione "Esegui come…" oppure "Run as…". Nelle versioni precedenti del sistema operativo potrebbe essere necessario premere contemporaneamente il tasto [SHITF].

Quando però è necessario eseguire diversi comandi le cose si complicano.

Su Windows 2000 è possibile eseguire una shell visuale "Esplora Risorse" come altro utente mentre in Windows XP no. Nella migliore delle ipotesi, l’utente resta invariato e nelle peggiori si rischia di dover reinstallare il sistema operativo.

A questo punto ho pensato ad un piccolo vbscript che possa risolvere il problema agevolmente.

Supponiamo di voler installare una stampante oppure editare un file di testo presente in c:\windows\system32.

Cliccando con il tasto destro sull’icona non compare l’opzione "Esegui come…" perché non si tratta di un programma.

L’idea è quella di creare una voce nel menu contestuale con la quale eseguire gli applicativi in base all’estensione dei file.

Per prima cosa è necessario creare un file vbs in windows. Nel nostro esempio il file sarà creato con il nome c:\windows\morzello_runas.vbs

option explicit

dim WshShell
dim strLogin
dim strParams
dim objArgs
dim I
Const TITLE="Morzello RunAs 1.1"
Set objArgs = WScript.Arguments

For I = 0 to objArgs.Count – 1
strparams= strParams & " " & objArgs(I)
Next

‘eliminiamo il primo carattere perchè non fa parte del parametro.
If Len(strParams)>1 Then strparams=Right(strparams,Len(strparams)-1)

strLogin=InputBox ("Inserire il ‘Login’ dell’utente con cui si vuole eseguire il comando:",TITLE, "Administrator")

If strLogin="" Then wscript.quit (1)

Set WshShell = WScript.CreateObject( "WScript.Shell" )
wscript.echo "%comspec% /C runas /env /utente:" & strLogin & " ""start " & strParams & """"
WshShell.Run "%comspec% /C runas /env /utente:" & strLogin & " ""start " & strParams & """" ,1,false

Lo script si limita a chiedere login e password dell’utente desiderato, quindi carica il file cone le credenziali desiderate.

Per rendere utile questo script è possibile inserire una opzione aggiuntiva alla shell simile a quella già presente. Questa opzione la chiameremo per comodità "Morzello Run As".

Di seguito riporto il contenuto del file "morzello_runas.reg" da aggiungere al file di registro:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]

[HKEY_CLASSES_ROOT\*\shell\Morzello Run As]

[HKEY_CLASSES_ROOT\*\shell\Morzello Run As\command]
@="cscript c:\\windows\\morzello_runas.vbs %1"

Per aggiungere il comando al registro di sistema è sufficiente fare doppio click sul file con credenziali amministrative.

A questo punto è possibile ad esempio cliccare con il tasto destro su un file txt ed eseguirlo come altro utente. Utile ad esempio per editare il file di host.

I sorgenti di questo articolo sono disponibili qui

Alla prossima.