+1. TIL lsof(und fuser) macht standardmäßig nicht das, wozu Sie es brauchen.
Celada,
@celada könntest du das bitte erklären?
YoungFrog
Was sind Ihre Anliegen? Sehen Sie sich Video an oder sorgen Sie sich auch um Audio (in diesem Fall würde das Abdecken des Objektivs Ihr Problem nicht lösen)? Oder geht es um Debugging oder gar Neugier? #
Chris H
@YoungFrog Ich habe dem OP zu dieser Frage nur ein Kompliment gemacht, weil ich dadurch etwas gelernt habe. Ich ging zunächst davon aus, dass lsof /dev/video0alle Prozesse, die einen offenen Dateideskriptor enthielten, mit dem Kernel-vfs-Objekt verbunden sein sollten, auf das verwiesen wird, /dev/video0unabhängig davon, welcher Dateisystempfad zum Öffnen verwendet wurde. Die Frage des OP macht jedoch deutlich, dass dies nicht zutrifft.
Celada
Antworten:
14
Wenn Ihr Kernel Module verwendet (was sehr wahrscheinlich ist), können Sie feststellen, ob ein Programm auf Ihre Webcam zugreift, indem Sie die Nutzungsanzahl des Moduls überprüfen:
$ lsmod | grep uvcvideo
uvcvideo 90112 0
Die 0 im dritten Feld zeigt an, dass kein Gerät für eine uvcvideogesteuerte Webcam geöffnet ist (wenn ausgeführt lsmod). Natürlich müssen Sie genau wissen, welches Modul für Ihre Webcam zuständig ist. Es ist jedoch einfach zu überprüfen, da sich die Ausgabe ändert, wenn Sie ein Programm wie Cheese ausführen.
Beachten Sie, dass eine positive Zählung streng genommen nur bedeutet, dass ein Gerät geöffnet wurde. Dies bedeutet nicht, dass Bilder aufgenommen werden.
Keine positive Zählung auch bedeuten nur , dass etwas hat ein solches Gerät öffnen jetzt , im Gegensatz zu kann es für einen Bruchteil einer Sekunde eröffnen ein Bild zu erfassen und schließen Sie es? Mit solch einem Nutzungsmuster müsste man unglaublich viel Glück haben, um es auf frischer Tat zu fangen.
ein Lebenslauf
@ MichaelKjörling deswegen habe ich "beim lsmodran" genannt. In dem von Ihnen angegebenen Szenario verdient es eine Erweiterung (obwohl die Latenzen der Kameras meiner Erfahrung nach so hoch sind, dass das Öffnen des Geräts, das Aufnehmen eines Bildes und das Schließen des Geräts eine Weile dauern). Betrachtet man die Gerätenutzung mit fuseroder tritt lsofdas gleiche Problem auf; Ein robusterer Ansatz würde das Verknüpfen der V4L-APIs mit Tracepoints oder Ähnlichem erfordern.
Stephen Kitt
@ MichaelKjörling In der Tat. Um dieses Verwendungsmuster zu erfassen, müssen Sie die Zugriffe auf die Gerätedatei (en) überwachen und nicht nur zu einem bestimmten Zeitpunkt überprüfen.
Gilles 'SO- hör auf böse zu sein'
7
Unter der Annahme , dass das, was Sie eigentlich wollen , ist sicherzustellen , dass Ihre Webcam nicht verwendet werden , wenn Sie nicht wollen , es ist die einfachste Lösung , um sie einfach zu trennen (falls extern) , wenn sie nicht benötigt werden . Oder die Webcam abdecken (nur ein Stück Klebeband würde funktionieren).
Physikalisch basierte Ansätze sind viel sicherer als Software-Ansätze.
Das Band blockiert nicht das Mikrofon, das (auch bei einer eingebauten Webcam) als Teil der Kamera und nicht über ein Soundmodul strukturiert werden kann.
Chris H
Ich würde dringend vom Klebeband abraten, da es leicht Rückstände hinterlassen könnte. Ich habe chirurgisches Klebeband (in Drogerien erhältlich) verwendet, da es beim Entfernen nur sehr wenig Rückstände hinterlässt. Ein kleiner Aufkleber bedeckt die Linse, klebrige Seite an klebrige Seite. Auf diese Weise besteht keine Gefahr von Kleberückständen auf der Linse. Zugegeben, es ist eine Lösung, die etwas permanent ist. Sie wollen nicht die ganze Zeit abheben und wieder auf Band bringen.
ein Lebenslauf
@ ChrisH das ergibt keinen Sinn (ironischerweise ist deine Top-SE englisch ...) Was meinst du?
theonlygusti
@theonlygusti Ich meinte Modul wie in einem Stück Hardware; Natürlich wäre es in diesem Thread logischer, es als Software zu lesen, was nicht viel Sinn macht. Das Band blockiert das Mikrofon nicht. Ein Mikrofon kann Teil der Webcam-Hardware sein, anstatt oder zusätzlich zu allem, was über die Soundkarte angeschlossen ist (ein Begriff, den ich aufgrund der SoC-Hardware vermieden habe). Um festzustellen, ob die Webcam aktiviert / aktiv / spioniert ist, ist möglicherweise mehr als nur das Objektiv von Bedeutung. Aber das einzige Linux-System, das ich hier habe, ist ein Chromebook (Crouton), also etwas eingeschränkt.
Chris H
1
Sicher, aber das war nicht die Frage
Gilles 'SO - hör auf, böse zu sein'
7
Auf jedem vernünftigen System liegen /devalle Gerätedateien unter , es sei denn, Sie haben Chroots mit eigenen eingerichtet /dev. Nur Root kann Gerätedateien erstellen, sodass Sie sich keine Sorgen machen müssen, dass böswillige Benutzer Gerätedateien an anderer Stelle erstellen.
Sie müssen also nur die Dateien suchen /dev, die sich auf dasselbe Gerät beziehen, an dem Sie interessiert sind.
Es ist wahrscheinlich, dass dies nur angezeigt wird /dev/video0. Normalerweise gibt es für jedes Gerät eine einzelne Gerätedatei und möglicherweise zusätzliche symbolische Links.
Daher ist die praktische Antwort auf Ihre Frage die einfache. Prüfen Sie einfach, bei welchen Prozessen die Gerätedatei geöffnet ist.
fuser /dev/video0
Wenn Sie Zugriffe überwachen möchten (dh Prozesse abfangen, die die Gerätedatei jederzeit öffnen können), verwenden Sie eine der Linux- Methoden zur Dateizugriffsüberwachung für die Gerätedatei (en): Richten Sie eine Überwachung ein (und überprüfen Sie, welche Prozesse bereits über das Gerät verfügen) Datei (en) geöffnet
inotifywait -m -e open,close /dev/video0 &
sleep 1; fuser /dev/video0 # check for processes that have already opened the device
oder richten Sie eine Überwachungsregel ein, die (normalerweise /var/log/audit/audit.log) Zugriffe in den Systemprotokollen protokolliert.
auditctl -w path=/dev/video0 &
sleep 1; fuser /dev/video0 # check for processes that have already opened the device
Guter Punkt! Es leidet aber immer noch an dem zeitlichen Problem der Lösung von Angel! (Vgl. Dortige Kommentare). Die robusteste Softwarelösung besteht wahrscheinlich darin, dieses Gerät auf eine schwarze Liste zu setzen, udevdamit es beim Hochfahren keine Gerätedatei erhält. und fügen Sie dann eine Gerätedatei hinzu, wenn Sie die Kamera verwenden möchten ... oder ziehen Sie den Netzstecker.
Jpaugh
@jpaugh Die Frage bestand darin, Prozesse zu finden, die die Webcam verwenden, und die Webcam nicht zu deaktivieren.
Gilles 'SO- hör auf böse zu sein'
Es sollte auf der Kernel-Ebene überwacht werden. Ein Gerät kann überall hinzugefügt werden: zBmknod /root/video0 b 81 0
user123456
@ j658063.mvrht.com Das kann aber nur root. Wenn root nichts Dummes tut, bist du in Sicherheit. Wenn root dumme Sachen macht, bist du sowieso beschissen - root kann auch den Kernel ändern, um einige Prozesse zu verbergen.
lsof
(undfuser
) macht standardmäßig nicht das, wozu Sie es brauchen.lsof /dev/video0
alle Prozesse, die einen offenen Dateideskriptor enthielten, mit dem Kernel-vfs-Objekt verbunden sein sollten, auf das verwiesen wird,/dev/video0
unabhängig davon, welcher Dateisystempfad zum Öffnen verwendet wurde. Die Frage des OP macht jedoch deutlich, dass dies nicht zutrifft.Antworten:
Wenn Ihr Kernel Module verwendet (was sehr wahrscheinlich ist), können Sie feststellen, ob ein Programm auf Ihre Webcam zugreift, indem Sie die Nutzungsanzahl des Moduls überprüfen:
Die 0 im dritten Feld zeigt an, dass kein Gerät für eine
uvcvideo
gesteuerte Webcam geöffnet ist (wenn ausgeführtlsmod
). Natürlich müssen Sie genau wissen, welches Modul für Ihre Webcam zuständig ist. Es ist jedoch einfach zu überprüfen, da sich die Ausgabe ändert, wenn Sie ein Programm wie Cheese ausführen.Beachten Sie, dass eine positive Zählung streng genommen nur bedeutet, dass ein Gerät geöffnet wurde. Dies bedeutet nicht, dass Bilder aufgenommen werden.
quelle
lsmod
ran" genannt. In dem von Ihnen angegebenen Szenario verdient es eine Erweiterung (obwohl die Latenzen der Kameras meiner Erfahrung nach so hoch sind, dass das Öffnen des Geräts, das Aufnehmen eines Bildes und das Schließen des Geräts eine Weile dauern). Betrachtet man die Gerätenutzung mitfuser
oder trittlsof
das gleiche Problem auf; Ein robusterer Ansatz würde das Verknüpfen der V4L-APIs mit Tracepoints oder Ähnlichem erfordern.Unter der Annahme , dass das, was Sie eigentlich wollen , ist sicherzustellen , dass Ihre Webcam nicht verwendet werden , wenn Sie nicht wollen , es ist die einfachste Lösung , um sie einfach zu trennen (falls extern) , wenn sie nicht benötigt werden . Oder die Webcam abdecken (nur ein Stück Klebeband würde funktionieren).
Physikalisch basierte Ansätze sind viel sicherer als Software-Ansätze.
quelle
Auf jedem vernünftigen System liegen
/dev
alle Gerätedateien unter , es sei denn, Sie haben Chroots mit eigenen eingerichtet/dev
. Nur Root kann Gerätedateien erstellen, sodass Sie sich keine Sorgen machen müssen, dass böswillige Benutzer Gerätedateien an anderer Stelle erstellen.Sie müssen also nur die Dateien suchen
/dev
, die sich auf dasselbe Gerät beziehen, an dem Sie interessiert sind.Es ist wahrscheinlich, dass dies nur angezeigt wird
/dev/video0
. Normalerweise gibt es für jedes Gerät eine einzelne Gerätedatei und möglicherweise zusätzliche symbolische Links.Daher ist die praktische Antwort auf Ihre Frage die einfache. Prüfen Sie einfach, bei welchen Prozessen die Gerätedatei geöffnet ist.
Wenn Sie Zugriffe überwachen möchten (dh Prozesse abfangen, die die Gerätedatei jederzeit öffnen können), verwenden Sie eine der Linux- Methoden zur Dateizugriffsüberwachung für die Gerätedatei (en): Richten Sie eine Überwachung ein (und überprüfen Sie, welche Prozesse bereits über das Gerät verfügen) Datei (en) geöffnet
oder richten Sie eine Überwachungsregel ein, die (normalerweise
/var/log/audit/audit.log
) Zugriffe in den Systemprotokollen protokolliert.quelle
udev
damit es beim Hochfahren keine Gerätedatei erhält. und fügen Sie dann eine Gerätedatei hinzu, wenn Sie die Kamera verwenden möchten ... oder ziehen Sie den Netzstecker.mknod /root/video0 b 81 0