I socket di dominio UNIX possono essere bloccati dall'ID utente?

4

Se ho creato una cartella /tmp/me con permessi 700 e avviato un processo in me che avvia un socket di ascolto in /tmp/me/socket .

  • Attualmente suppongo che una connessione a quel socket sia originata da un processo in esecuzione sullo stesso server (malevolo o altro) e che non sia una connessione da un altro server (a meno che non sia uno dei processi).
  • Posso anche supporre che gli unici utenti che possono accedere a quel socket siano me e root ?

Sto chiedendo in particolare a Solaris.

Nota: sono consapevole che l'impostazione delle autorizzazioni per il file socket non è efficace su vari sistemi operativi. Ecco perché ho scelto di contenere il file socket all'interno di una directory me .

    
posta George Bailey 21.02.2012 - 14:43
fonte

2 risposte

6

I currently assume that a connection to that socket originated from a process that is running on the very same server

Una corretta. I socket del filesystem devono essere letti da un processo che ha accesso al file.

Can I also assume that the only users who can access that socket are me, and root?

Sì. Poiché me è l'unico utente con autorizzazioni, sono gli unici che possono entrare in quella cartella e visualizzare il socket. root , ovviamente, è root .

    
risposta data 21.02.2012 - 15:36
fonte
2

Sì, tu puoi fare questo, ma potrebbe non essere il miglior design poiché, su alcuni sistemi, come HP-UX , le autorizzazioni del file socket vengono ignorate. Anche se le autorizzazioni della directory principale saranno ancora applicate, potrebbero essere più difficili da amministrare rispetto alle autorizzazioni sul file socket stesso.

I socket di dominio Unix forniscono un altro mezzo per verificare l'identità del processo remoto: SCM_CREDENTIALS , come documentato in unix(7) . Questo è infallibile dal momento che solo root * è autorizzato a trasmettere credenziali contraffatte. Sfortunatamente, questo non sembra essere più standard di mettere le autorizzazioni del filesystem sul file socket:

SCM_CREDENTIALS and the abstract namespace were introduced with Linux 2.2 and should not be used in portable programs. (Some BSD-derived systems also support credential passing, but the implementation details differ.)

* Su Linux, tecnicamente, il processo esterno deve avere solo la CAP_SETUID capacità , ma questo è una capacità equivalente alla radice in qualsiasi configurazione del sistema vagamente ragionevole (in altre parole, se un utente malintenzionato ha questa capacità, ha effettivamente root). Il processo estero è inoltre autorizzato a fornirti uno qualsiasi dei suoi ID utente / gruppo reali, efficaci e salvati , che neanche una vulnerabilità, per ragioni simili (TL; DR: qualsiasi processo è autorizzato a scambiare queste credenziali in qualsiasi momento piace).

    
risposta data 19.06.2016 - 23:10
fonte

Leggi altre domande sui tag