2009-03-16 13 views
6

Per capire cosa sto chiedendo, è importante distinguere tra i vari usi di SUID in Unix.Quali scelte ho sulle piattaforme MS Windows per l'equivalente di SUID da piattaforme basate su Unix?

Ho un progetto che utilizza un eseguibile nel PATH dell'utente che è di proprietà del progetto e che ha il bit SUID impostato. In questo modo, quando viene eseguito, viene eseguito nel contesto del proprietario del file, non dell'utente chiamante. In questo modo, ha accesso a cose che l'utente non ha, e quindi queste cose sono protette dall'utente dalle normali protezioni del file system. Funziona abbastanza bene. I piani sono di spostare il progetto su un'architettura client-server, ma ci vorrà del tempo. Nel frattempo, come posso replicare questo tipo di comportamento sui sistemi Windows?

Si noti che gli eseguibili del progetto non chiamano la chiamata alla libreria SETUID anche se, francamente, sarebbe una grande caratteristica aggiungere, a mio parere, a ciò che il progetto fa. Il progetto non ha bisogno di privilegi di root di sistema. La prima preoccupazione per la sicurezza è che ha bisogno di proteggere i propri file dall'utente (che è semplicemente qualsiasi utente diverso dal proprietario del file) e sarebbe molto bello se avesse la possibilità di passare a "contesto utente" per accedere al file sistema come se fosse l'utente chiamante. (In questo modo, potrebbe facilmente determinare cosa è OK per il progetto da toccare e cosa no.)

Il progetto è scritto in una combinazione di C e Java - un programma C con SUID set chiama il codice Java ...

sono ansiosa di conoscere tutti questi meccanismi, e sono particolarmente focalizzata su quelle che sono:

  1. Adatto per C e Java, e;
  2. Facile da implementare per programmatori non Windows, e;
  3. Richiede una codifica minima specifica per Windows.

Se alcune soluzioni sono superiori, si prega di condividere i propri pensieri su ciò che si è a conoscenza a questo proposito.

NOTE:

  1. LogonUser: richiede una password in testo normale. Come può essere una risposta?
  2. RunAs: richiede l'inserimento della password in PROMPT! ... Come con LogonUser solo peggio; Non vedo come questa sia una risposta.
+0

La soluzione corretta è installare un servizio. –

risposta

3

Non penso che ci sia un equivoco di SETUID in Windows, ma è possibile avviare un processo come un altro utente. Se si utilizza C, ci sono solo due principali funzioni di Windows specifici è necessario esaminare:

LogonUser

CreateProcessAsUser

la documentazione per queste funzioni sono piuttosto buone, quindi è shouldn' essere quella enorme di una sfida. In linea di principio, utilizzerai LogonUser per impersonare l'utente, quindi CreateProcessAsUser per avviare la JVM come tale utente.

Si potrebbe anche guardare il comando RUNAS, ma non sono sicuro che questo soddisferà le vostre esigenze o meno.

+0

Grazie, esaminandoli ... RT –

4

Cygwin ha un'eccellente discussione su come lo fanno senza richiedere la password utente qui: Using Windows security in Cygwin

In pratica hanno installare un pacchetto di autenticazione LSA personalizzato che fornisce i token di protezione senza richiedere una password. Come fallback, quando il pacchetto di autenticazione non è installato, usano l'API NtCreateToken non documentata.

Un'applicazione che desidera impersonare potrebbe effettuare una chiamata setuid cygwin prima di chiamare java.

+0

Sì, si scopre che è ESATTAMENTE quello che abbiamo fatto fin dai medioevo. Ma richiede all'utente di installare Cygwin - un bonus nella mia mente, ma gli utenti non sono felici di dover installare troppi pacchetti, specialmente quando non capiscono/percepiscono il valore per loro. Sembra, tuttavia, (data la mancanza di altre risposte) che questo è l'unico altro modo. –

+0

Ouch. Che incubo da un punto di vista della sicurezza. Un motivo in più per stare alla larga da Cygwin, IMO! –

Problemi correlati