Dando permissões de leitura ao arquivo do dispositivo do disco

5

Se para fins de benchmarking é preciso usar hdparm ou dd diretamente no dispositivo, eu me pergunto qual seria a maneira correta de fazer isso com segurança.

Digamos que o disco em questão seja /dev/sda :

root@igloo:~# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 May 29 08:23 /dev/sda
brw-rw---- 1 root disk 8, 1 May 29 08:23 /dev/sda1

Eu realmente não quero escrever para sda sob nenhuma circunstância. Então, seria aconselhável fazer chmod o+r /dev/sda* e executar dd ou hdparm como usuário normal?

    
por wolf-revo-cats 29.05.2017 / 13:35

2 respostas

10

chmod o+r /dev/sda* é bastante perigoso, pois permite que qualquer programa leia todo o seu disco (incluindo, por exemplo, hashes de senha em /etc/shadow , se sua partição raiz estiver em sda )!

Existem (pelo menos) duas maneiras de fazer isso com mais segurança:

  1. Adicione todos os usuários que precisam ler o disco ao grupo disk e execute chmod g-w /dev/sda* para impedir o acesso de gravação para esse grupo.
  2. Altere o grupo de /dev/sda* para um grupo que contenha apenas os usuários que precisam ler o disco, por exemplo, chgrp my-benchmarkers /dev/sda* e impede o acesso de gravação para este grupo com chmod .

Tenha em atenção que o grupo e as alterações de permissão nos nós de dispositivos em /dev são apenas temporários até o dispositivo em questão ser desligado ou o computador ser reinicializado.

Um problema pode ser que hdparm precise de acesso de gravação para a maior parte de sua funcionalidade. Você deve verificar se tudo que você deseja funciona com acesso somente leitura.

EDITAR: Parece que hdparm não precisa de acesso de gravação. Em vez disso, ele precisa do recurso CAP_SYS_RAWIO para executar a maioria dos ioctls. Você pode usar setcap cap_sys_rawio+ep /sbin/hdparm para fornecer esse recurso ao hdparm. Observe que isso permite que qualquer pessoa que execute hdparm e tenha pelo menos acesso de leitura a um arquivo de dispositivo para fazer praticamente qualquer coisa que hdparm possa fazer nesse dispositivo, incluindo --write-sector e todos os outros hdparm comanda a página do manual descrita como "MUITO PERIGOSO", "EXTREMAMENTE PERIGOSO" ou "EXCEPCIONALMENTE PERIGOSO". Os scripts do wrapper podem ser uma solução melhor.

Se você não tem que dar acesso de escrita ou escrever scripts de wrapper que podem ser executados por seus usuários como root usando regras de sudo.

    
por 29.05.2017 / 14:02
2

Uma possibilidade, embora algumas implementações do / dev possam não suportá-lo, seria usar uma ACL. Exemplo:

$ dd if=/dev/sda bs=1M count=200 of=/dev/null
dd: failed to open '/dev/sda': Permission denied
$ sudo setfacl -m u:youruser:r /dev/sd*
$ dd if=/dev/sda bs=1M count=200 of=/dev/null
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 0.0335544 s, 6.3 GB/s

AFAIK hdparm -t precisa ser executado como root.

    
por 29.05.2017 / 16:01