Предоставление разрешений на чтение файла устройства на диске

Предоставление разрешений на чтение файла устройства на диске

Если для целей сравнительного анализа необходимо использовать hdparmили ddнепосредственно на устройстве, интересно, как правильно и безопасно это сделать.

Допустим, рассматриваемый диск /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

Я действительно не хочуписатьни sdaпри каких обстоятельствах. Так что было бы целесообразно сделать chmod o+r /dev/sda*и запустить ddили hdparmна нем как обычный пользователь?

решение1

chmod o+r /dev/sda*довольно опасно, так как позволяет любой программе читать весь ваш диск (включая, например, хэши паролей в /etc/shadow, если ваш корневой раздел находится на sda)!

Есть (как минимум) два способа сделать это более безопасно:

  1. Добавьте в группу всех пользователей, которым необходимо читать диск, diskи запустите chmod g-w /dev/sda*запрет на запись для этой группы.
  2. Измените группу /dev/sda*на группу, которая содержит только тех пользователей, которым необходимо читать диск, например, chgrp my-benchmarkers /dev/sda*и запретите доступ на запись для этой группы с помощью chmod.

Обратите внимание, что изменения групп и разрешений на узлах устройств /devносят временный характер до тех пор, пока соответствующее устройство не будет отключено или компьютер не будет перезагружен.

Одной из проблем может быть то, что hdparmдля большинства функций требуется доступ на запись. Вы должны проверить, работает ли все, что вы хотите, с доступом только для чтения.

РЕДАКТИРОВАТЬ:Похоже, что hdparmне нужен доступ на запись. Скорее нуженCAP_SYS_RAWIO способностьдля выполнения большинства ioctl. Вы можете использовать setcap cap_sys_rawio+ep /sbin/hdparm, чтобы дать эту возможность hdparm. Обратите внимание, что это позволяетлюбойкто может выполнять hdparmи имеет по крайней мере доступ на чтение к файлу устройства, чтобы сделать практически все, hdparmчто может сделать на этом устройстве, включая --write-sectorи все другие команды hdparm, которые страница руководства описывает как "ОЧЕНЬ ОПАСНЫЕ", "КРАЙНЕ ОПАСНЫЕ" или "ИСКЛЮЧИТЕЛЬНО ОПАСНЫЕ". Скрипты-обертки могут быть лучшим решением.

В противном случае вам придется либо предоставить доступ на запись, либо написать скрипты-оболочки, которые ваши пользователи смогут выполнять как root, используя правила sudo.

решение2

Одной из возможностей, хотя некоторые развертывания /dev могут не поддерживать это, было бы использование ACL. Пример:

$ 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

Насколько мне известно, запускать его hdparm -tнужно от имени root.

Связанный контент