Si para fines de evaluación comparativa uno tiene que usar hdparm
o dd
directamente en el dispositivo, me pregunto cuál sería la forma correcta de hacerlo de manera segura.
Digamos que el disco en cuestión es /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
realmente no quieroescribirbajo sda
ninguna circunstancia. Entonces, ¿sería recomendable hacerlo chmod o+r /dev/sda*
y ejecutarlo dd
como hdparm
un usuario normal?
Respuesta1
chmod o+r /dev/sda*
es bastante peligroso, ya que permite que cualquier programa lea todo el disco (incluidos, por ejemplo, los hashes de contraseña en /etc/shadow
, si su partición raíz está activada sda
).
Hay (al menos) dos formas de hacer esto de forma más segura:
- Agregue todos los usuarios que necesiten leer el disco al
disk
grupo y ejecútelochmod g-w /dev/sda*
para evitar el acceso de escritura para ese grupo. - Cambie el grupo de
/dev/sda*
a un grupo que solo contenga los usuarios que necesitan leer el disco, por ejemplo,chgrp my-benchmarkers /dev/sda*
y evite el acceso de escritura para este grupo conchmod
.
Tenga en cuenta que los cambios de grupo y permiso en los nodos del dispositivo /dev
son solo temporales hasta que se desconecte el dispositivo en cuestión o se reinicie la computadora.
Un problema podría ser que hdparm
necesite acceso de escritura para la mayor parte de su funcionalidad. Debes verificar si todo lo que deseas funciona con acceso de solo lectura.
EDITAR:Parece que hdparm
no necesita acceso de escritura. Más bien necesita elCAP_SYS_RAWIO
capacidadpara realizar la mayoría de ioctls. Puede utilizar setcap cap_sys_rawio+ep /sbin/hdparm
para otorgar esta capacidad a hdparm. Tenga en cuenta que esto permitealguienquién puede ejecutar hdparm
y tiene al menos acceso de lectura a un archivo de dispositivo para hacer prácticamente cualquier cosa hdparm
que pueda hacer en ese dispositivo, incluidos --write-sector
todos los demás comandos hdparm que la página de manual describe como "MUY PELIGROSO", "EXTREMADAMENTE PELIGROSO" o "EXCEPCIONALMENTE PELIGROSO". Los scripts contenedores podrían ser una mejor solución.
De lo contrario, debe otorgar acceso de escritura o escribir scripts contenedores que sus usuarios puedan ejecutar como root usando reglas sudo.
Respuesta2
Una posibilidad, aunque es posible que algunas implementaciones de /dev no lo admitan, sería utilizar una ACL. Ejemplo:
$ 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
Sin embargo, AFAIK hdparm -t
debe ejecutarse como root.