Por que raiz não pode acessar o diretório ".android_secure" no cartão SD externo? -- security campo com external-sd campo com storage campo com app2sd campo com file-permissions camp android Relacionado O problema

Why root cannot access “.android_secure” directory on external SD card?


2
vote

problema

português

Eu tenho um tablet Android 9, enraizado por meio de Magisk. Ele tem um cartão SD externo montado como sdfat em /mnt/media_rw/1234-5678 que é montado em quatro outros pontos de montagem, tudo como tipo abcdefghijklmnabcdefgijklmn2 , com alguma variação proprietário e grupo.

De uma janela de terminal i Tipo ls -al /storage/1234-5678 . Muitos arquivos e diretórios são mostrados com uma mensagem de erro:

  ls: permission denied: .android_secure    

Eu tento como root. Eu recebo o mesmo resultado. Usando /mnt/media_rw/1234-5678 e root, posso ver a entrada para .android_secure . Eu sou informado de que .android_secure está vazio.

    .
  1. O cartão SD externo é FAT32. Qualquer coisa sobre ele tem o mesmo conjunto de permissões. Como é .android_secure diferente de tudo no cartão?
  2. mesmo se .android_secure tenha diferentes permissões dos outros arquivos no diretório, por que isso está me impedindo de exibir A entrada de diretório?
  3. Eu me torno raiz e ainda não consigo exibir a entrada de diretório para /mnt/media_rw/1234-56780 . Como isso pode ser?

Eu tentei /mnt/media_rw/1234-56781 . Eu tentei /mnt/media_rw/1234-56782 . Ainda: /mnt/media_rw/1234-56783 .

Eu li O diretório faz / mnt / asec contém? mas não responde às minhas perguntas:

.
    .
  1. Se eu tiver as permissões necessárias para listar algumas entradas de diretório, como estou proibido listar uma entrada específica nesse diretório?

  2. Como é possível negar raiz a capacidade de listar uma entrada de diretório? (E, em seguida, altere as proteções nessa entrada.)

Eu posso aceitar que o sistema de arquivos mágicos e / ou selinux possibilitam ter proteções diferentes em um arquivo. Eu simplesmente não consigo entender o raiz não consegue até mesmo ver O que as proteções diferentes são diferentes.

english

I have an Android 9 tablet, rooted by way of Magisk. It has an external SD card mounted as sdfat on /mnt/media_rw/1234-5678 which is mounted on four other mount points, all as type sdcardfs, with some variation in owner and group.

From a terminal window I type ls -al /storage/1234-5678. Lots of files and directories are shown with one error message:

ls: permission denied: .android_secure 

I try as root. I get the same result. Using /mnt/media_rw/1234-5678 and root, I can see the entry for .android_secure. I'm told that .android_secure itself is empty.

  1. The external SD card is FAT32. Anything on it has the same set of permissions. How is .android_secure different from everything else on the card?
  2. Even if .android_secure has different permissions from the other files in the directory, why is that stopping me from displaying the directory entry?
  3. I become root and I still can't even display the directory entry for .android_secure. How can that be?

I tried stat. I tried lsattr. Still: permission denied.

I have read What does /mnt/asec directory contain? but it doesn't answer my questions:

  1. If I have the permissions needed to list some directory entries, how am I being forbidden to list a specific entry in that directory?

  2. How is it ever possible to deny root the ability to list a directory entry? (And then change the protections on that entry.)

I can accept that the magic filesystem and/or SELinux makes it possible to have different protections on one file. I just can't understand root being unable to even see what those different protections are.

              
     
     

Lista de respostas

2
 
vote

Uma pesquisa rápida revela que existem perguntas não respondidas semelhantes ( este , Isto e ). Deixe-me tentar desmistificá-lo, começando com Breve História.

O que é .android_secure diretório?

Para resolver o problema da escassez de espaço no armazenamento interno, app2sd ( Mover para o cartão SD ) foi o recurso nativo do Android até o pirulito. Com este método .apk arquivos (ou inteiros /data/app/<pkg>/ diretórios) são movidos como criptografados < Código> ABCDEFGHIJKLMNABCDefGHIJKLMN8 Arquivos Para ABCDEFGHIJKLMNABCDEFGHIJKLMN9 Pasta no cartão SD externo ou interno abcdefghijklmnabcdefgijklmn10 partição (montado em #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 1 ou #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 2 ). Em cada inicialização #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 3 é montado no #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 4 e o ( #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 5 ) contentores do sistema de arquivos ( #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 6 ) são descriptografados ( Usando #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 7 ) e montado em diretórios individuais (nomeados após nomes de pacotes) em um sistema de arquivos temporário montado em #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 8 por #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 9 . Symlinks de Unknown sources0 e possivelmente Unknown sources1 estão apontando para Unknown sources2 e Unknown sources3 .

Por que o acesso a Unknown sources4 é restrito?

A partir dos primeiros dias do Android, acesso a ABCDEFGHIJKLMNABCDEFGHIJKLMN25 Pasta (que mais tarde se tornou ABCDEFGHIJKLMNABCDEFGHIJKLMN26 ) foi restrito. O cometer Estados:

.

Para proteger o diretório abcdefghijklmnUnknown sources7 diretório no VFAT Mídia removível de ser mucked com aplicativos de terceiros no dispositivo, escondemos o diretório com um tamanho de leitura. Código> ABCDEFGHIJKLMNABCDEFGHIJKLMN28 No topo.

Mais tarde no Android 4.4 Quando o fusível foi iniciado para ser usado para Emulando cartões SD < / a> do ponto de montagem original ( Unknown sources9 ) para o caminho acessível ao usuário ( Settings > Security > Unknown sources0 ), o abcdefghijklmn31 funcionalidade ( ignorar as tentativas de acessar os arquivos sensíveis à segurança ) foi mudou para abcdefghijklmnAbcdefghijklmn32 Settings > Security > Unknown sources3 foi abandonado em favor do armazenamento adotável (também o sistema de arquivos foi incluído nos pontos de montagem).

no Android 7 ABCDEFGHIJKLMNABCDEFGHIJKLMN34 Suporte foi adicionado em paralelo ao fusível e os "Sempre bloqueie os arquivos sensíveis à segurança" A funcionalidade foi adicionado ao abcdefghijklmnAbcdefghijklmn35 no kernel. No Android 9 Fusível foi completamente removido (de Settings > Security > Unknown sources6 doemon) mas o abcdefghijklmn47 ainda bloqueia criação / deleção de abcdefghijklmn48 diretórios na raiz do sistema de arquivos emulados . No entanto, como você percebeu, é possível acessar o caminho através do ponto de montagem não emulado original I.E. ABCDEFGHIJKLMNABCDEFGHIJKLMN39 .

Para detalhes sobre a emulação do sistema de arquivos, consulte Que é / armazenamento / emulado / 0 /?

Por que raiz não pode acessar um diretório?

.

Como é possível negar raiz a capacidade de listar uma entrada de diretório?

.android_secure0 não é nada além do querido usuário do kernel. O kernel não pare com o UID 0 de fazer qualquer dano ou bom. Mas há coisas que são mais caras ao kernel do que raiz. Inclui SELinux 1 , linux capacidades 2 e, obviamente, as restrições do sistema de arquivos como vemos com fusível 3 e abcdefghijklmn41 4 . E como raiz não é possível excluir um arquivo com .android_secure2 atributo 5 . É possível remover qualquer restrição ou adicionar mais modificando a fonte do kernel.


1 ver Explicação e Exemplo .
2 Uma demonstração simples:

  .android_secure3   

3 fusível documentação < / a>:

.

"nenhum outro usuário ( incluindo root ) pode acessar o conteúdo do sistema de arquivos montado"

4 uid 0 é marcado após arquivo de arquivo ( .android_secure4 ) é marcado.
5 Por que não posso excluir este arquivo como root?


relacionado:

  • Viagem de armazenamento do Android
  • Como salvar arquivos para o cartão SD externo?

 

A quick search reveals that there exist similar unanswered questions (this, this and this). Let me try to demystify it, starting with brief history.

WHAT IS .android_secure DIRECTORY?

In order to solve the problem of space shortage in internal storage, app2sd (Move to SD Card) was Android's native feature up to Lollipop. With this method .apk files (or whole /data/app/<pkg>/ directories) are moved as encrypted .asec files to .android_secure folder on external SD card or internal sdcard partition (mounted at /mnt/sdcard/ or /mnt/media_rw/sdcard[N]/). On every boot .android_secure is bind mounted to /mnt/secure/asec/ and the (ext4) filesystem containers (.asec) are decrypted (using dm-crypt) and mounted to individual directories (named after package names) in a temporary filesystem mounted at /mnt/asec/ by vold. Symlinks from /data/app/<pkg>/ and possibly /data/data/<pkg>/lib/ are pointing towards /mnt/asec/<pkg>/ and /mnt/asec/<pkg>/lib/.

WHY ACCESS TO .android_secure IS RESTRICTED?

From the early days of Android, access to android_secure folder (which later became .android_secure) was restricted. The commit states:

In order to protect the /android_secure directory on VFAT removable media from being mucked with by 3rd party applications on the device, we hide the directory with a read-only, zero-sized tmpfs mounted on-top.

Later in Android 4.4 when FUSE was started being used for emulating SD cards from original mount point (/mnt/media_rw/sdcard1) to user accessible path (/storage/sdcard1/), the zero-sized tmpfs functionality (Ignore attempts to access security sensitive files) was shifted to sdcard daemon which was used to mount FUSE. In Android 6 the app2sd method was abandoned in favor of Adoptable Storage (also filesystem UUID was included in mount points).

In Android 7 sdcardfs support was added in parallel to FUSE and the "Always block security-sensitive files" functionality was added to sdcardfs in kernel. In Android 9 FUSE was completely removed (from sdcard daemon) but the sdcardfs still blocks creation/deletion of .android_secure directories in the root of emulated filesystem. However as you noticed, it's possible to access the path through original non-emulated mount point i.e. /mnt/media_rw/[UUID]/.android_secure.

For details on filesystem emulation, see What is /storage/emulated/0/?

WHY ROOT CAN'T ACCESS A DIRECTORY?

How is it ever possible to deny root the ability to list a directory entry?

root is nothing but kernel's dear user. Kernel doesn't stop UID 0 from doing any harm or good. But there are things which are dearer to kernel than root. It includes SELinux 1, Linux capabilities 2 and obviously the filesystem restrictions like we see with FUSE 3 and sdcardfs 4. And like root cannot delete a file with immutable attribute 5. It's possible to remove any such restriction or add more by modifying kernel source.


1 See explanation and example.
2 A simple demonstration:

~# setpriv --bounding-set -sys_admin -- sh -c 'id; mount -o ro,remount /' uid=0(root) gid=0(root) groups=0(root) mount: permission denied (are you root?) 

3 FUSE documentation:

"No other user (including root) can access the contents of the mounted filesystem"

4 UID 0 is checked after filename (.android_secure) is checked.
5 Why can't I delete this file as root?


RELATED:

  • Android's Storage Journey
  • How to save files to external SD card?
 
 

Perguntas relacionadas

3  Tipo de arquivo desconhecido contendo um vírus  ( Unknown file type containing a virus ) 
Vou tentar manter a história tão curta quanto possível, então você pode ter uma visão mais clara do que é a minha preocupação. Enquanto, eu estava navegando n...

5  Quais sistemas de arquivos posso usar para um SDCard de 128GB no Android 7.1, usado como armazenamento portátil  ( What file systems can i use for a 128gb sdcard on android 7 1 used as portable ) 
Não consigo encontrar uma resposta para isso no stackexchange. Eu tenho um telefone executando o Beta Linegeos 14.1 (Android 7.1) e um cartão SDXC de 128GB qu...

2  Downloads não possíveis após raiz  ( Downloads not possible after root ) 
Eu enraizei meu Samsung Galaxy S5 (Android 5.0, SM G900F) recentemente com Odin. Enquanto eu enraizei, eu tinha o Kingroot instalado. Como o Kingroot assumiu ...

4  Como faço para consertar as permissões em / System / App no ​​meu fogo Kindle  ( How do i fix the permissions on system app on my kindle fire ) 
Eu tentei torcer meu Kindle Amazon. Isso pareceu ir bem, mas quando eu tentei adicionar o mercado do Google App, eu aparentemente fiz um grande booboo, porque...

2  Como posso fazer isso para que qualquer usuário possa chmod no meu fusível de formatação e SDCard montado no fusível?  ( How can i make it so that any user can chmod in my fuse mounted ext4 formatted ) 
Eu tenho um transformador ASUS PAD TF101. Eu finalmente cheguei ao torcendo agora. IMPORTANTE: user1 é não fat32. É um sistema de arquivos de fusível ...

1  ES File Explorer foi negado permissão para um shell interativo  ( Es file explorer has been denied permission for an interactive shell ) 
Eu tenho um Nexus enraizado 7. Eu tenho usado o ES File Explorer junto com ele. Eu fui capaz de navegar por arquivos, depois de definir ferramentas / Root Exp...

0  Build.prop modifica ok. Mas não atualizações no sistema (por exemplo, sobre tablet em configurações)  ( Build prop modifies okay but not updates in system e g about tablet in settin ) 
Eu estou executando Android-X86 4.4 na caixa virtual. Tudo funciona bem. Mas quando estou modificando o Build.Prop (com ES File Explorer ou Editor BuildProp) ...

0  Como obter permissão para sobrescrever arquivos em / sistema / fontes no telefone android  ( How to get permission for overwrite files in system fonts directory in android ) 
Estou tentando sobrescrever os arquivos das fontes (* .ttf) no meu dispositivo Android (Dell Aero). Minhas novas fontes são residentes no SDCard e estou usand...

2  Não é possível gravar arquivos no cartão SD  ( Cannot write files to sd card ) 
Alguns dias atrás, meu cartão SD tornou-se inutilizável. Eu tentei copiar alguns MP3 do meu laptop (Win 7) para o meu telefone (Samsung S2 Plus, executando o ...

2  Não é possível copiar arquivos de um / dados / dados / diretório para outro (raiz)  ( Unable to copy files from one data data directory to another root ) 
Estou tentando copiar um arquivo de /data/data/com.application1/myfile para /data/data/com.application2/myfile O arquivo chega com o proprietário e o gr...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.