GNU/Linux >> Linux Esercitazione >  >> Linux

Il modo più sicuro per forzare la chiusura di un descrittore di file

aprire /dev/null con O_WRONLY, quindi dup2 per chiudere il descrittore di file offensivo e riutilizzare il suo descrittore per /dev/null. In questo modo qualsiasi lettura o scrittura sul descrittore di file fallirà.

Se duplichi un descrittore in /dev/null , qualsiasi scrittura non fallirà , ma riuscito e le letture avranno successo e restituisce 0 (eof).

Questo può o non può essere quello che vuoi.

Su Linux, puoi anche aprire un file con flags =3 (O_WRONLY|O_RDWR noto anche come O_NOACCESS ) che causerà il fallimento di qualsiasi lettura o scrittura con EBADF .

Il file sarà disponibile solo per ioctls, il che fa emergere un pericolo di cui non si parla nell'altra risposta e nei commenti:le letture e le scritture non sono le uniche operazioni eseguite sui descrittori di file. (che dire di lseek o ftruncate ?).

Aggiornamento:

Ho trovato qualcosa di meglio del O_WRONLY|O_RDWR non documentato :O_PATH = 010000000 / 0x200000 . Secondo la manpage open(2):

O_PATH (since Linux 2.6.39)
     Obtain a file descriptor that can be used for two  purposes:  to
     indicate a location in the filesystem tree and to perform opera-
     tions that act purely at the file descriptor  level.   The  file
     itself  is not opened, and other file operations (e.g., read(2),
     write(2), fchmod(2), fchown(2), fgetxattr(2), mmap(2)) fail with
     the error EBADF.

    The  following operations can be performed on the resulting file
     descriptor:

    *  close(2); fchdir(2) (since Linux 3.5); fstat(2) (since  Linux
        3.6).

    *  Duplicating  the  file  descriptor (dup(2), fcntl(2) F_DUPFD,
        etc.).

Linux
  1. Modo per modificare un file sul posto?

  2. Come forzare l'eliminazione di un file?

  3. Recupera il nome del file dal descrittore di file in C

  4. Modo portatile per ottenere la dimensione del file (in byte) nella shell?

  5. il modo più veloce per convertire file delimitati da tabulazioni in csv in linux

Installazione di Kali Linux su VirtualBox:il modo più rapido e sicuro

Un modo intelligente per deframmentare un file system grasso?

Echo To File Descriptor sovrascrive il file?

Backup su cloud e backup locale:il modo più sicuro per archiviare i dati

Qual è il modo corretto di usare inotify?

Come forzare il riavvio di firefox in modo pulito?