Як дізнатися, чи використовується моя веб-камера чи ні?


14

Яка команда дозволяє мені знати, чи використовується моя веб-камера чи ні?

lsof /dev/video0недостатньо. Усі блокові пристрої з основним та другорядним числом 81 та 0 повинні контролюватися.


2
+1. TIL lsoffuser) за замовчуванням не робить те, що вам потрібно.
Целада

@celada, чи можете ви поясніть?
YoungFrog

Які ваші турботи? Це відео, яке переглядає вас, чи ви також переживаєте за звук (у такому разі покриття об'єктива не вирішить вашу проблему)? Або йдеться про налагодження чи навіть цікавість? #
Кріс Х

@YoungFrog Я просто схвалював ОП з цього питання, оскільки це змусило мене чомусь навчитися. Я спочатку припускав, що lsof /dev/video0хотілося б, щоб усі процеси, які /dev/video0містили дескриптор відкритого файлу, підключений до об'єкта vfs ядра, на який посилається, незалежно від того, який шлях файлової системи був використаний для його відкриття, але в питанні ОП з'ясовується, що це неправда.
Целада

Відповіді:


15

Якщо ваше ядро ​​використовує модулі (що дуже ймовірно), один із способів визначити, чи програма отримує доступ до вашої веб-камери, це переглянути кількість використання модуля:

$ lsmod | grep uvcvideo
uvcvideo               90112  0

Поле 0 у третьому полі показує, що нічого не має відкритого пристрою для uvcvideoкерованої веб-камери (при lsmodзапуску). Звичайно, ви повинні точно знати, який модуль відповідає за вашу веб-камеру; це легко перевірити, хоча ви побачите зміни виходу під час запуску програми, такої як «Сир».

Зауважте, що, строго кажучи, позитивний підрахунок означає лише, що щось відкрило пристрій, це не означає, що зображення знімаються.


Чи не позитивний граф також означати тільки те , що має такий пристрій відкрити в даний час , на відміну може бути його відкриття на частку секунди , щоб захопити зображення і потім закрити його? З такою схемою використання вам доведеться неймовірно пощастило впізнати це в акті.
CVn

@ MichaelKjörling, тому я згадав "коли lsmodбігав". Це заслуговує розширення з огляду на сценарій, який ви надаєте (хоча, на мій досвід, затримки камер досить високі, що відкриття пристрою, зйомка зображення та закриття пристрою займає досить багато часу). Хоча, дивлячись на використання пристрою, використовуючи fuserабо lsofстраждаючи від тієї ж проблеми; більш надійний підхід вимагає підключення API V4L за допомогою траспойнтів або чогось подібного.
Стівен Кітт

@ MichaelKjörling Дійсно. Щоб зафіксувати цю схему використання, вам доведеться відстежувати доступ до файлів (-ів) пристрою, а не просто перевіряти їх в один момент часу.
Жил "ТАК - перестань бути злим"

7

Якщо припустити, що те, що ви насправді хочете, - це переконатися, що ваша веб-камера не використовується, коли ви цього не хочете , найпростіше рішення - просто відключити її (якщо зовнішня), коли вона не потрібна. Або накрити веб-камерою (спрацював би лише шматок клейкої стрічки).

Підходи на фізичній основі набагато безпечніші, ніж програмні.


1
Стрічка не блокує мікрофон, який можна (навіть на вбудованій веб-камері) структурувати як частину камери, а не через звуковий модуль.
Кріс Х

Я б настійно радив проти клейкої стрічки, оскільки це може легко залишити слід. Я використовував хірургічну стрічку (доступна в аптеках), оскільки вона залишає дуже мало залишків при видаленні, невеликою наклейкою, що покриває лінзу, липкою стороною до липкої сторони. Таким чином немає ризику залишків клею на лінзі. Це, правда, рішення, яке знаходиться на постійній стороні; ви не хочете знімати і постійно ставити назад на стрічку.
CVn

@ChrisH це не має сенсу (за іронією долі, ваш топ SE є англійською ...) Що ви маєте на увазі?
theonlygusti

@theonlygusti Я мав на увазі модуль, як в апаратній частині; Звичайно, на цій темі було б логічніше читати це як програмне забезпечення, яке не мало б особливого сенсу. Стрічка не блокує мікрофон. Мікрофон може бути частиною апаратури веб-камери, а не або додатком до всього, що підключається через звукову карту (термін, який я уникав через апаратне забезпечення SoC). Отже, щоб визначити, чи веб-камера включена / активна / шпигунська, вас може турбувати більше, ніж лише об’єктив. Але єдина в мене система Linux - це хронобус (крутон), який трохи обмежений.
Кріс Х

1
Звичайно, але це не було питання
Жил "SO- перестань бути злим"

7

У будь-якій здоровій системі, за винятком випадків, коли ви встановили хрооти з їх власними /dev, усі файли пристроїв знаходяться в розділі /dev. Лише корінь може створювати файли пристроїв, тому вам не потрібно турбуватися про зловмисних користувачів, які створюють файли пристроїв в інших місцях.

Тому все, що вам потрібно зробити, - це знайти файли під /devцим посиланням на той самий пристрій, що і той, що вас цікавить.

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

Цілком ймовірно, що це покаже лише /dev/video0. Зазвичай існує один файл пристрою для кожного пристрою, і, можливо, є додаткові символьні посилання на нього.

Таким чином, практична відповідь на ваше запитання проста. Просто перевірте, які процеси мають відкритий файл пристрою.

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

Гарна думка! Але це все ще страждає від конкретної проблеми рішення Ангела! (Див. Коментарі там). Найбільш надійне програмне рішення - це, мабуть, чорний список цього пристрою, udevщоб він не отримував файл пристрою під час завантаження; а потім додайте файл пристрою, якщо і коли ви плануєте використовувати камеру ... або фізично відключити її від мережі.
jpaugh

@jpaugh Питання про пошук процесів за допомогою веб-камери, а не відключення веб-камери.
Жил "ТАК - перестань бути злим"

Це слід контролювати на рівні ядра. Пристрій можна додати де завгодно: напр.mknod /root/video0 b 81 0
user123456

@ j658063.mvrht.com Але це може зробити тільки root. Якщо root не робить дурних речей, тоді ви в безпеці. Якщо корінь робить дурні речі, то все одно ви накручені - root також може змінити ядро, щоб приховати деякі процеси.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.