Está mudando a propriedade / permissões de um dispositivo de bloco equivalente a mudar o ownrshp / perms do sistema de arquivos? Isso é algo que alguém gostaria de fazer?

3

Eu estava tentando responder a essa pergunta: Não é possível fsck um disco devido a nenhum acesso r / w . Ao que eu respondi:

The answer is implied in fsck's output.

Change ownsership with:

# chown username /dev/sdb5
$ fsck /dev/sdb5

Or don't change it and become root instead (probably better):

# fsck /dev/sdb5

If device is mounted, unmount it before.

A saída fsck aludida sendo:

You must have r/w access to the filesystem or be root.

Em seguida, outro usuário comentou na minha resposta o seguinte:

Never change the ownership of a blockdevice. It opens security holes and it normally also prevents a normal user from doing something stupid. So the sudo option you describe would be the way to go. Maybe you want to adopt your answer.

E isso me confunde, porque normalmente eu criaria um sistema de arquivos executando mkfs em um dispositivo de bloco, por exemplo, %código%. Então eu assumi que para interagir com esse sistema de arquivos eu deveria fazê-lo através do arquivo de dispositivo de bloco. Agora, se o sistema de arquivos residir em / dev / block_device, quando eu mudar a propriedade ou as permissões do dispositivo de bloco, isso significa que estou alterando a propriedade ou as permissões do sistema de arquivos?

Se eu fiz a suposição errada e essas coisas não forem equivalentes, como mudar a propriedade ou as permissões de um sistema de arquivos?

Ou isso é algo que ninguém deveria fazer? Por quê?

    
por Samuel Santana 26.07.2017 / 02:01

2 respostas

2

Quando você altera o proprietário ou a propriedade do dispositivo de bloco, não altera nada no sistema de arquivos. O que acontece se vocêchown o dispositivo de bloco para um usuário normal é, que você ignora completamente os direitos de acesso ao sistema de arquivos.

Um dispositivo de bloco é apenas um contêiner que contém dados não estruturados. O sistema de arquivos torna isso estruturado e utilizável. Normalmente, todos os usuários acessam o dispositivo de bloco indiretamente através do sistema de arquivos, pedindo para ler / abrir / gravar arquivos ou pastas. Tudo baseado nos direitos de acesso que são mantidos pelo sistema de arquivos, concedendo ou negando o acesso a um arquivo ou pasta.

Agora, quando um usuário normal tem acesso de leitura / gravação em um dispositivo de bloco, pode-se ignorar esses direitos de acesso do sistema de arquivos, já que você pode "riscar" arquivos diretamente do dispositivo de bloco.

Vamos percorrer.

Primeiro, criamos uma pasta e um arquivo que só é acessível por root , começando com um dispositivo de bloco como deveria ser.

root@host:~# ll /dev/vda1
brw-rw---- 1 root disk 253, 1 Jul 26 18:52 /dev/vda1

root@host:~# mkdir /secure-folder
root@host:~# chmod 700 /secure-folder/
root@host:~# ll -d /secure-folder
drwx------ 2 root root 4096 Jul 27 20:06 /secure-folder/

root@host:~# echo "MySuperSecretText" > /secure-folder/my-secure-file
root@host:~# chmod 400 /secure-folder/my-secure-file
root@host:~# ll /secure-folder/my-secure-file
-r-------- 1 root root 9 Jul 27 19:19 /secure-folder/my-secure-file

Esta pasta e arquivo só podem ser acessados pelo usuário root e, mesmo depois de alterar o proprietário do dispositivo de bloco, ele ainda é o esperado.

user@host:~$ ll /secure-folder/
ls: cannot open directory /secure-folder/: Permission denied
user@host:~$ ll /secure-folder/my-secure-file
ls: cannot access /secure-folder/my-secure-file: Permission denied

root@host:~# chown user /dev/vda1 
root@host:~# ll /dev/vda1 
brw-rw---- 1 user disk 253, 1 Jul 27 20:16 /dev/vda1

user@host:~$ ll /secure-folder/
ls: cannot open directory /secure-folder/: Permission denied
user@host:~$ ll /secure-folder/my-secure-file
ls: cannot access /secure-folder/my-secure-file: Permission denied

Nesse caso, seu sistema de arquivos está impedindo que user dos arquivos de acesso não tenham direitos de acesso.
Mas como o user tem acesso de leitura / gravação ao dispositivo de bloco, podemos ignorar o sistema de arquivos. vda1 aqui é a partição que está montada em / e debugfs vem com e2fsprogs , portanto, é quase certo pré-instalado.

user@host:~$ debugfs /dev/vda1 -R "ls -l /secure-folder"
  67344   40700 (2)      0      0    4096 27-Jul-2017 19:33 .
      2   40755 (2)      0      0    4096 27-Jul-2017 19:16 ..
  45137  100400 (1)      0      0      18 27-Jul-2017 19:43 my-secure-file

Tudo bem, posso listar as entradas do diretório em uma pasta que não tenho direitos de acesso. Vamos ver o que mais pode ser feito em um arquivo que eu não tenho direitos de acesso.

user@host:~$ debugfs /dev/vda1 -R "cat /secure-folder/my-secure-file"
debugfs 1.42.9 (4-Feb-2014)
MySuperSecretText

Tudo bem, posso ler o conteúdo dos arquivos dessa maneira. Legal. O que mais eu poderia fazer? Vamos criar uma pasta em um lugar que eu normalmente não conseguia.

user@host:~$ debugfs -w /dev/vda1 -R "mkdir /secure-folder/attack"
debugfs 1.42.9 (4-Feb-2014)

root@host:~# ll /secure-folder/
total 16
drwx------  2 root root 4096 Jul 27 19:33 ./
drwxr-xr-x 25 root root 4096 Jul 27 19:16 ../
drwxr-xr-x  2 root root 4096 Jul 27 20:29 attack/
-r--------  1 root root   18 Jul 27 19:43 my-secure-file

Ooops. Ele ainda pertence a root , embora eu o tenha criado como user . Hm, o que mais seria possível? Vamos tentar.

Primeiro, precisamos do número de bloco do /secure-folder/my-secure-file .

user@host:~$ debugfs /dev/vda1 -R "blocks /secure-folder/my-secure-file"
debugfs 1.42.9 (4-Feb-2014)
913939 

Ok, o número de bloco 913939 contém os dados do arquivo /secure-folder/my-secure-file . Vamos usar dd para obter o conteúdo, 4096 é o tamanho de bloco padrão dos sistemas de arquivos ext4 ou xfs. Novamente possível porque eu posso operar no dispositivo de bloco como um usuário normal.

user@host:~$ dd if=/dev/vda1 of=/tmp/secure-file skip=913939 bs=4096 count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.0214174 s, 191 kB/s

Agora podemos modificar /tmp/secure-file e dd no dispositivo de bloco.

user@host:~$ cat /tmp/secure-file
XxXxxxxSecretText

user@host:~$ dd if=/tmp/secure-file of=/dev/vda1 seek=913939 bs=4096 count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000356448 s, 11.5 MB/s

Por fim, como root user, vamos dar uma olhada no arquivo da visualização do sistema de arquivos. Para torná-lo seguro, primeiro invalidamos todos os caches para obter o conteúdo do disco.

root@host:~# echo 3 > /proc/sys/vm/drop_caches
root@host:~# cat /secure-folder/my-secure-file
XxXxxxxSecretText

root@host:~# ll /secure-folder/my-secure-file
-r-------- 1 root root 18 Jul 27 20:39 /secure-folder/my-secure-file

Eu alterei um arquivo que pertence a root como usuário normal e não tive que alterar nenhum direito de acesso. Tudo baseado no fato de que eu tinha acesso de leitura / gravação ao dispositivo de bloco subjacente.
Este é apenas um exemplo simples e um invasor avançado pode colocar código binário em seu sistema de arquivos ou trocar binários conhecidos por binários maliciosos. Normalmente, as ferramentas utilizadas são pré-instaladas em praticamente qualquer distribuição.

Bem, devo admitir que os direitos de acesso no dispositivo de bloco são recuados quando você reinicia por udev , mas abre um problema de segurança quando você concede acesso de leitura / gravação a um usuário normal a um dispositivo de bloco. / p>

Espero que não seja muito confuso e ajude a entender a diferença entre o sistema de arquivos e o dispositivo de bloco.

    
por Thomas 27.07.2017 / 21:06
1

Eu acho que você está entendendo mal a implicação. como membro do grupo sudo, você tem acesso R / W por padrão. Isso não significa que você é, na verdade, root, só que você tem acesso similar dependendo do como o sudo está configurado.

Leitura adicional:

link

link

    
por Elder Geek 26.07.2017 / 19:13