Che cosa fa esattamente “Esegui come amministratore”?

Su Windows 7, ho un programma da riga di comando che fallisce a causa di errori di permessi di scrittura del file, e spuntando fastidiose windows di dialogo UAC ogni volta che eseguo programmi da riga di comando che provengono da un ‘editore sconosciuto’.

Tuttavia, se avvio la console facendo clic con il pulsante destro del mouse e scegliendo “Esegui come amministratore”, l’installazione funziona correttamente, anche se le windows di dialogo UAC sono ancora presenti.

Il mio utente è già membro del gruppo “amministratori“, quindi cosa fa esattamente “esegui come amministratore” che fa funzionare la mia installazione?

La mia domanda specifica è precisamente: cosa fa ‘eseguire come amministratore’? Finora nessuna delle risposte è stata presa in considerazione. (ad esempio, esegue il nuovo processo come utente “Amministratore”? Oppure esegue il processo come utente corrente, ma con privilegi elevati? Se sì, quali privilegi? In che modo ciò differisce dai privilegi che ottengo dal mio utente nel gruppo “Amministratori”?

(In particolare, sto usando la ‘Console’ di SourceForge , non una normale finestra CMD, ma non penso che sia importante.Questo è tutto durante l’installazione del pacchetto ‘distribute’ di Python eseguendo ‘python distribute_setup.py’ su un Python3 MSI appena installato da python.org È un Python a 32 bit su Windows a 64 bit Vedere Installazione di Python e distribuire su Windows 7 con “Scrittura fallita … authorization negata” )

Quando si accede a Windows, viene creato un token di accesso. Questo identifica te, i gruppi di cui sei membro e i tuoi privilegi. E si noti che se un utente è un amministratore o meno viene determinato dal fatto che l’utente sia un membro del gruppo Administrators.

Senza UAC, quando si esegue un programma ottiene una copia del token di accesso e questo controlla a cosa può accedere il programma.

Con UAC, quando si esegue un programma ottiene un token di accesso limitato. Questo è il token di accesso originale con “Amministratori” rimosso dall’elenco di gruppi (e alcune altre modifiche). Anche se l’utente è membro del gruppo Administrators, il programma non può utilizzare i privilegi di amministratore.

Quando si seleziona “Esegui come amministratore” e l’utente è un amministratore, il programma viene avviato con il token di accesso illimitato originale. Se l’utente non è un amministratore, viene richiesto un account amministratore e il programma viene eseguito con tale account.

Quindi … più scavando, con il risultato. Sembra che nonostante abbia eseguito un processo normale e uno come “Amministratore”, ho distriggersto il controllo dell’account utente. Trasformare il controllo dell’account utente in media mi ha permesso di vedere risultati diversi. Fondamentalmente, tutto si riduce a livelli di integrità, che sono 5.

I browser, ad esempio, funzionano a basso livello (1), mentre i servizi (utente di sistema) vengono eseguiti a livello di sistema (4). Tutto è spiegato molto bene in Windows Integrity Mechanism Design . Quando UAC è abilitato, i processi vengono creati con livello medio (SID S-1-16-8192 AKA 0x2000 viene aggiunto) mentre “Esegui come amministratore”, il processo viene creato con Alto livello (SID S-1-16-12288 alias 0x3000).

Pertanto, l’ACCESS_TOKEN corretto per un utente normale (livello di integrità medio) è:

 0:000:x86> !token Thread is not impersonating. Using process token... TS Session ID: 0x1 User: S-1-5-21-1542574918-171588570-488469355-1000 Groups: 00 S-1-5-21-1542574918-171588570-488469355-513 Attributes - Mandatory Default Enabled 01 S-1-1-0 Attributes - Mandatory Default Enabled 02 S-1-5-32-544 Attributes - DenyOnly 03 S-1-5-32-545 Attributes - Mandatory Default Enabled 04 S-1-5-4 Attributes - Mandatory Default Enabled 05 S-1-2-1 Attributes - Mandatory Default Enabled 06 S-1-5-11 Attributes - Mandatory Default Enabled 07 S-1-5-15 Attributes - Mandatory Default Enabled 08 S-1-5-5-0-1908477 Attributes - Mandatory Default Enabled LogonId 09 S-1-2-0 Attributes - Mandatory Default Enabled 10 S-1-5-64-10 Attributes - Mandatory Default Enabled 11 S-1-16-8192 Attributes - GroupIntegrity GroupIntegrityEnabled Primary Group: LocadDumpSid failed to dump Sid at addr 000000000266b458, 0xC0000078; try own SID dump. s-1-0x515000000 Privs: 00 0x000000013 SeShutdownPrivilege Attributes - 01 0x000000017 SeChangeNotifyPrivilege Attributes - Enabled Default 02 0x000000019 SeUndockPrivilege Attributes - 03 0x000000021 SeIncreaseWorkingSetPrivilege Attributes - 04 0x000000022 SeTimeZonePrivilege Attributes - Auth ID: 0:1d1f65 Impersonation Level: Anonymous TokenType: Primary Is restricted token: no. 

Ora, le differenze sono le seguenti:

 S-1-5-32-544 Attributes - Mandatory Default Enabled Owner 

per “Come amministratore”, mentre

 S-1-5-32-544 Attributes - DenyOnly 

per non amministratore.

Notare che S-1-5-32-544 è BUILTIN \ Administrators. Inoltre, ci sono meno privilegi e la cosa più importante da notare:

admin:

 S-1-16-12288 Attributes - GroupIntegrity GroupIntegrityEnabled 

mentre per i non amministratori:

 S-1-16-8192 Attributes - GroupIntegrity GroupIntegrityEnabled 

Spero che aiuti.

Ulteriori letture: http://www.blackfishsoftware.com/blog/don/creating_processes_sessions_integrity_levels

Cose come “eleva i privilegi”, “token di accesso limitato”, “privilegio di amministratore” … che diamine è comunque un privilegio di amministratore? sono sciocchezze.

Ecco un ACCESS_TOKEN per un processo normalmente eseguito da un utente appartenente al gruppo Administrators.

 0: kd> !process 0 1 test.exe PROCESS 87065030 SessionId: 1 Cid: 0d60 Peb: 7ffdf000 ParentCid: 0618 DirBase: 2f22e1e0 ObjectTable: a0c8a088 HandleCount: 6. Image: test.exe VadRoot 8720ef50 Vads 18 Clone 0 Private 83. Modified 0. Locked 0. DeviceMap 8936e560 Token 935c98e0 0: kd> !token -n 935c98e0 _TOKEN 935c98e0 TS Session ID: 0x1 User: S-1-5-21-2452432034-249115698-1235866470-1000 (no name mapped) User Groups: 00 S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped) Attributes - Mandatory Default Enabled 01 S-1-1-0 (Well Known Group: localhost\Everyone) Attributes - Mandatory Default Enabled 02 S-1-5-32-544 (Alias: BUILTIN\Administrators) Attributes - Mandatory Default Enabled Owner 03 S-1-5-32-545 (Alias: BUILTIN\Users) Attributes - Mandatory Default Enabled 04 S-1-5-4 (Well Known Group: NT AUTHORITY\INTERACTIVE) Attributes - Mandatory Default Enabled 05 S-1-2-1 (Well Known Group: localhost\CONSOLE LOGON) Attributes - Mandatory Default Enabled 06 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users) Attributes - Mandatory Default Enabled 07 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization) Attributes - Mandatory Default Enabled 08 S-1-5-5-0-85516 (no name mapped) Attributes - Mandatory Default Enabled LogonId 09 S-1-2-0 (Well Known Group: localhost\LOCAL) Attributes - Mandatory Default Enabled 10 S-1-5-64-10 (Well Known Group: NT AUTHORITY\NTLM Authentication) Attributes - Mandatory Default Enabled 11 S-1-16-12288 (Label: Mandatory Label\High Mandatory Level) Attributes - GroupIntegrity GroupIntegrityEnabled Primary Group: S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped) Privs: 05 0x000000005 SeIncreaseQuotaPrivilege Attributes - 08 0x000000008 SeSecurityPrivilege Attributes - 09 0x000000009 SeTakeOwnershipPrivilege Attributes - 10 0x00000000a SeLoadDriverPrivilege Attributes - 11 0x00000000b SeSystemProfilePrivilege Attributes - 12 0x00000000c SeSystemtimePrivilege Attributes - 13 0x00000000d SeProfileSingleProcessPrivilege Attributes - 14 0x00000000e SeIncreaseBasePriorityPrivilege Attributes - 15 0x00000000f SeCreatePagefilePrivilege Attributes - 17 0x000000011 SeBackupPrivilege Attributes - 18 0x000000012 SeRestorePrivilege Attributes - 19 0x000000013 SeShutdownPrivilege Attributes - 20 0x000000014 SeDebugPrivilege Attributes - 22 0x000000016 SeSystemEnvironmentPrivilege Attributes - 23 0x000000017 SeChangeNotifyPrivilege Attributes - Enabled Default 24 0x000000018 SeRemoteShutdownPrivilege Attributes - 25 0x000000019 SeUndockPrivilege Attributes - 28 0x00000001c SeManageVolumePrivilege Attributes - 29 0x00000001d SeImpersonatePrivilege Attributes - Enabled Default 30 0x00000001e SeCreateGlobalPrivilege Attributes - Enabled Default 33 0x000000021 SeIncreaseWorkingSetPrivilege Attributes - 34 0x000000022 SeTimeZonePrivilege Attributes - 35 0x000000023 SeCreateSymbolicLinkPrivilege Attributes - Authentication ID: (0,14e4c) Impersonation Level: Anonymous TokenType: Primary Source: User32 TokenFlags: 0x2000 ( Token in use ) Token ID: d166b ParentToken ID: 0 Modified ID: (0, d052f) RestrictedSidCount: 0 RestrictedSids: 00000000 OriginatingLogonSession: 3e7 

… ed ecco un ACCESS_TOKEN per un processo normalmente eseguito dallo stesso utente con “Esegui come amministratore”.

 TS Session ID: 0x1 User: S-1-5-21-2452432034-249115698-1235866470-1000 (no name mapped) User Groups: 00 S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped) Attributes - Mandatory Default Enabled 01 S-1-1-0 (Well Known Group: localhost\Everyone) Attributes - Mandatory Default Enabled 02 S-1-5-32-544 (Alias: BUILTIN\Administrators) Attributes - Mandatory Default Enabled Owner 03 S-1-5-32-545 (Alias: BUILTIN\Users) Attributes - Mandatory Default Enabled 04 S-1-5-4 (Well Known Group: NT AUTHORITY\INTERACTIVE) Attributes - Mandatory Default Enabled 05 S-1-2-1 (Well Known Group: localhost\CONSOLE LOGON) Attributes - Mandatory Default Enabled 06 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users) Attributes - Mandatory Default Enabled 07 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization) Attributes - Mandatory Default Enabled 08 S-1-5-5-0-85516 (no name mapped) Attributes - Mandatory Default Enabled LogonId 09 S-1-2-0 (Well Known Group: localhost\LOCAL) Attributes - Mandatory Default Enabled 10 S-1-5-64-10 (Well Known Group: NT AUTHORITY\NTLM Authentication) Attributes - Mandatory Default Enabled 11 S-1-16-12288 (Label: Mandatory Label\High Mandatory Level) Attributes - GroupIntegrity GroupIntegrityEnabled Primary Group: S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped) Privs: 05 0x000000005 SeIncreaseQuotaPrivilege Attributes - 08 0x000000008 SeSecurityPrivilege Attributes - 09 0x000000009 SeTakeOwnershipPrivilege Attributes - 10 0x00000000a SeLoadDriverPrivilege Attributes - 11 0x00000000b SeSystemProfilePrivilege Attributes - 12 0x00000000c SeSystemtimePrivilege Attributes - 13 0x00000000d SeProfileSingleProcessPrivilege Attributes - 14 0x00000000e SeIncreaseBasePriorityPrivilege Attributes - 15 0x00000000f SeCreatePagefilePrivilege Attributes - 17 0x000000011 SeBackupPrivilege Attributes - 18 0x000000012 SeRestorePrivilege Attributes - 19 0x000000013 SeShutdownPrivilege Attributes - 20 0x000000014 SeDebugPrivilege Attributes - 22 0x000000016 SeSystemEnvironmentPrivilege Attributes - 23 0x000000017 SeChangeNotifyPrivilege Attributes - Enabled Default 24 0x000000018 SeRemoteShutdownPrivilege Attributes - 25 0x000000019 SeUndockPrivilege Attributes - 28 0x00000001c SeManageVolumePrivilege Attributes - 29 0x00000001d SeImpersonatePrivilege Attributes - Enabled Default 30 0x00000001e SeCreateGlobalPrivilege Attributes - Enabled Default 33 0x000000021 SeIncreaseWorkingSetPrivilege Attributes - 34 0x000000022 SeTimeZonePrivilege Attributes - 35 0x000000023 SeCreateSymbolicLinkPrivilege Attributes - Authentication ID: (0,14e4c) Impersonation Level: Anonymous TokenType: Primary Source: User32 TokenFlags: 0x2000 ( Token in use ) Token ID: ce282 ParentToken ID: 0 Modified ID: (0, cddbd) RestrictedSidCount: 0 RestrictedSids: 00000000 OriginatingLogonSession: 3e7 

Come vedi, l’unica differenza è l’ID del token:

 Token ID: d166b ParentToken ID: 0 Modified ID: (0, d052f) 

vs

 Token ID: ce282 ParentToken ID: 0 Modified ID: (0, cddbd) 

Scusate, non posso aggiungere ancora molta luce in questo, ma sto ancora scavando.

AGGIORNARE

“Esegui come amministratore” è solo un comando, che consente al programma di continuare alcune operazioni che richiedono i privilegi di amministratore, senza visualizzare gli avvisi UAC.

Anche se il tuo utente è membro del gruppo degli amministratori, alcune applicazioni come la tua necessitano dei privilegi di amministratore per continuare a funzionare, perché l’applicazione è considerata non sicura, se sta facendo qualche operazione speciale, come la modifica di un file di sistema o qualcos’altro. Questo è il motivo per cui Windows ha bisogno del privilegio di amministratore per eseguire l’applicazione e avvisa con un avviso UAC. Non tutte le applicazioni necessitano di un account Amnistrator per essere eseguite, e alcune applicazioni, come la tua, necessitano dei privilegi di amministratore.

Se si esegue l’applicazione con il comando ‘Esegui come amministratore’, si notifica al sistema che la propria applicazione è sicura e sta facendo qualcosa che richiede i privilegi di amministratore, con la propria conferma.

Se vuoi evitare questo, basta disabilitare l’UAC sul Pannello di controllo.

Se vuoi andare oltre, leggi la domanda Differenza tra “Esegui come amministratore” e Windows 7 Administrators Group su Microsoft forum o questa domanda SuperUser.

Windows 7 richiede che tu chieda intenzionalmente determinati privilegi in modo che un programma dannoso non possa fare cose cattive. Se la calcolatrice gratuita che hai scaricato dovesse essere eseguita come amministratore, sapresti che qualcosa è successo. Esistono comandi OS per elevare i privilegi della tua applicazione (che richiederà la conferma all’utente).

Una buona descrizione può essere trovata a:

http://msdn.microsoft.com/en-us/magazine/cc163486.aspx#S4

Il comando Esegui come * Qualsiasi cosa ti consente di evitare la disconnessione e l’accesso come utente per il quale usi il comando runas.

Il motivo per cui i programmi richiedono questo privilegio elevato è stato avviato con Black Comb e la cartella Panther. C’è 0 accesso al Kernel in Windows se non attraverso il prompt Admin e quindi è solo una relazione virtuale con il kernel O / S.

Hoorah!

Un po ‘più chiaro … Un programma software che ha accesso alla modalità kernel ha accesso totale a tutti i dati del computer e al suo hardware.

Dal momento che Windows Vista Microsoft ha impedito a tutti i processi I / O di accedere direttamente al kernel (ring 0) mai più. Il più vicino che otteniamo è una cartella creata come una partizione di accesso al kernel virtuale, ma tecnicamente non ha accesso al kernel stesso; il kernel si incontra a metà strada.

Questo perché il software stesso stabilisce quale token utilizzare, quindi se richiede un token di accesso amministratore, invece di consentire solo le comunicazioni con il kernel come in Windows XP, viene richiesto di consentire l’accesso al kernel, ogni volta. Cambiare UAC potrebbe ridurre i prompt, ma mai il kernel lo richiede.

Anche quando accedi come amministratore, esegui processi come utente standard fino a quando non viene richiesto di elevare i diritti che hai. Credo che abbia effettuato l’accesso poiché l’amministratore ti ha salvato dall’immissione delle credenziali. Ma scrive anche sulla struttura delle cartelle degli utenti amministratori.

L’accesso al kernel è simile all’accesso root in Linux. Quando elevi i tuoi permessi, ti stai isolando dalla radice di C: \ e dalle variabili d’ambiente adorabili.

Se si ricordano i BSOD, questo era il blocco del sistema operativo quando si riteneva che un I / O cattivo avesse raggiunto il kernel.

Ok, ripetiamo …

La domanda vera e propria (ed eccellente)

Che cosa fa ‘run as admin’ fa che essere un membro del gruppo degli amministratori non lo fa?

(Risposta 1. Ti consente di chiamare i diritti di amministratore mentre sei in una sessione utente.

Nota: la domanda è erroneamente messa; uno è un comando e l’altro è un object di gruppo per applicare le politiche.

Aprire un prompt dei comandi e digitare runas /? .

Questo elencherà tutti gli switch che possono essere utilizzati dalla riga di comando di runas .

Per quanto riguarda il gruppo Administrators, questo è basato su GPEDIT o SECPOL e indica se è presente o meno un amministratore di dominio o se è presente o meno una rete.

Di solito queste cose applicheranno restrizioni sui computer di cui il gruppo di amministratori non è interessato.

La domanda dovrebbe essere

Che cosa fa runas admin che viene eseguito come utente no?

O

Cosa fa il gruppo di amministratori che un gruppo utenti personalizzato non può?

Stai mescolando mele e arance.