網站搜尋

如何在 Ubuntu 22.04 中停用 USB 系統或某些連接埠


本教學課程展示如何在 Ubuntu 中停用 USB(整個子系統或某些 USB 連接埠)。

對於伺服器或生產計算機,出於資料隱私、病毒防護和其他安全原因,停用 USB 非常有用。對於 Ubuntu 和大多數其他 Linux,我將向您展示如何透過 3 種方式停用 USB:

  • 停用整個 USB 子系統
  • 僅停用 USB 儲存 - 僅停用對 USB 隨身碟和其他儲存裝置的存取。
  • 停用特定 USB 連接埠

選項 1:在 Ubuntu 和其他 Linux 中停用 USB 子系統

Linux 核心有一個參數可以停用整個 USB 子系統。當使用核心參數啟動時,USB 鍵盤、滑鼠、隨身碟和內建 USB 裝置(例如網路攝影機、指紋辨識器、藍牙)將全部停用。而且,USB 連接埠沒有電源可以充電。

這對於伺服器安全來說非常有用,但您必須使用遠端登入或 PS2 鍵盤和滑鼠才能與 Linux 機器互動。並且,在 Grub 選單項目中啟動核心之前,USB 仍然可以工作。如果您想在按下電源按鈕時停用它,請在 BIOS 設定中進行設定。

1. 首先,連接到 Ubuntu 伺服器,或在 Ubuntu 桌面上按 Ctrl+Alt+T 開啟終端。開啟後,執行命令編輯 Grub 引導程式的設定檔:

sudo nano /etc/default/grub

對於桌面版本,對於Ubuntu 22.04 及更早版本的GNOME,您可以將nano 替換為gedit,對於23.10 + 版本,您可以將 gnome-text-editor 替換為nano使用GNOME、pluma(適用於MATE)或mousepad(適用於XFCE)。

檔案開啟時,將 usbcore.nousb 加到 GRUB_CMDLINE_LINUX_DEFAULT 的值。然後按Ctrl+S儲存,按Ctrl+X退出nano文字編輯器。

2. 接下來,執行指令來更新 grub 設定:

sudo update-grub

注意:此命令可能因其他 Linux 而異。完成後,重新啟動電腦即可應用!

對於安裝了 Grub-Customizer 的 Ubuntu 桌面,用戶還可以啟動圖形應用程序,並透過導航到「常規設定」選項卡添加核心參數。

選項 2:僅停用 USB 儲存設備

透過封鎖核心模組,使用者可以選擇僅停用 USB 隨身碟和其他 USB 儲存設備,而讓鍵盤、滑鼠和其他內建 USB 裝置仍然運作。

1. 首先,開啟終端機(Ctrl+Alt+T)或連接到伺服器,然後執行命令來建立和編輯設定檔:

sudo nano /etc/modprobe.d/blacklist-usb-storage.conf

此外,您可以將 nano 替換為您最喜歡的文字編輯器。

blacklist usb_storage
blacklist uas

然後按 Ctrl+S 儲存,按 Ctrl+X 退出 Nano 文字編輯器。

2. 之後,執行指令來更新 initramfs。

sudo update-initramfs -u

最後,重新啟動您的機器。您的系統將在啟動時讀取blacklist-usb-storage.conf 設定文件,並阻止載入2 個核心模組(usb_storage 和uas)用於存取 USB 儲存裝置。

選項 3:停用特定 USB 連接埠

在 /sys/bus/usb/devices 目錄下,有一個子資料夾列表,其中包含用於配置 USB 連接埠和連接裝置的檔案。透過設定始終掛起或使用usbguard服務,使用者可以「停用」對應的USB連接埠。

步驟 1: 找到指定 USB 連接埠的 sys 裝置資料夾

/sys/bus/usb/devices 目錄有許多子資料夾,您必須先找出哪個子資料夾適合您的 USB 連接埠。

1.首先,將USB設備(鍵盤、滑鼠或隨身碟)插入USB端口,這樣它會自動在該目錄下產生相應的子資料夾。

2. 然後開啟終端機(Ctrl+Alt+T)並執行指令列出所有 USB 裝置:

lsusb

並且,運行下面的單一命令來列出子資料夾及其已處理的 ID。

cd /sys/bus/usb/devices && for d in *; do if [ -f $d/idProduct ]; then prod=$( cat $d/idProduct ); vend=$( cat $d/idVendor ); echo Device: "${d}", ID: "${vend}:${prod}"; fi; done

在 lsusb 指令輸出中,您可以找到已連接的 USB 裝置的 ID。透過第二個命令輸出,您可以使用 ID 來尋找設備資料夾名稱(例如,1-1、1-2、usb1、usb2,...)。

就我而言(請參閱下面的螢幕截圖),我的筆記型電腦上只有 2 個 USB 連接埠。 “1-1”子資料夾是1c4f:0034,即連接滑鼠的USB連接埠。其中,「1-2」子資料夾是針對3151:3020,連接無線鍵盤的USB端口

步驟 2:(選購)自動掛起 USB 設備

在最後一步 1 中,我找到了 2 個 USB 連接埠對應的子資料夾(1-1 和 1-2)。

作為選擇,您可以設定自動暫停某個USB端口,例如1-1,並將延遲設為0毫秒,這樣它就會一直暫停。

echo 0 | sudo tee /sys/bus/usb/devices/1-1/power/autosuspend_delay_ms
echo "auto" | sudo tee /sys/bus/usb/devices/1-1/power/control

但是,此變更僅在您將裝置拔出並重新插入 USB 連接埠後才有效。因為,一旦拔掉USB設備,對應的config資料夾(本例的1-1)就會消失。當您再次插入時,會再次自動建立該資料夾,但所有設定都會重設。

這表示此方法僅在 USB 裝置保持連接到連接埠時才有效。除非您設法在每個插件上自動執行上述 2 個命令。

步驟2:(更好的選擇)使用USBGuard

大多數 Linux 系統儲存庫中都包含一個 usbguard 軟體包。它在背景運行 systemd 服務來實現基本的 USB 白名單和黑名單功能。

1. 首先,打開終端機並執行命令來安裝軟體包:

sudo apt install usbguard

2. 然後,執行命令編輯該服務的設定檔:

sudo nano /etc/usbguard/rules.conf

對於GNOME,將nano 替換為gedit(22.04 及更早版本)、gnome-text-editor(23.10 及更高版本)、mousepad 用於 XFCE,pluma 用於 MATE,...。

當文件打開時,它應該包含一些預設規則的行。 如果為空,則關閉檔案。稍等片刻讓它自動產生規則,然後重新編輯。

3. 在編輯檔案之前,最好先複製預設內容。因此,您可以輕鬆恢復更改!

檔案開啟後,刪除特定 USB 連接埠/裝置的行(透過 ID、名稱等進行識別),最後新增一行 block via-port “1-1”(更改 '1 -1' 相應)以停用該USB 連接埠。

4.最後,重新啟動服務。

systemctl restart usbguard.service

並且,更改將在稍後套用。

若要撤銷此更改,請使用指令停止服務,然後卸載 usbguard:

sudo systemctl disable --now usbguard.service
sudo systemctl stop usbguard-dbus.service
sudo systemctl mask usbguard-dbus.service
sudo apt remove --purge usbguard

最後,刪除/etc目錄下的設定檔:

sudo rm -rf /etc/usbguard/

相關文章