Não é possível excluir o arquivo como raiz

1

Atualização do sistema de rotina (Linux Mint 19) falhou com um erro sobre não ser possível fazer um backup de um arquivo. O arquivo tem um proprietário e um grupo muito estranho e um comportamento estranho de lsattr. Não é possível excluir o arquivo como root.

$ ls -lah
total 64K
drwxr-xr-x  2 root       root       4.0K Sep 14 00:41 .
drwxr-xr-x 15 root       root       4.0K Jul 20 06:18 ..
-rw-r--r--  1 root       root        18K Jul 17 03:41 cs-xlet-danger.svg
-rw-r--r--  1 root       root        13K Jul 17 03:41 cs-xlet-running.svg
-rw-r--r--  1 root       root        19K Jul 17 03:41 cs-xlet-system.svg
-rw-r--r--  1 2558197760 2848915456    0 Jul 17 03:41 cs-xlet-update.svg
$ sudo rm -f cs-xlet-update.svg 
rm: cannot remove 'cs-xlet-update.svg': Operation not permitted
$ lsattr .
--------------e--- ./cs-xlet-danger.svg
--------------e--- ./cs-xlet-system.svg
lsattr: No data available While reading flags on ./cs-xlet-update.svg
--------------e--- ./cs-xlet-running.svg

Eu então inicializo em um live CD para checar o sistema de arquivos.

$ sudo e2fsck -f /dev/sda1
e2fsck 1.44.1 (24-Mar-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: 291836/1310720 files (0.4% non-contiguous), 2935417/5242624 blocks

Após o bom funcionamento do sistema de arquivos, montei a unidade e tentei excluir o arquivo do live CD OS (Linux Mint).

$ ls -lah
total 64K
drwxr-xr-x  2 root       root       4.0K Sep 14 04:41 .
drwxr-xr-x 15 root       root       4.0K Jul 20 10:18 ..
-rw-r--r--  1 root       root        18K Jul 17 07:41 cs-xlet-danger.svg
-rw-r--r--  1 root       root        13K Jul 17 07:41 cs-xlet-running.svg
-rw-r--r--  1 root       root        19K Jul 17 07:41 cs-xlet-system.svg
-rw-r--r--  1 2558197760 2848915456    0 Jul 17 07:41 cs-xlet-update.svg
$ sudo rm -f cs-xlet-update.svg 
rm: cannot remove 'cs-xlet-update.svg': Operation not permitted
$ lsattr .
--------------e--- ./cs-xlet-danger.svg
--------------e--- ./cs-xlet-system.svg
lsattr: No data available While reading flags on ./cs-xlet-update.svg
--------------e--- ./cs-xlet-running.svg

Por fim, tento excluí-lo por inode sem sucesso:

$ ls -i cs-xlet-update.svg 
220926 cs-xlet-update.svg
$ find . -inum 220926 -exec sudo rm -i {} \;
rm: remove regular empty file './cs-xlet-update.svg'? y
rm: cannot remove './cs-xlet-update.svg': Operation not permitted

Como posso me livrar desse arquivo?

    
por Adam Griffin 14.09.2018 / 08:04

1 resposta

0

Depois de forçar um fsck (com -f flag) e ele ainda parece limpo ... Os números de usuários / grupos são incomuns, geralmente estão abaixo de 10000, acho que dois bilhões não parecem certos, e eles são zero bytes ... algo é engraçado. Pode haver alguns atributos estendidos para verificar também, se eles não funcionarem.

Talvez tente listar por inode

ls -il

e, em seguida, excluir por inode, com find e rm

find . -inum [inode-number] -exec rm -i {} \;

ou outro exemplo recomendado alguns acham "segurança" e find -delete

find . -maxdepth 1 -type f -inum [inode-number]  -delete

para ainda mais "segurança", primeiro verifique qual arquivo encontrar encontrou omitindo o -delete, usando o padrão "print"

find . -inum [inode-number] 

Se isso ainda não funcionar, debugfs tem alguns comandos que devem, e muitos dos seus comandos usam um inode como argumento

   rm pathname
          Unlink pathname.  If this causes the inode pointed to by pathname to have
          no other references, deallocate the file.  This command functions as  the
          unlink() system call.

ou talvez

   unlink pathname
          Remove the link specified by pathname to an inode.  Note  this  does  not
          adjust the inode reference counts.

E, mesmo que os atributos estendidos estejam causando problemas, você pode tentar getfacl listá-los & setfacl para alterar, a opção -b, --remove-all parece útil. Ou no pacote attr , também há getfattr e setfattr .

Ou o debugfs tem alguns comandos de atributos estendidos também:

   ea_get [-f outfile] filespec attr_name
          Retrieve  the value of the extended attribute attr_name in the file file‐
          spec and write it either to stdout or to outfile.

   ea_list filespec
          List the extended attributes associated with the file filespec  to  stan‐
          dard output.

   ea_set [-f infile] filespec attr_name attr_value
          Set the value of the extended attribute attr_name in the file filespec to
          the string value attr_value or read it from infile.

   ea_rm filespec attr_names...
          Remove the extended attribute attr_name from the file filespec.
    
por 14.09.2018 / 10:30