防止代码拷贝,在Linux系统的PC,禁止数据拷贝方案,要求插U盘时能读取,但是不能拷贝东西到U盘。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防止代码拷贝,在Linux系统的PC,禁止数据拷贝方案,要求插U盘时能读取,但是不能拷贝东西到U盘。相关的知识,希望对你有一定的参考价值。

在软件开发公司,对代码保护的非常严格,但是有时候需要用U盘拷贝东西到Linux系统的PC上,但是只能读取,不能拷贝数据到U盘,有没有一个比较实惠的方案能处理。犀利哥在此跪求!
在linux系统下有一个UDEV工具,可以使用此工具,将usb设备与linux系统绑定,这样可以禁用其他U盘。

也可以使用UDEV将USB设备的storage功能禁用。

不知道这个方法能不能实现,有高手帮忙测试下。

看看 SELinux 或者其他的第三方权限管理系统。

其实吧,你们可以选择限制使用 U 盘。

印象里图形界面的 U 盘的自动挂载可以设置权限,好像可以附加挂载参数。也就是强行设置 U 盘的自动挂载变为只读挂载。
不过具体怎么弄就不知道了。

如果是命令行,好像普通用户本来就没有挂载的权限,如果你们全用 root 用户,那任何防御都是没意义的。普通用户如果提供挂载权限,或者 sudo 权限,可以写一个脚本,强行给命令加上 -o ro 参数(ro 是只读),并且过滤 rw (rw 就是能读又能写),之后让所有人改用这个脚本挂载。封掉直接使用 mount 的功能。
当然,具体怎么弄我依然不知道。

建议看看 SELinux ,这个貌似方便些,但要求你们的机器已经安装了 SELinux 并且打开他。
-----------------
udev 是 Linux 的硬件检测管理工具,这东西的规则反正我是看不懂……
我的 Gentoo 系统 udev 规则在 /etc/udev/rules.d/ 里面。你可以看看你的系统里面 udev 规则,不过注意这东西是系统基础服务程序,如果弄挂规则,可能整个硬件识别都会出问题。
我的建议还是用 SELinux 强行限制某些功能为好,SELinux 本来就是权限控制系统。
参考技术A 没听明白,不过读取和拷贝是一个权限都是read
只要能读取,就能拷贝

netty之linux零拷贝

一、DMA拷贝

Direct Memory Access , 直接内存访问,是一种无须cpu的参与就可以让外设与系统内存进行双向数据传输的硬件机制。

DMA拷贝使系统CPU从实际的IO数据传输中解脱出来,从而大大提高系统吞吐率。在数据传输期间,cpu可以并发的执行其他任务。

二、传统IO数据copy

传统的IO数据拷贝需要经历4次copy 和 3次状态切换

四次copy:

1、由硬件 经过DMA ——> 内核buffer

2、内核buffer ——> 用户buffer

3、用户buffer ——> socket buffer

4、socket buffer ——> protocol engine 协议栈

三次切换:

1、用户态 ——> 内核态 (用户上下文 ——> 内核上下文)

2、内核态 ——> 用户态

3、用户态 ——> 内核态

三、零拷贝

传统的IO数据传输,经历了4次数据拷贝,而在这里面从 内核缓冲区 到 用户缓冲区 , 再从用户穿冲区到 socket缓冲区,这个过程是没有必要的。零拷贝就是为了解决这个问题 ,零拷贝指的是零CPU拷贝 , DMA拷贝是无法避免的。

实现技术:

1、内存映射 mmap

2、sendFile

3.1、mmap 内存映射

并没有真实的改变传统的IO流程,只不过是使 内核buffer 和 用户buffer 共享了同一块内存,所以相对来讲减少了一次数据拷贝。

mmap通过内存映射,将文件映射到内核缓冲区,同时,用户空间可以共享内核空间的数据。这样就减少了一次数据copy。

三次数据copy:

1、由硬件 经过DMA ——> 内核buffer

2、内核buffer(用户buffer 共享了一块内存) ——> socket buffer

3、用户buffer ——> socket buffer

两次切换:

1、用户态 ——> 内核态 (用户上下文 ——> 内核上下文)

2、内核态 ——> 用户态

内存映射共经历了3次数据copy 和 2次状态切换。 并没有实现领copy , 只是减少了copy的次数

3.2、sendFile

从linux 内核2.4开始,对于网卡支持SG-DMA技术的情况下,sendFile()系统调用,过程如下:

1、通过DMA将数据拷贝至内核缓冲区

2、缓冲区描述符和数据穿度 copy到socket缓冲区,这个数据量很小,消耗比较低

3、网卡SG-DMA控制器 ,将内核缓冲区copy至 协议栈

四、netty的零拷贝

4.1、接收和发送byteBuffer ,使用直接内存进行socket读写,减少了直接内存到堆内存的数据copy

4.2、文件传输调用FileRegion包装的transferTo,直接将文件缓冲区数据发送到目标chuannel , 避免内存copy

4.3、提供了CompositeBytebuf , 将多个buff合并成一个逻辑上的buff

4.4、通过wrap操作将byte数组 、ByteBuf、ByteBuffer 转换为一个byteBuf对象 ,减少内存copy

ByteBuf byteBuf = Unpooled.wrappedBuffer(bytes);

byteBuf对象和 源bytes 共享一块内存,避免copy

4.5、支持slice操作,将一个byteBuf 分解为多个共享一个存储区域的byteBuf,避免内存copy

以上是关于防止代码拷贝,在Linux系统的PC,禁止数据拷贝方案,要求插U盘时能读取,但是不能拷贝东西到U盘。的主要内容,如果未能解决你的问题,请参考以下文章

怎样禁止复制电脑文件

Linux 系统安全 -- 防暴力破解

禁止拷贝网页代码,禁止复制粘贴

应该如何把整个FLASH中的代码拷贝到RAM中

linux 零拷贝

netty之linux零拷贝