授予磁碟設備檔案讀取權限

授予磁碟設備檔案讀取權限

如果出於基準測試目的,必須使用hdparmdd直接在設備上使用,我想知道安全地執行此操作的正確方法是什麼。

假設有問題的磁碟是/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/hdparmhdparm 來提供此功能。請注意,這允許任何人誰可以執行hdparm並且至少具有對設備文件的讀取訪問權限,以執行hdparm該設備上幾乎可以執行的任何操作,包括--write-sector手冊頁描述為“非常危險”、“極其危險”或“異常危險”的所有其他hdparm命令。包裝腳本可能是更好的解決方案。

如果沒有,您必須授予寫入存取權限,或者編寫包裝器腳本,這些腳本可以由您的使用者使用 sudo 規則以 root 身分執行。

答案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

不過, AFAIKhdparm -t需要以 root 身分運作。

相關內容