Comment savoir si ma webcam est utilisée ou non?


14

Quelle commande me permet de savoir si ma webcam est utilisée ou non?

lsof /dev/video0c'est insuffisant. Tous les périphériques de bloc avec le nombre majeur et mineur 81 et 0 doivent être surveillés.


2
+1. TIL lsof(et fuser) ne fait pas par défaut ce dont vous avez besoin.
Celada

@celada pourriez-vous s'il vous plaît expliquer?
YoungFrog

Quelles sont vos inquiétudes? Est-ce que c'est de la vidéo qui vous regarde, ou êtes-vous également préoccupé par l'audio (dans ce cas, le fait de couvrir l'objectif ne résoudrait pas votre problème)? Ou s'agit-il de débogage ou même de curiosité? #
Chris H

@YoungFrog Je complimentais juste l'OP sur cette question car cela m'a fait apprendre quelque chose. J'ai initialement supposé que lsof /dev/video0tous les processus qui contenaient un descripteur de fichier ouvert connecté à l'objet vfs du noyau auquel il se /dev/video0réfère, quel que soit le chemin du système de fichiers utilisé pour l'ouvrir, mais la question de l'OP indique clairement que ce n'est pas vrai.
Celada

Réponses:


15

Si votre noyau utilise des modules (ce qui est très probable), une façon de déterminer si un programme accède à votre webcam est de regarder le nombre d'utilisation du module:

$ lsmod | grep uvcvideo
uvcvideo               90112  0

Le 0 dans le troisième champ indique que rien n'a de périphérique ouvert pour une uvcvideowebcam contrôlée (lorsqu'elle est lsmodexécutée). Bien sûr, vous devez savoir exactement quel module est responsable de votre webcam; c'est facile à vérifier cependant, vous verrez le changement de sortie lors de l'exécution d'un programme tel que Cheese.

Notez que, strictement parlant, un compte positif signifie seulement que quelque chose a ouvert un appareil, cela ne signifie pas que des images sont capturées.


Un décompte positif ne signifie-t-il pas seulement que quelque chose a un tel appareil ouvert maintenant , au lieu de l'ouvrir pendant une fraction de seconde pour capturer une image puis la fermer? Avec un tel modèle d'utilisation, vous devriez être incroyablement chanceux pour l'attraper dans l'acte.
un CVn

@ MichaelKjörling, c'est pourquoi j'ai mentionné "lors de l' lsmodexécution". Il mérite une expansion compte tenu du scénario que vous donnez (bien que, selon mon expérience, les latences des caméras soient suffisamment élevées pour que l'ouverture de l'appareil, la capture d'une image et la fermeture de l'appareil prennent un certain temps). En regardant l'utilisation de l'appareil en utilisant fuserou qui lsofsouffre du même problème cependant; une approche plus robuste nécessiterait de raccorder les API V4L à l'aide de points de trace ou quelque chose de similaire.
Stephen Kitt

@ MichaelKjörling En effet. Pour capturer ce modèle d'utilisation, vous devez surveiller les accès au (x) fichier (s) du périphérique, et pas seulement vérifier à un moment donné.
Gilles 'SO- arrête d'être méchant'

7

En supposant que ce que vous voulez réellement est de vous assurer que votre webcam n'est pas utilisée lorsque vous ne le souhaitez pas , la solution la plus simple consiste à simplement la déconnecter (si elle est externe) lorsqu'elle n'est pas nécessaire. Ou couvrir la webcam (juste un morceau de ruban adhésif fonctionnerait).

Les approches basées sur la physique sont beaucoup plus sécurisées que celles logicielles.


1
La bande ne bloque pas le microphone, qui peut (même sur une webcam intégrée) être structuré dans le cadre de la caméra plutôt que via un module de son.
Chris H

Je déconseille fortement le ruban adhésif car il pourrait facilement laisser un résidu. J'ai utilisé du ruban chirurgical (disponible dans les pharmacies) car il laisse très peu de résidus lorsqu'il est retiré, avec un petit autocollant couvrant la lentille, côté collant à côté collant. De cette façon, il n'y a aucun risque de résidus de colle sur la lentille. Il s'agit, certes, d'une solution légèrement permanente; vous ne voulez pas décoller et remettre sur bande tout le temps.
un CVn

@ChrisH qui n'a aucun sens (ironiquement, votre top SE est l'anglais ...) Que voulez-vous dire?
theonlygusti

@theonlygusti Je voulais dire module comme dans un morceau de matériel; bien sûr, sur ce fil, il serait plus logique de le lire comme signifiant logiciel, ce qui n'aurait pas beaucoup de sens. La bande ne bloque pas le microphone. Un microphone peut faire partie du matériel de la webcam, au lieu ou en plus de tout ce qui est connecté via la carte son (un terme que j'évitais à cause du matériel SoC). Donc, pour déterminer si la webcam est activée / active / d'espionnage, vous pourriez être préoccupé par plus que simplement l'objectif. Mais le seul système Linux que j'ai ici est un Chromebook (crouton) donc un peu limité.
Chris H

1
Bien sûr, mais ce n'était pas la question
Gilles 'SO- arrête d'être méchant'

7

Sur n'importe quel système sain, à moins que vous n'ayez configuré des chroots avec leurs propres /dev, tous les fichiers de périphérique sont sous /dev. Seul root peut créer des fichiers de périphérique, vous n'avez donc pas à vous soucier de la création d'utilisateurs de fichiers de périphérique ailleurs.

Il vous suffit donc de localiser les fichiers /devqui se réfèrent au même appareil que celui qui vous intéresse.

ls -lR /dev |awk '/^c/ && $5 == "81," && $6 == "0"'

Il est probable que cela ne s'affiche que /dev/video0. Habituellement, il existe un seul fichier de périphérique pour chaque périphérique, et il existe éventuellement des liens symboliques supplémentaires vers celui-ci.

Ainsi, la réponse pratique à votre question est la plus simple. Vérifiez simplement quels processus ont ouvert le fichier du périphérique.

fuser /dev/video0

Si vous souhaitez surveiller les accès (c'est-à-dire intercepter les processus qui peuvent ouvrir le fichier de périphérique à tout moment), utilisez l'une des méthodes de surveillance d'accès aux fichiers de Linux sur le ou les fichiers de périphérique: configurez une surveillance (et vérifiez quels processus ont déjà le périphérique fichier (s) ouvert (s))

inotifywait -m -e open,close /dev/video0 &
sleep 1; fuser /dev/video0   # check for processes that have already opened the device

ou configurer une règle d'audit qui enregistrera les accès dans les journaux système (généralement /var/log/audit/audit.log)

auditctl -w path=/dev/video0 &
sleep 1; fuser /dev/video0   # check for processes that have already opened the device

Bon point! Mais, il souffre toujours du problème ponctuel de la solution d'Angel! (Cf. commentaires ici). La solution logicielle la plus robuste consiste probablement à mettre cet appareil sur liste noire udevafin qu'il n'obtienne pas de fichier d'appareil au démarrage; puis ajoutez un fichier de périphérique si et quand vous prévoyez d'utiliser l'appareil photo ... ou de le débrancher physiquement.
jpaugh

@jpaugh La question était de trouver des processus utilisant la webcam, et non de désactiver la webcam.
Gilles 'SO- arrête d'être méchant'

Il doit être surveillé au niveau du noyau. Un appareil peut être ajouté n'importe où: par exemplemknod /root/video0 b 81 0
user123456

@ j658063.mvrht.com Mais seul root peut le faire. Si root ne fait pas de bêtises, alors vous êtes en sécurité. Si root fait des choses stupides, vous êtes quand même foutu - root peut également changer le noyau pour masquer certains processus.
Gilles 'SO- arrête d'être méchant'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.