Shell-Script

我需要做什麼才能允許 shell 腳本在沒有 sudo 的情況下執行“mount”和“umount”?

  • May 18, 2018

上下文:我正在使用 Python 和 Shell 腳本嘗試創建一個簡單的應用程序以使用 dmenu 執行來掛載/解除安裝驅動器。

我目前的問題是掛載驅動器的命令在shell腳本文件中,並且該命令需要root權限才能執行。

出問題的部分正是這個:

mount ${DRIVE} ${DESTINATION}

我已經做了一些研究,對“在沒有 sudo 的情況下執行掛載”問題的大多數答案都指向編輯 fstab 文件並手動添加磁碟。

我想知道是否有另一種方法,而不需要讓使用者編輯系統文件/配置。或者至少讓這個配置自動完成。

這個問題的更簡單和更安全的答案是使用udisks2而不是mount直接使用。它由 Thunar 等文件管理器使用,不需要 root 權限。該工具將驅動器安裝在/run/media/<username>/.

要安裝驅動器,請udisksctl使用mount

udisksctl mount -b /dev/sdbX

用於unmount解除安裝。

您需要一些方法來限制使用者可以使用的掛載命令的可能參數,否則惡意使用者可以通過掛載某些東西來輕鬆接管系統,/etc以便系統使用攻擊者的版本/etc/shadow而不是真實版本。效果就像攻擊者必須用攻擊者已知的密碼臨時替換任何和所有使用者的密碼。

如果使用者只需要將一組固定的文件系統掛載/解除安裝到一組固定的掛載點,則只需將它們添加到/etc/fstab使用userorusers掛載選項可能是一個有效的解決方案。

如果您無法預測使用者需要安裝的設備名稱,或者使用者需要能夠將其安裝到他/她可以訪問的任意位置,那麼您的問題就更難了。也許只允許使用者將文件系統掛載到固定位置,然後教使用者使用ln -s /actual/mount/point /desired/location創建符號連結以使文件出現在需要的位置?

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