Permissions

為什麼讀取設備需要管理員權限?

  • March 7, 2016

我正在嘗試創建一個備份腳本,將我的拇指驅動器保存為圖像。我打算讓它自動化。我一直看到拇指驅動器列為/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做到——但這會刪除腳本中自動執行的元素。

如果我不修改它,為什麼這個設備需要超級使用者權限?此外,有沒有辦法繞過這個?

為什麼讀取設備需要管理員權限?

首先這裡有幾個問題

  1. mount‘ing 物理儲存設備及其包含的分區。
  2. 訪問和操作上面的文件。

如果文件系統是基於權限的,例如 ext2,3,4,那麼權限是基於每個文件定義的。

至於為什麼您會要求使用者具有特殊的管理員權限來安裝設備,有幾個原因,這些原因更有可能適用於企業類型的情況,而不太可能適用於個人計算——儘管它仍然可能是相關的

  1. 它可以防止讀取濫用程序 一旦安裝了磁碟,整個不受信任的程序集合現在可能可供執行,這可能會濫用作業系統。如果您正在管理該系統,您可以更有信心,如果臨時使用者無法從自己的磁碟上傳自己的程序,這種情況就不會發生。
  2. 寫入/保存敏感機密數據 如果您有公司機密或系統上的使用者密碼,並且有人可以連接未經授權的儲存設備,他們可以對其進行複制。

您可以通過將整個腳本作為 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和訪問管理組的成員,例如operatoror disk,您可以將受信任的管理員使用者或備份操作使用者放入該組。

在執行 udev 的 GNU/Linux 發行版上,將所有不是磁片或磁帶的50-udev-default.rules塊和 SCSI 設備放入組中,並授予組讀/寫權限,因此一種可能的解決方案是使用或通過將自己添加到該組直接編輯。註銷並重新登錄。/dev``disk``usermod``/etc/group

引用自:https://unix.stackexchange.com/questions/266958