웹캠 사용 여부를 어떻게 알 수 있습니까?


14

웹캠 사용 여부를 알 수있는 명령은 무엇입니까?

lsof /dev/video0충분하지 않습니다. 주 번호와 부 번호 81과 0을 가진 모든 블록 장치를 모니터링해야합니다.


2
+1. TIL lsof(및 fuser)은 기본적으로 필요한 것을 수행하지 않습니다.
Celada

@celada 설명해 주시겠습니까?
YoungFrog

당신의 걱정은 무엇입니까? 비디오가 당신을보고 있습니까, 아니면 오디오를 걱정합니까 (이 경우 렌즈를 덮으면 문제가 해결되지 않습니다)? 아니면 디버깅이나 호기심에 관한 것일까 요? #
Chris H

@YoungFrog 나는이 질문에 대한 OP를 칭찬했습니다. 필자는 처음 lsof /dev/video0에 열린 파일 디스크립터를 보유한 모든 프로세스가 /dev/video0어떤 파일 시스템 경로를 사용했는지에 관계없이 커널 vfs 객체에 연결된 모든 프로세스를 원한다고 가정 했지만 OP의 질문은 이것이 사실이 아님을 분명히합니다.
Celada

답변:


15

커널이 모듈을 사용하는 경우 (아마도) 프로그램이 웹캠에 액세스하고 있는지 확인하는 한 가지 방법은 모듈의 사용 횟수를 확인하는 것입니다.

$ lsmod | grep uvcvideo
uvcvideo               90112  0

세 번째 필드의 0은 uvcvideo제어 된 웹캠 ( lsmod실행시)에 열려있는 장치가 없음을 나타냅니다 . 물론 웹캠을 담당하는 모듈을 정확히 알아야합니다. 그러나 쉽게 확인할 수 있습니다. Cheese와 같은 프로그램을 실행하는 동안 출력이 변경되는 것을 볼 수 있습니다.

엄밀히 말하면 양의 카운트는 무언가가 장치를 연 것을 의미한다는 것만으로 이미지가 캡처되는 것은 아닙니다.


양수 는 이미지를 캡처 한 다음 닫는 데 1 초가 걸리는 것과는 달리 지금 무언가 그런 장치가 열려 있다는 것을 의미하지는 않습니까? 이러한 사용 패턴을 사용하면 실제로 사용하기 위해 운이 좋을 것입니다.
CVn

@ MichaelKjörling 그것이 " lsmod달릴 때 "를 언급 한 이유 입니다. 주어진 시나리오를 감안할 때 확장 할 가치가 있습니다 (제 경험상 카메라 대기 시간은 장치를 열고 이미지를 캡처하고 닫는 데 시간이 오래 걸리기에 충분히 높습니다). 그래도 같은 문제를 사용 fuser하거나 lsof겪고 있는 장치 사용을 살펴 보는 것 ; 보다 강력한 접근 방식은 추적 점 또는 이와 유사한 것을 사용하여 V4L API를 연결해야합니다.
Stephen Kitt 2012

@ MichaelKjörling 실제로. 이 사용 패턴을 캡처하려면 특정 시점에서만 확인하는 것이 아니라 장치 파일에 대한 액세스를 모니터링해야합니다.
질 'SO- 악마 그만'

7

실제로 원하지 않는 경우 웹캠 을 사용하지 않는 것이 가장 간단한 방법 이라고 가정 할 때 가장 간단한 해결책은 필요하지 않은 경우 웹캠 을 연결 해제하는 것입니다 (외부인 경우). 또는 웹캠을 덮습니다 (덕트 테이프 조각 만 작동).

물리 기반 접근 방식은 소프트웨어 접근 방식보다 훨씬 안전합니다.


1
테이프는 마이크를 차단하지 않으며 (내장 웹캠에서도) 사운드 모듈이 아닌 카메라의 일부로 구성 될 수 있습니다.
Chris H

덕트 테이프는 잔유물을 쉽게 남길 수 있으므로 강력히 권고합니다. 수술 용 테이프 (약국에서 구할 수 있음)는 렌즈를 덮고있는 작은 스티커와 끈적한면에서 끈끈한면으로 제거 할 때 잔류 물이 거의 남지 않기 때문에 사용했습니다. 이렇게하면 렌즈에 접착제 잔여 물이 남을 위험이 없습니다. 그것은 명백히 영구적 인 측면에있는 해결책이다. 항상 테이프를 벗고 다시 넣기를 원하지 않습니다.
CVn

이해가되지 않는 @ChrisH (철학적으로, 최고 SE는 영어입니다 ...) 무슨 뜻인가요?
theonlygusti

@theonlygusti 나는 하드웨어와 같이 모듈을 의미했다. 물론이 스레드에서 소프트웨어를 의미 소프트웨어로 읽는 것이 더 논리적 일 것입니다. 테이프가 마이크를 차단하지 않습니다. 마이크는 사운드 카드를 통해 연결된 것 대신 또는 그 외에 웹캠 하드웨어의 일부가 될 수 있습니다 (SoC 하드웨어로 인해 피하는 용어). 따라서 웹캠이 활성화 / 활성화 / 스파이인지 여부를 결정하려면 렌즈 그 이상을 고려해야합니다. 그러나 내가 가지고있는 유일한 리눅스 시스템은 크롬 북 (크루 톤)이므로 약간 제한적입니다.
Chris H

1
물론, 그것은 문제가 아니 었습니다
Gilles 'SO-Stop

7

정상적인 시스템에서 chroot를 자체적으로 설정하지 않으면 /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

좋은 지적! 그러나 여전히 Angel! 솔루션의 특정 시점 문제로 어려움을 겪고 있습니다 (참조 의견). 가장 강력한 소프트웨어 솔루션은 해당 장치를 블랙리스트에 추가 udev하여 부팅시 장치 파일을 얻지 않는 것입니다. 그리고 카메라를 사용하려고 할 때나 장치에서 물리적으로 플러그를 뽑을 경우 장치 파일을 추가하십시오.
jpaugh

@jpaugh 문제는 웹캠을 비활성화하지 않고 웹캠을 사용하여 프로세스를 찾는 것이 었습니다.
Gilles 'SO- 악마 그만두 다'

커널 수준에서 모니터해야합니다. 장치는 어디서나 추가 할 수 있습니다. 예 :mknod /root/video0 b 81 0
user123456

@ j658063.mvrht.com 그러나 루트 만이 그렇게 할 수 있습니다. 루트가 어리석은 일을하지 않으면 안전합니다. 루트가 어리석은 일을한다면 어쨌든 망가졌습니다. 루트는 커널을 변경하여 일부 프로세스를 숨길 수도 있습니다.
Gilles 'SO- 악마 중지'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.