Non genere, no. [Modifica: da Linux 3.11 c'è ora linkat
; vedi safsaf32's answer. Questo non funziona su sistemi POSIX, in generale, in quanto POSIX linkat
è limitato ai soli indici] Non ci sono considerazioni di sicurezza qui:. Qualcuno può passare a voi un descrittore di file aperto che non si poteva normalmente open
da soli, ad esempio:
mkdir lock; chmod 700 lock
echo secret contents > lock/in
sudoish cmd < lock/in
Qui cmd
viene eseguito come utente che non dispone dell'autorizzazione per open
il file di input (lock/in
) per nome, ma può ancora leggere da esso. Se cmd
potrebbe creare un nuovo nome sullo stesso file system, potrebbe passare il contenuto del file a un processo successivo. (Ovviamente può copiare quei contenuti, quindi questo problema è più di un "passare il contenuto per errore" che "passare il contenuto su, apposta".)
Detto questo, le persone hanno escogitato modi di "ricollegando" file internamente/vnode internamente (è piuttosto facile da fare all'interno della maggior parte dei file system), così si potrebbe fare la propria chiamata di sistema privata per questo. Il descrittore deve fare riferimento a un file reale sul punto di montaggio appropriato, ovviamente: non c'è modo di "ricollegare" una pipe o socket o dispositivo per diventare un file normale.
Altrimenti sei bloccato con "segnali di cattura e ripulisci e spera per il meglio", o un trucco simile, "esca da un sottoprocesso, eseguilo, e se riesce/fallisce, prendi la mossa/pulizia appropriata su azione ".
Modifica per aggiungere nota storica: il sopra lock
esempio non è particolarmente buona, ma nei giorni di V6 Unix, MDQS utilizzato una versione più elaborata di questo trucco. Bit e pezzi di MDQS sopravvivono in varie forme oggi.
buona domanda, +1 – nsd