為什麼讀取設備需要管理員權限?
我正在嘗試創建一個備份腳本,將我的拇指驅動器保存為圖像。我打算讓它自動化。我一直看到拇指驅動器列為
/dev/sdb
,並創建了一個腳本,將其保存為 gzip 壓縮的 tarball。在嘗試通過 複製它時
dd
,我注意到了這個錯誤:dd: failed to open ‘/dev/sdb’: Permission denied
我想知道這是否只是僥倖,所以我嘗試通過管道
cat
傳遞命令dd
並得到這個錯誤:cat: /dev/sdb: Permission denied 0+0 records in 0+0 records out 0 bytes (0 B) copied, 0.000620078 s, 0.0 kB/s
當然,因為我是超級使用者,所以我可以
sudo
做到——但這會刪除腳本中自動執行的元素。如果我不修改它,為什麼這個設備需要超級使用者權限?此外,有沒有辦法繞過這個?
為什麼讀取設備需要管理員權限?
首先這裡有幾個問題
mount
‘ing 物理儲存設備及其包含的分區。- 訪問和操作上面的文件。
如果文件系統是基於權限的,例如 ext2,3,4,那麼權限是基於每個文件定義的。
至於為什麼您會要求使用者具有特殊的管理員權限來安裝設備,有幾個原因,這些原因更有可能適用於企業類型的情況,而不太可能適用於個人計算——儘管它仍然可能是相關的
- 它可以防止讀取濫用程序 一旦安裝了磁碟,整個不受信任的程序集合現在可能可供執行,這可能會濫用作業系統。如果您正在管理該系統,您可以更有信心,如果臨時使用者無法從自己的磁碟上傳自己的程序,這種情況就不會發生。
- 寫入/保存敏感機密數據 如果您有公司機密或系統上的使用者密碼,並且有人可以連接未經授權的儲存設備,他們可以對其進行複制。
您可以通過將整個腳本作為 sudo 執行,然後使用
sudo
切換回腳本內的普通使用者來處理您不想以 root 身份執行的命令(是的,您可以這樣做)來解決 sudo 問題,例如*文件:*腳本.sh
#!/bin/sh # this dd command now works dd if=<source> of=<target> bs=<byte size> # normal cammand you want to run as "mathmaniac" user sudo -u "MathManiac" bash -c "touch foo.bar"
所以你然後執行這個腳本:
sudo ./script.sh
另一種快速而骯髒但通常不推薦的方法是將 sudo 放在腳本中的命令前面,當解釋器遇到 sudo 時,
sudo
它將停止腳本執行並在繼續之前詢問您的 sudo 密碼。
Unix/Linux 系統是多使用者的。任何對原始儲存設備具有讀取權限的人都可以讀取其中的所有文件,無論誰擁有這些文件及其權限(當然,以加密的文件系統為模)。因此,傳統上,原始設備只允許訪問
root
和訪問管理組的成員,例如operator
ordisk
,您可以將受信任的管理員使用者或備份操作使用者放入該組。在執行 udev 的 GNU/Linux 發行版上,將所有不是磁片或磁帶的
50-udev-default.rules
塊和 SCSI 設備放入組中,並授予組讀/寫權限,因此一種可能的解決方案是使用或通過將自己添加到該組直接編輯。註銷並重新登錄。/dev``disk``usermod``/etc/group