Linux

將設備文件公開給在非特權使用者帳戶上執行的使用者區應用程序的標準方法?

  • January 16, 2013

我剛剛完成了我用 C 編寫的Linux 核心模組的第一個版本。該模組創建了一個設備文件 ( /dev/wn0),該文件控制帶有三個 LED 燈的 USB 設備。例如,以 root 身份執行,我可以這樣做:

echo "#ff0000" >/dev/wn0

…設備會發出鮮紅色的光。

我的問題是我希望非特權使用者能夠訪問設備(通過將數據寫入/dev/wn0)。有沒有標準的方法來做到這一點?是否像更改/dev/wn0文件的權限一樣簡單?這會產生安全問題嗎?

好的,我看到了一些可能性:

  • 最快的方法,POSIX 權限和所有權的全部要點:您希望某人能夠讀取和/或寫入,您相應地設置權限。只需將這些人放在一個組中,並將設備所有權更改為該組,授予該組寫入權限。如果您由 管理,您可能必須將其放入udev規則中。這就是一些工具所做的,例如 bluez 這樣做是為了讓使用者能夠使用藍牙,或者至少這是我的發行版中使用的方法,除非我嘗試使用“ConsoleKit”。/dev``udev
  • 如果設備很簡單,讓每個人都習慣沒有問題,就讓每個人在上面寫字。
  • 編寫一個守護程序,它以可以在設備上寫入的某個使用者身份啟動,通過更改其 UID 來獲取設備並放棄其特權,然後通過例如 TCP 處理來自任何使用者的請求。
  • 為設備編寫一個小二進製文件,即setuid某些使用者可以在設備上寫入並讓使用者使用它來寫入設備。這就是它的mount作用,它是setuidroot,因此普通使用者可以在/etc/fstab允許的情況下掛載文件系統。

只要您同意這些使用者能夠使用該設備,它就不會產生任何*額外的安全問題。*當然,任何有權訪問該設備的人都可以利用該模組中的任何漏洞,但無論您如何讓人們訪問它,這都是可能的。如果您編寫守護程序,則可以利用它。也許最好保持簡單並確保您的程式碼不易受到攻擊。

我想說沒有單一的標準方法可以做到這一點——UNIX 系統的某些部分可以做到這一點,並且每個部分都以最方便的方式來解決正在解決的問題。

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