我想為 USB 隨身碟創建類似“白名單”的內容。我的意思是「拒絕一切不允許的事」。
我知道我應該使用udev
規則:
- 新增至
/etc/udev/rules.d/
規則以拒絕每個 USB 隨身碟 - 添加另一個具有更高編號的規則以允許我想要的
我只想處理 USB 隨身碟。這些規則可以基於 USB 驅動器中的任何資訊。我的意思是供應商 ID、序號。我的意思是我對這個案子沒有任何願望。任何解決方案。
但我不知道應該在規則文件中寫入什麼。你能舉個例子嗎?
UPD。我建立一個包含以下內容的文件:
deck@crunch /etc/udev/rules.d $ cat 90-deny-usbflash.rules
BUS=="usb", OPTIONS+="ignore_device"
據我所知,該資料夾是透過udev
使用監視的inotify
,因此更改應該會立即生效。但沒有應用任何更改。
答案1
您沒有說您是否安裝了其他自動安裝所有驅動器的軟體。我下面的解決方案假設您不這樣做。如果您這樣做,那麼您的問題就不同了:您應該指定它是什麼,以便有人可以建議如何卸載它或控制它。
以下是僅安裝允許的磁碟機的 udev 規則範例(未經測試,但基於我使用的類似規則):
#-- Skip if not an appropriate "sd" device
KERNEL!="sd[b-z]*", GOTO="99_exit"
SUBSYSTEM!="block", GOTO="99_exit"
#-- Handle 'remove' and 'change' events
SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/usr/bin/pumount /dev/%k", GOTO="99_exit"
ACTION=="remove|change", GOTO="99_exit"
#-- Create useful environment variables
SUBSYSTEMS=="usb", ENV{ID_SERIAL}!="?*", IMPORT{builtin}="usb_id"
SUBSYSTEMS=="usb", ENV{ID_FS_LABEL}!="?*", IMPORT{program}="/sbin/blkid -o udev -p %N"
#-- Skip if this is not a filesystem (e.g. if this is the whole drive, not a formatted partition)
ENV{ID_FS_USAGE}!="filesystem", GOTO="99_exit"
#-- Mount only allowed drives:
SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="something_allowed", RUN+="/usr/bin/sudo -u someuser /usr/bin/pmount -t vfat /dev/%k /media/some_name"
SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="other_allowed", RUN+="/usr/bin/sudo -u someuser /usr/bin/pmount -t vfat /dev/%k /media/other_name"
#-- Exit
LABEL="99_exit"
當然,您使用的安裝命令取決於您的偏好。我展示的只是一個例子。
更新:我從你的評論中了解到,你確實安裝了一些可以自動安裝的東西。在我的系統(Debian Wheezy)上,我沒有。我嘗試了你建議的 grep 並得到了不同的結果。在 中/lib/udev/rules.d/80-udisks.rules
,我找到了這段程式碼:
# Mark devices that shouldn't be automounted / autoassembled etc.
#
# Deny all, then punch holes for what looks like physical drives
# (TODO: this heuristic might need some work)
#
ENV{UDISKS_PRESENTATION_NOPOLICY}="1"
KERNEL=="sd*|hd*|sr*|mmcblk*|mspblk*", ENV{DISKS_PRESENTATION_NOPOLICY}="0"
這表明,如果我安裝了自動掛載軟體,它可以由 UDISKS_PRESENTATION_NOPOLICY 環境變數控制。您尚未指定您的發行版,但它顯然有所不同。
答案2
你可以嘗試USB衛士。它在 UDev 和 Linux 核心 USB 授權框架之上實作了 USB 裝置黑名單/白名單。您可以使用 UDev 實現與已經建議的相同的效果,但 USBGuard 是用於該工作的專用工具,並且它有一個規則語言和(可選)GUI 小程式。
由於USB隨身碟通常都有序號,因此在usbguard中使用VID:PID和序號將其列入白名單會像這樣:
allow 1234:5678 serial "123456" with-interface equals { 08:*:* }
allow 1234:5678 serial "abcdef" with-interface equals { 08:*:* }
block
這將允許(授權)連接兩個僅具有大容量儲存介面、VID:PID 或 1234:5678 以及 iSerial 值「123456」或「abcdef」的 USB 裝置。其他一切都會被阻止。
免責聲明:我是該專案的作者。