您的位置:首页 > 运维架构 > Linux

Linux下自动格式化插入的U盘和另外两则案例

2011-04-13 22:06 274 查看
U盘能方便我们共享数据,但你是不是有时候害怕别人随便在你的电脑上拷贝私密的数据啊,呵呵。下面我就告诉你一个比较缺德的方法,来防止别人随便用U盘从你的电脑上偷偷的拷贝数据。

使用UDEV机制,让插入的U盘自动格式化。
在/etc/udev/rules.d/目录下,新建一个75-usb.rules的文件,当然,这个文件名中的数字和usb可以换成其他的,但rules这个后缀一定不要变。
内容如下:
BUS=="usb", ACTION=="add", DIRVER=="usb-storage", NAME="xiaosu", RUN="/sbin/mkfs.vfat /dev/xiaosu"

意思就是,如果插入的USB设备是存储设备,就在/dev下建立的节点就叫xiaosu,然后用mkfs.vfat这个命令来格式化它。
效果如下:
我们先前的U盘




把这个配置文件保存之后,U盘拔出再插入:





我们发现U盘里面已经没有任何东西了。

你可能会疑问了:这样不是把所有插入的U盘都给格式化了吗,如果我不想让系统格式化我自己的U盘,而只是格式化别人的U盘呢?
这样好办,我们在这个配置文件中加入一条规则,判断这个设备是不是属于你。
首先将不想被格式化的U盘插入,我已我的8G的U盘为例:

首先把U盘中的数据备份一下,然后将U盘插入,使用mount命令,可以知道我的U盘被识别为了/dev/sdb4,截图如下





现在我探测一下我的U盘的序列号之类的能确保U盘身份唯一性的信息。

使用如下命令:
udevinfo -a -p $(udevinfo -q path -n /dev/sdb) |grep serial

当然,这里的sdb要换成你对应的信息。

截图如下:



这里发现,有两个serial
我们用udevinfo -a -p $(udevinfo -q path -n /dev/sdb) 这个命令,仔细查看信息,发现:
第一个serial对应的是product是USB DISK
截图如下:





第二个serial对应的product是 HOST Controller

截图如下:




我们修改配置文件为:

BUS=="usb", ACTION=="add", DIRVER=="usb-storage", NAME="xiaosu", SYSFS{serial}!="07A71A002345111E", SYSFS{serial}!="0000:00:1d.7", RUN="/sbin/mkfs.ext3"

这一行的意思就是:
如果插入了USB的存储设备,先把建立的节点重命名为xiaosu,然后检测一下这个设备的序列号,如果不等于这两个,就格式化它。
这两个serial都要用到!少一个都不行,。并且需要注意的是,这里的序列号要改成你的U盘的序列好。

说实话,这样做确实有些缺德。。。。。并且,这样做对系统还有一定的风险,比如说哪一天,你拿着一个其他人的有重要数据的U盘,一不小心给忘记了,就插入了,然后就悲剧了。。。。。。。。

现在我们修改一下这个配置文件,不要格式化别人的U盘了,我们只是让系统不挂载它就是了。这样,别人插入U盘之后,发现系统一直没有反应,就会怀疑是USB接口损坏或者其他原因,就作罢了。
我们把配置文件修改为:

BUS=="usb", ACTION=="add", DIRVER=="usb-storage", NAME="xiaosu", SYSFS{serial}!="07A71A002345111E", SYSFS{serial}!="0000:00:1d.7", RUN="/bin/rm -f /dev/xiaosu"

也就是把最后面的RUN命令改为/bin/rm -f /dev/xiaosu
这样。系统就会删除这个节点,更谈不上挂载了。。。。。

经过我测试,系统目前只能“识别”我的这个8G的U盘,其他都已经“识别”不了了。

更多的操作,可以通过man udev来研究它的规则,然后就是发挥你的想象力,进行无穷的创造了。。。。。。。

最后再说一下系统识别设备的步骤:

1.内核发现设备,然后将探测到的系统的各种信息传递给sysfs
2.系统会把这个设备的这个事件给udev传递个提示消息
3.udev会在/dev下创建这个设备的节点,然后根据rules文件的设置执行相应的指令
4.udev会通过一个接口给HAL发送一个提醒
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息