ディスクのデバイスファイルに読み取り権限を与える

ディスクのデバイスファイルに読み取り権限を与える

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*ddhdparm

答え1

chmod o+r /dev/sda*は非常に危険です。なぜなら、任意のプログラムがディスク全体を読み取ることができるようになるからです (たとえば、/etc/shadowルート パーティションが にある場合は、内のパスワード ハッシュも読み取れますsda)。

これをより安全に行うには、(少なくとも) 2 つの方法があります。

  1. ディスクの読み取りが必要なすべてのユーザーをグループに追加しdiskchmod 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 コマンドも含まれます。ラッパー スクリプトの方がよい解決策かもしれません。

そうでない場合は、書き込みアクセス権を付与するか、sudo ルールを使用してユーザーが root として実行できるラッパー スクリプトを作成する必要があります。

答え2

/dev の一部のデプロイメントではサポートされない可能性がありますが、1 つの可能性として 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 として実行する必要があります。

関連情報