udev(八):实战:使用udevadm修改usb优盘在/dev下的名字

article/2025/9/23 16:34:56

       原创文章,转载请注明出处,谢谢!       
       作者:清林,博客名:
空静渡


       udev的规则的编写,我这里就不说了,大家可以在udev的文档中可以了解,有时间的话我在安排一章在说明udev 的规则了。


      下面是我要做的一个测试,我的系统是ubuntu9.10,我有一个usb优盘,是kinston的4G的优盘。

       运行:

            sudo fdisk -l

       看下我的优盘的情况,如下图:


      


       大家可以看到,我的usb设备是sdc,里面有一个分区是sdc4。

       运行 ls  /dev -l可以看到我的usb的优盘的设备有sdc和sdc4。


       这里说说udev的规则,用户自定义的规则一般放在/etc/udev/rules.d目录下,里面有很多规则都是以数字开头的,数字越小就表示规则越优先。

       我的/etc/udev/rules.d目录下有这几个规则文件:

            10-vboxdrv.rules  70-persistent-cd.rules  70-persistent-net.rules  README


      一般,我们可以在这个目录里新建一个规则文件作为我们自己使用的规则文件:10-local.rules,如果有这个文件就不用建了。


     现在我所要做的就是在/dev 目录下更改我的usb 优盘的设备名,就是说由/dev/sdc4 改名成/dev/kinstonusb 并为了演示增加了一个链接到/dev/kinstonusb ,这个链接为/dev/kinstonusb_link


     好了,我们怎么来写这个规则呢,我们要记住的一点是我们写的这些规则可以唯一确定我们的设备,不然系统会认不出来的。

    

     udev 的规则文件里定义了很多变量,如KERNELS SUBSYSTEMS DRIVERS 等等,我们可以用这些变量中的几个来确定我们的设备,并修改我们其中的NAME SYMLINK 变量,这样我们就可以改变我们的设备在/dev 目录下的名字和链接了。


     其实,我们并不真的需要很了解这些变量,我们只需要知道几个就可以了,而且我们在写这些规则文件的时候也不需要记住怎么写,很方便,下面看我怎么一步一步做。


     首先,我们来看下我们都有什么块设备:

     运行 ls /sys/block

     loop0 loop2 loop4 loop6 ram0 ram10 ram12 ram14 ram2 ram4 ram6 ram8 sda sdc sde

     loop1 loop3 loop5 loop7 ram1 ram11 ram13 ram15 ram3 ram5 ram7 ram9 sdb sdd

     家看到我的系统里有 sda sdb sdc sdd sde 5 个设备。我们可以用下面这个命令来查看我的 usb 优盘的信息:

    

     udevadm info -a -p /sys/block/sdc


U devadm info starts with the device specified by the devpath and then

walks up the chain of parent devices. It prints for every device

found, all possible attributes in the udev rules key format.

A rule to match, can be composed by the attributes of the device

and the attributes from one single parent device.

looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/host5/target5:0:0/5:0:0:0/block/sdc':

KERNEL=="sdc"

SUBSYSTEM=="block"

DRIVER==""

ATTR{range}=="16"

ATTR{ext_range}=="256"

ATTR{removable}=="1"

ATTR{ro}=="0"

ATTR{size}=="7830528"

ATTR{alignment_offset}=="0"

ATTR{capability}=="53"

ATTR{stat}==" 48 966 1714 344 0 0 0 0 0 328 344"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/host5/target5:0:0/5:0:0:0':

KERNELS=="5:0:0:0"

SUBSYSTEMS=="scsi"

DRIVERS=="sd"

ATTRS{device_blocked}=="0"

..........................


      上面省略了后面的信息信息,大家都可以看到,这些信息就是我们需要定义我们规则文件里的变量的信息。

    

     这些信息是以最里一层的一层一层向外显示的信息,如上,第一部分是 sdc 的信息,第二部分是 sdc 父目录的信息,即它的上一层设备的信息等等。

 

     但这里我们不是需要 sdc 的信息,我们需要的是 sdc4 的信息,而 /sys/block 目录下并没有 sdc4 这一项,那么我们怎么看到 sdc4 分区的信息呢。

 

     运行下面的命令可以得到 sdc4 的设备所在。

     udevadm info -q path -n /dev/sdc4

    

     我的输出如下:

     /devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/host5/target5:0:0/5:0:0:0/block/sdc/sdc4

 

     那么我们就可以用上面的命令来得到 sdc4 的信息了,运行如下的命令:

     udevadm info -a -p $(udevadm info -q path -n /dev/sdc4)

 

     我机子的输出如下(省略了一部分):

 

Udevadm info starts with the device specified by the devpath and then

walks up the chain of parent devices. It prints for every device

found, all possible attributes in the udev rules key format.

A rule to match, can be composed by the attributes of the device

and the attributes from one single parent device.

looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/host5/target5:0:0/5:0:0:0/block/sdc/sdc4':

KERNEL=="sdc4"

SUBSYSTEM=="block"

DRIVER==""

ATTR{partition}=="4"

ATTR{start}=="63"

ATTR{size}=="7830465"

ATTR{alignment_offset}=="0"

ATTR{stat}==" 35 910 1162 280 0 0 0 0 0 272 280"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/host5/target5:0:0/5:0:0:0/block/sdc':

KERNELS=="sdc"

SUBSYSTEMS=="block"

..........................


     好,我们就可以编写我们的 /etc/udev/rules.d/10-local.rules 文件了。

     sudo vim /etc/udev/rules.d/10-local.rules

 

     在里面加入这几个变量信息,如下。

     KERNEL=="sdc4", SUBSYSTEMS=="block", NAME+="kinstonusb", SYMLINK+="kinstonusb_link"


     上面的 KERNEL=="sdc4", SUBSYSTEMS=="block" 我们可以根据上面的输出直接拷贝过去的。我们保存这个文件。

 

     一般我们要使这个规则文件生效,要热插拔我们的设备以产生一个事件或在设备中的 event 文件中增加信息以达到发送事件的目的来更新我们的 udev 规则,但这里有个更加方便的方法,我们可以运行下面这个命令。

 

     sudo udevadm test /sys/class/block/sdc4


      这样我们就更新了我们的规则。


     好,我们来看下我们的 /dev 里的情况,如下图:



     在看下我们的sdc,如下图:


     我们的sdc4不见了,即是我们命名我们的sdc4为kinstonusb了,而且还有个kinstonusb_link链接到它,以后我们就可用/dev/kinstonusb或/dev/kinstonusb_link来操作我们的优盘而不是/dev/sdc4了。


详细:可以参考udev的官方文档。


http://chatgpt.dhexx.cn/article/PXdqo7At.shtml

相关文章

Linux下udev规则详解

如何运用udev?编写udev规则?通过udev更好的管理Linux设备? udev是什么? udev 是 Linux2.6 内核里的一个功能,它替代了原来的 devfs,成为当前 Linux 默认的设备管理工具。udev 以守护进程的形式运行,通过侦…

Udev设备管理器

udev 引入 在2.4内核中 引入了 devfs,他支持设备节点的动态创建。devfs提供了在内存中的文件系统中创建设备节点的能力。设备驱动程序能够自主的管理自己的设备文件。而命名节点的任务还是落到了设备驱动程序头上。但是,设备命名策略是可管理的&#xf…

linux下udev详解

一.udev简介 udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。udev在用户空间运行,而不在内核空间 运行。它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备…

[2020.1.14][udev] udev介绍

1 什么是udev udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。 设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。 设备访问控制udev:user …

LINUX下 Udev详解

如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来&#xf…

wmic bug

今天尝试用wmic进行横向移动,老是出现 , - Alias not found,再三确认不是命令的问题,尝试修改域控用户的密码后成功解决,难道这时wmic的bug??? 猜测是因为密码种含有 , . 这样的符号导致命令产生…

wmic命令学习

我目前知道wmic可以查询进程,还可以查询服务。查询进程使用wmic process,如果想知道进程的名字、进程号、执行文件路径可以通过get来获取,还可以根据where筛选进程进行查询。 wmic process get name, processid,executablepath 查询主机进程信息&#xf…

Windows 命令 WMIC 使用详解

WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具) ,提供了从命令行接口和批命令脚本执行系统管理的支持。在WMIC出现之前,如果要管理WMI系统,必须使用一些专门的WMI应用,例如S…

wmic java_Java执行wmic命令获取系统环境变量

1.首先编写文件setenv.bat设置系统环境变量: echo %cd% set framework_home%cd% echo %framework_home% wmic ENVIRONMENT create name"framework_home",username"",VariableValue"%framework_home%" Note: 此处假设framework_home为…

wmic命令

友情链接:wmic命令 目录 一、如何获取帮助文档 (1)wmic /? (2)wmic nic /? (3)wmic nic get ##获取网卡所有信息,如下只列出部分列 (4)信息筛…

内网渗透 | powershellwmic详解

文章目录 引子PowerShell0x001基本概念0x002命令格式0x003基本使用0x004常用命令0x005powershell脚本0x006参考文章 WMIC0x001基本概念0x002命令格式0x003常用命令1、目标系统相关2、用户管理 0x004参考文章 引子 之前在内网渗透,免杀中到处能看到powershell和wmic的…

wmic横向

WMI,是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操…

【转】wmic命令

友情链接:wmic命令 目录 一、如何获取帮助文档 (1)wmic /? (2)wmic nic /? (3)wmic nic get ##获取网卡所有信息,如下只列出部分列 (4)信息筛选 二、…

WMIC学习笔记

wmic 是什么 wmic 是计算机管理工具,提供给管理员以命令行的方式管理计算机。在 win10 已经弃用,不过还能用。 执行模式 WMIC 有两种执行模式:交互模式(Interactive mode)和非交互模式(Non-Interactive mode)。 在命令提示符或“运行”窗口…

信息收集--wmic命令

后渗透信息收集之wmic命令的一些使用方法 前言一、关于wmic二、wmic的简单使用三、以进程为例展现wmic的使用四、关于powershell的Get-Wmi 对象 前言 wmic和cmd一样在所有的windows版本中都存在,同时wmic有很多cmd下不方便使用的部分 一、关于wmic WMI命令行(WMIC)实…

Wmic

WMIC(Windows Management InstrumentationCommand Line) windows除了cmd ,powershell以外另一个更为强大的命令执行shell: windows最令网管诟病的地方就是命令行没有unix和linux强大。但这种情况正在不断改观,windows命令行也越来…

比CMD更强大的命令行:WMIC后渗透利用(系统命令)

写在前面的话 在这篇文章中,我们将讨论如何在攻击的后渗透利用阶段使用WMIC(Windows Management InstrumentationCommand Line)。当攻击者在远程PC上拿到meterpreter会话之后,他们就可以枚举大量的系统信息,并利用WMI…

“教务管理系统”ER模型

将ER模型转换成逻辑数据模型 ⑴学生表(学号,姓名,性别,出生日期,专业,籍贯,联系电话,班级编号); ⑵课程表(课程编号,课程名称&#…

【MySQL必知必会】 范式 | ER模型

范式 第一范式 第一范式要求:所有的字段都是基本数据字段,不可进一步拆分。 第二范式 第二范式:在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的。而且所有字段,都必须完…

ER模型、ER分析介绍

关注公众号【程猿薇茑】 【仅需一次订阅,作者所有专栏都能看】 推荐【消息队列Kafka】https://bigbird.blog.csdn.net/article/details/108770504 推荐【大数据Flink】https://blog.csdn.net/hellozpc/article/details/109413465 推荐【SpringBoot】https://blog.c…