Se para fins de benchmarking for necessário usar hdparm
ou dd
diretamente no dispositivo, pergunto-me 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 queroescreverem sda
qualquer circunstância. Então, seria aconselhável fazê-lo chmod o+r /dev/sda*
e executá dd
- hdparm
lo como um usuário normal?
Responder1
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 ativada sda
)!
Existem (pelo menos) duas maneiras de fazer isso com mais segurança:
- Adicione todos os usuários que precisam ler o disco ao
disk
grupo e executechmod g-w /dev/sda*
para impedir o acesso de gravação para esse grupo. - Mude o grupo
/dev/sda*
para um grupo que contenha apenas os usuários que precisam ler o disco, por exemplo,chgrp my-benchmarkers /dev/sda*
e evite o acesso de gravação para este grupo comchmod
.
Observe que as alterações de grupo e permissão nos nós do dispositivo /dev
são apenas temporárias até que o dispositivo em questão seja desconectado ou o computador seja reinicializado.
Um problema pode ser a hdparm
necessidade de acesso de gravação para a maior parte de sua funcionalidade. Você deve verificar se tudo o que deseja funciona com acesso somente leitura.
EDITAR:Parece que hdparm
não precisa de acesso de gravação. Prefere antes oCAP_SYS_RAWIO
capacidadepara executar a maioria dos ioctls. Você pode usar setcap cap_sys_rawio+ep /sbin/hdparm
para fornecer esse recurso ao hdparm. Observe que isso permitequalquer umquem pode executar hdparm
e tem pelo menos acesso de leitura a um arquivo de dispositivo para fazer praticamente qualquer coisa hdparm
pode fazer nesse dispositivo, incluindo --write-sector
todos os outros comandos hdparm que a página man descreve como "MUITO PERIGOSO", "EXTREMAMENTE PERIGOSO" ou "EXCEPCIONALMENTE PERIGOSO". Os scripts wrapper podem ser uma solução melhor.
Caso contrário, você terá que conceder acesso de gravação ou escrever scripts wrapper que possam ser executados por seus usuários como root usando regras sudo.
Responder2
Uma possibilidade, embora algumas implantações de /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.