
成一个或多个匹配部分和赋值部分。匹配部分用匹配专用的关键字来表示,相应的赋值部分用赋值专用的
关键字来表示。匹配关键字包括:ACTION(行为)、KERNEL(匹配内核设备名)、BUS(匹配总线类
型)、SUBSYSTEM(匹配子系统名)、ATTR(属性)等,赋值关键字包括:NAME(创建的设备文件
名)、SYMLINK(符号创建链接名)、OWNER(设置设备的所有者)、GROUP(设置设备的组)、
IMPORT(调用外部程序)、MODE(节点访问权限)等。
例如,如下规则:
SUBSYSTEM=="net"
, ACTION=="add"
, DRIVERS==" *"
, ATTR{address}=="08:00:27:35:be:ff"
,
ATTR{dev_id}=="0x0"
, ATTR{type}=="1"
, KERNEL=="eth*"
, NAME="eth1"
其中的“匹配”部分包括SUBSYSTEM、ACTION、ATTR、KERNEL等,而“赋值”部分有一项,是
NAME。这个规则的意思是:当系统中出现的新硬件属于net子系统范畴,系统对该硬件采取的动作
是“add”这个硬件,且这个硬件的“address”属性信息等于“08:00:27:35:be:ff”
,
“dev_id”属性等
于“0x0”
、
“type”属性为1等,此时,对这个硬件在udev层次施行的动作是创建/dev/eth1。
通过一个简单的例子可以看出udev和devfs在命名方面的差异。如果系统中有两个USB打印机,一个可
能被称为/dev/usb/lp0,另外一个便是/dev/usb/lp1。但是到底哪个文件对应哪个打印机是无法确定的,
lp0、lp1和实际的设备没有一一对应的关系,映射关系会因设备发现的顺序、打印机本身关闭等而不确
定。因此,理想的方式是两个打印机应该采用基于它们的序列号或者其他标识信息的办法来进行确定的映
射,devfs无法做到这一点,udev却可以做到。使用如下规则:
SUBSYSTEM="usb"
,ATTR{serial}="HXOLL0012202323480"
,NAME="lp_epson"
,SYMLINK+="printers/
epson_stylus"
该规则中的匹配项目有SUBSYSTEM和ATTR,赋值项目为NAME和SYMLINK,它意味着当一台USB
打印机的序列号为“HXOLL0012202323480”时,创建/dev/lp_epson文件,并同时创建一个符号链
接/dev/printers/epson_styles。序列号为“HXOLL0012202323480”的USB打印机不管何时被插入,对应的设
备名都是/dev/lp_epson,而devfs显然无法实现设备的这种固定命名。
udev规则的写法非常灵活,在匹配部分,可以通过“*”
、
“?”
、[a~c]、[1~9]等shell通配符来灵活匹配
多个项目。
*类似于shell中的*通配符,代替任意长度的任意字符串,?代替一个字符。此外,%k就是
KERNEL,%n则是设备的KERNEL序号(如存储设备的分区号)。
1. 通过udev规则:创建udev规则文件来控制USB设备的访问,例如禁止特定设备或者实施USB驱动程序的自动装载。2. 使用usbguard:USBGuard是一种开源软件,可以根据标识符和规则来管理USB设备的访问,可以有效防止未知的USB设备被连接到系统。
3. 通过iptables:可以使用iptables来限制USB设备的流量,例如可以设置一组规则来阻止不同类型的USB设备访问系统。
4. 通过usbkill:usbkill是一款开源的Linux安全工具,可以监控特定的USB设备,当检测到特定的USB设备连接到系统时,可以立即停止系统的运行。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)