web-dev-qa-db-ja.com

ウェブカメラが使用されているかどうかを知る方法は?

Webカメラが使用されているかどうかを確認できるコマンドはどれですか?

lsof /dev/video0では不十分です。メジャー番号81とマイナー番号0のすべてのブロックデバイスを監視する必要があります。

15
user123456

カーネルがモジュールを使用している場合(可能性が高い)、プログラムがWebカメラにアクセスしているかどうかを判断する1つの方法は、モジュールの使用数を調べることです。

$ lsmod | grep uvcvideo
uvcvideo               90112  0

3番目のフィールドの0は、uvcvideo制御のWebカメラ用に開いているデバイスがないことを示します(lsmodが実行されたとき)。もちろん、あなたはあなたのウェブカメラを担当しているモジュールを正確に知る必要があります。簡単に確認できますが、Cheeseなどのプログラムを実行しているときに出力の変化を確認できます。

厳密に言えば、正のカウントは、何かがデバイスを開いたことを意味するだけであり、画像がキャプチャされていることを意味するわけではないことに注意してください。

15
Stephen Kitt

正常なシステムでは、chrootに独自の/devを設定していない限り、すべてのデバイスファイルは/devの下にあります。 rootだけがデバイスファイルを作成できるため、悪意のあるユーザーが他の場所でデバイスファイルを作成することを心配する必要はありません。

したがって、必要なのは、目的のデバイスと同じデバイスを参照する/devの下のファイルを見つけることだけです。

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

これは/dev/video0のみを表示する可能性があります。通常、デバイスごとに1つのデバイスファイルがあり、それに追加のシンボリックリンクが存在する可能性があります。

したがって、あなたの質問に対する実用的な答えは単純なものです。デバイスファイルが開いているプロセスを確認するだけです。

fuser /dev/video0

アクセスを監視する(つまり、デバイスファイルをいつでも開く可能性があるプロセスをキャッチする)場合は、Linuxのいずれかの ファイルアクセス監視方法 をデバイスファイルで使用します。監視を設定します(およびデバイスファイルがすでに開いているプロセスを確認してください)

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

または、システムログにアクセスを記録する監査ルールを設定します(通常は/var/log/audit/audit.log

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

あなたが実際に望んでいるのはあなたのウェブカメラを確認することだと仮定します それを望まないときは使用されていません 、最も簡単な解決策は、必要がないときに単にそれを外すことです(外付けの場合)。または、ウェブカメラを覆います(ダクトテープの一部だけで十分です)。

物理ベースのアプローチは、ソフトウェアよりもはるかに安全です。

7
Ángel