+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.
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.
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.
lsof
(etfuser
) ne fait pas par défaut ce dont vous avez besoin.lsof /dev/video0
tous les processus qui contenaient un descripteur de fichier ouvert connecté à l'objet vfs du noyau auquel il se/dev/video0
ré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.Réponses:
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:
Le 0 dans le troisième champ indique que rien n'a de périphérique ouvert pour une
uvcvideo
webcam contrôlée (lorsqu'elle estlsmod
exé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.
la source
lsmod
exé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 utilisantfuser
ou quilsof
souffre 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.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.
la source
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
/dev
qui se réfèrent au même appareil que celui qui vous intéresse.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.
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))
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
)la source
udev
afin 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.mknod /root/video0 b 81 0