Ste*_*itt 23
如果您的内核使用模块(很有可能),确定程序是否正在访问您的网络摄像头的一种方法是查看模块的使用计数:
$ lsmod | grep uvcvideo
uvcvideo 90112 0
Run Code Online (Sandbox Code Playgroud)
第三个字段中的 0 表示没有任何设备为受uvcvideo
控制的网络摄像头打开(当lsmod
运行时)。当然,您需要确切知道哪个模块负责您的网络摄像头;虽然很容易检查,但在运行诸如 Cheese 之类的程序时,您会看到输出发生了变化。
请注意,严格来说,正数仅意味着某些东西打开了设备,并不意味着正在捕获图像。
Gil*_*il' 11
在任何健全的系统上,除非您使用自己的 chroot 设置了 chroot,否则/dev
所有设备文件都在/dev
. 只有 root 才能创建设备文件,因此您无需担心恶意用户在别处创建设备文件。
因此,您需要做的就是找到与/dev
您感兴趣的设备相同的设备下的文件。
ls -lR /dev |awk '/^c/ && $5 == "81," && $6 == "0"'
Run Code Online (Sandbox Code Playgroud)
这很可能只会显示/dev/video0
. 通常,每个设备都有一个设备文件,并且可能还有其他符号链接。
因此,对您的问题的实际答案很简单。只需检查哪些进程打开了设备文件。
fuser /dev/video0
Run Code Online (Sandbox Code Playgroud)
如果要监视访问(即捕获可能随时打开设备文件的进程),请在设备文件上使用 Linux 的文件访问监视方法之一:设置监视(并检查哪些进程已经拥有该设备)文件打开)
inotifywait -m -e open,close /dev/video0 &
sleep 1; fuser /dev/video0 # check for processes that have already opened the device
Run Code Online (Sandbox Code Playgroud)
或者设置一个审计规则,将访问记录在系统日志中(通常/var/log/audit/audit.log
)
auditctl -w /dev/video0 &
sleep 1; fuser /dev/video0 # check for processes that have already opened the device
Run Code Online (Sandbox Code Playgroud)
假设您真正想要的是确保您的网络摄像头在您不想要的时候不被使用,最简单的解决方案是在不需要时简单地断开它(如果是外部的)。或者覆盖网络摄像头(只需一块胶带即可)。
基于物理的方法比软件方法安全得多。