Por que a leitura de um dispositivo requer permissões de administrador?

0

Estou tentando criar um script de backup que salve meu thumbdrive como uma imagem. Estou planejando ter isso automático. Eu sempre vi o thumbdrive listado como /dev/sdb , e criei um script que irá salvá-lo como um tarball gzipped.

Ao tentar fazer uma cópia dele via dd , notei esse erro:

dd: failed to open ‘/dev/sdb’: Permission denied

Eu me perguntei se era apenas um acaso, então tentei canalizar um comando cat para dd e recebi este erro:

cat: /dev/sdb: Permission denied
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000620078 s, 0.0 kB/s

Claro que, como sou superusuário, posso sudo sair - mas isso remove um elemento do script que é automático.

Por que esse dispositivo precisa ter permissão de superusuário se não estou modificando-o? Além disso, existe uma maneira de contornar isso?

    
por Lawful Lazy 02.03.2016 / 05:08

3 respostas

1

Why does reading a device require admin permissions?

Em primeiro lugar, há alguns problemas aqui

  1. mount 'do dispositivo de armazenamento físico e das partições que ele contém.
  2. Acessando e manipulando os arquivos nele.

Se o sistema de arquivos for baseado em permissões, por exemplo, ext2,3,4, em seguida, as permissões são definidas em uma base por arquivo.

Em termos de por que você exigiria que o usuário tivesse privilégios especiais de administrador para montar um dispositivo, há algumas razões, que são mais prováveis de se aplicarem a situações corporativas e menos aplicáveis a computação pessoal - embora ainda possam ser relevante

  1. Evita a leitura em programas abusivos Uma vez que um disco é montado, uma coleção inteira de programas não confiáveis está agora potencialmente disponível para execução, o que pode abusar do sistema operacional. Se você estivesse administrando esse sistema, poderia ter mais confiança de que isso não aconteceria se usuários ocasionais não pudessem fazer o upload de seus próprios programas em seus próprios discos.
  2. Escrever / guardar dados confidenciais confidenciais Se você tivesse segredos corporativos ou senhas de usuários em um sistema e alguém pudesse conectar um dispositivo de armazenamento não autorizado, eles poderiam fazer cópias para ele.

Você pode contornar o problema sudo executando o script inteiro como sudo e, em seguida, usando sudo para alternar de volta para um usuário comum dentro do script para os comandos que você não deseja executar como root (yes you pode fazer isso, por exemplo

arquivo: script.sh

#!/bin/sh

# this dd command now works
dd if=<source> of=<target> bs=<byte size>

# normal cammand you want to run as "mathmaniac" user
sudo -u "MathManiac" bash -c "touch foo.bar" 

Então, você executa este script com:

sudo ./script.sh

Outra maneira rápida e suja, mas geralmente não recomendada, é simplesmente colocar sudo na frente do comando dentro do script, quando o intérprete encontrar o sudo , ele interromperá a execução do script e solicitará sua senha sudo antes de continuar. / p>     

por 02.03.2016 / 06:29
4

Os sistemas Unix / Linux são multiusuários. Qualquer um que tenha acesso de leitura a um dispositivo de armazenamento bruto pode ler todos os arquivos nele, independentemente de quem possui os arquivos e suas permissões (é claro que o sistema de arquivos está sendo criptografado). Então, tradicionalmente, os dispositivos brutos permitiram somente o acesso a root e aos membros de um grupo administrativo, como operator ou disk , e você colocaria seus usuários administradores confiáveis ou usuários de operações de backup nesse grupo.

Nas distribuições GNU / Linux que executam o udev, 50-udev-default.rules coloca todos os dispositivos de bloco e SCSI em /dev que não são disquetes ou fitas no grupo disk e concede ao grupo permissão de leitura / gravação, portanto, uma possível solução para você é se adicionar a esse grupo usando usermod ou editando /etc/group diretamente. Faça o logout e faça login novamente.

    
por 02.03.2016 / 08:52
0

Você poderia editar o fstab para montar o sistema de arquivos sem ser root, mas isso não dá uma imagem do dispositivo de bloco.

Você pode editar o arquivo sudoers para que o script de backup possa sudo um comando específico sem digitar uma senha.

    
por 02.03.2016 / 06:34