จะทราบได้อย่างไรว่ามีการใช้งานเว็บแคมของฉันหรือไม่?


14

คำสั่งใดให้ฉันรู้ว่าใช้งานเว็บแคมหรือไม่?

lsof /dev/video0ไม่เพียงพอ ควรตรวจสอบอุปกรณ์บล็อกทั้งหมดที่มีหมายเลขหลักและรองจำนวน 81 และ 0


2
+1 TIL lsof(และfuser) โดยค่าเริ่มต้นจะไม่ทำสิ่งที่คุณต้องการ
Celada

@celada คุณช่วยอธิบายหน่อยได้ไหม?
YoungFrog

คุณมีความกังวลอะไร มันเป็นวิดีโอที่ดูคุณหรือคุณเป็นห่วงเรื่องเสียงด้วย (ซึ่งในกรณีที่ครอบคลุมเลนส์จะไม่แก้ปัญหาของคุณ)? หรือมันเกี่ยวกับการดีบักหรือแม้แต่ความอยากรู้อยากเห็น #
Chris H

@ YoungFrog ฉันแค่ชม OP เกี่ยวกับคำถามนี้เพราะมันทำให้ฉันเรียนรู้อะไรบางอย่าง ฉันเริ่มสันนิษฐานว่าlsof /dev/video0ต้องการกระบวนการทั้งหมดที่ถือตัวอธิบายไฟล์แบบเปิดซึ่งเชื่อมต่อกับเคอร์เนลวัตถุ vfs ที่/dev/video0อ้างถึงไม่ว่าจะใช้เส้นทางของระบบไฟล์ใดในการเปิด แต่คำถามของ OP ทำให้ชัดเจนว่าสิ่งนี้ไม่เป็นความจริง
Celada

คำตอบ:


15

หากเคอร์เนลของคุณใช้โมดูล (ซึ่งมีโอกาสสูงมาก) วิธีหนึ่งในการพิจารณาว่าโปรแกรมกำลังเข้าถึงเว็บแคมของคุณหรือไม่คือดูจำนวนการใช้งานของโมดูล:

$ lsmod | grep uvcvideo
uvcvideo               90112  0

0 ในฟิลด์ที่สามแสดงว่าไม่มีอุปกรณ์ใดที่เปิดสำหรับuvcvideoเว็บแคมที่ควบคุม (เมื่อlsmodวิ่ง) แน่นอนคุณต้องรู้ว่าโมดูลใดรับผิดชอบเว็บแคมของคุณ มันง่ายที่จะตรวจสอบว่าคุณจะเห็นการเปลี่ยนแปลงผลลัพธ์ในขณะที่เรียกใช้โปรแกรมเช่นชีส

โปรดทราบว่าการพูดอย่างเคร่งครัดการนับจำนวนบวกเท่านั้นหมายความว่ามีบางสิ่งเปิดอุปกรณ์ไม่ได้หมายความว่าจะมีการถ่ายภาพ


การนับจำนวนบวกยังไม่ได้หมายความว่ามีบางอย่างที่มีอุปกรณ์ดังกล่าวเปิดอยู่ในขณะนี้ซึ่งตรงกันข้ามกับที่อาจเปิดขึ้นมาในเวลาเพียงเสี้ยววินาทีในการถ่ายภาพแล้วจึงปิด ด้วยรูปแบบการใช้งานเช่นนี้คุณจะต้องโชคดีอย่างไม่น่าเชื่อที่จะจับมันในการแสดง
CVn

@ MichaelKjörlingนั่นเป็นเหตุผลที่ฉันพูดถึง "เมื่อlsmodวิ่ง" มันสมควรได้รับการขยายเนื่องจากสถานการณ์ที่คุณให้ (แม้ว่าในประสบการณ์ของฉันความล่าช้าของกล้องจะสูงพอที่จะเปิดอุปกรณ์การจับภาพและการปิดอุปกรณ์ใช้เวลาสักครู่) ดูที่การใช้อุปกรณ์โดยใช้fuserหรือlsofทนทุกข์ทรมานจากปัญหาเดียวกันแม้ว่า; วิธีที่มีประสิทธิภาพมากขึ้นนั้นจะต้องทำการเชื่อมต่อ V4L APIs โดยใช้ tracepoints หรือสิ่งที่คล้ายกัน
Stephen Kitt

@ MichaelKjörlingแน่นอน ในการจับรูปแบบการใช้งานนี้คุณจะต้องตรวจสอบการเข้าถึงไฟล์อุปกรณ์ไม่ใช่แค่ตรวจสอบที่จุดหนึ่งในเวลา
Gilles 'หยุดชั่วร้าย'

7

สมมติว่าสิ่งที่คุณต้องการคือการทำให้แน่ใจว่าเว็บแคมของคุณไม่ได้ถูกใช้เมื่อคุณไม่ต้องการมันทางออกที่ง่ายที่สุดคือการตัดการเชื่อมต่อ (ถ้าภายนอก) เมื่อไม่ต้องการ หรือครอบคลุมเว็บแคม (เทปพันท่อก็ใช้ได้)

วิธีการทางกายภาพมีความปลอดภัยมากกว่าซอฟต์แวร์


1
เทปไม่ปิดกั้นไมโครโฟนซึ่งสามารถ (แม้กระทั่งในเว็บแคมในตัว) ที่มีโครงสร้างเป็นส่วนหนึ่งของกล้องมากกว่าผ่านโมดูลเสียง
Chris H

ฉันอยากจะแนะนำอย่างยิ่งกับเทปพันท่อเพราะมันสามารถทิ้งสิ่งตกค้างได้ง่าย ฉันใช้เทปราคาประหยัด (หาได้จากร้านขายยา) เพราะมันเหลือน้อยมากเมื่อถอดออกโดยมีสติ๊กเกอร์เล็ก ๆ ปกคลุมเลนส์ด้านเหนียวไปด้านเหนียว วิธีนี้จะไม่มีความเสี่ยงต่อการตกค้างของกาวบนเลนส์ มันเป็นที่ยอมรับวิธีการแก้ปัญหาที่เป็นเพียงเล็กน้อยในด้านถาวร; คุณไม่ต้องการถอดและใส่เทปกลับมาตลอดเวลา
CVN

@ChrisH ที่ไม่มีเหตุผลใด ๆ (แดกดันสุดยอดของคุณคือภาษาอังกฤษ ... ) คุณหมายถึงอะไร?
theonlygusti

@ theonlygusti ฉันหมายถึงโมดูลเช่นเดียวกับในชิ้นส่วนของฮาร์ดแวร์; แน่นอนในหัวข้อนี้มันจะมีเหตุผลมากขึ้นที่จะอ่านมันเป็นซอฟต์แวร์ความหมายซึ่งจะไม่สมเหตุสมผล เทปไม่ปิดกั้นไมโครโฟน ไมโครโฟนสามารถเป็นส่วนหนึ่งของฮาร์ดแวร์เว็บแคมแทนหรือนอกเหนือจากสิ่งที่เชื่อมต่อผ่านการ์ดเสียง (คำที่ฉันหลีกเลี่ยงเพราะฮาร์ดแวร์ SoC) ดังนั้นเพื่อตรวจสอบว่ามีการเปิดใช้งานเว็บแคม / แอคทีฟ / การสอดแนมหรือไม่คุณอาจกังวลมากกว่าเรื่องของเลนส์ แต่ระบบลินุกซ์เดียวที่ฉันมีที่นี่คือ chromebook (crouton) ดังนั้นจึงมีข้อ จำกัด เล็กน้อย
Chris H

1
แน่นอน แต่นั่นไม่ใช่คำถาม
Gilles 'หยุดความชั่วร้าย'

7

ในระบบมีเหตุผลใด ๆ จนกว่าคุณจะมีการตั้งค่า chroots กับของตัวเอง/dev, /devแฟ้มอุปกรณ์ทั้งหมดอยู่ภายใต้ มีเพียง root เท่านั้นที่สามารถสร้างไฟล์อุปกรณ์ได้ดังนั้นคุณไม่ต้องกังวลกับผู้ใช้ที่ประสงค์ร้ายที่สร้างไฟล์อุปกรณ์ที่อื่น

ดังนั้นสิ่งที่คุณต้องทำคือค้นหาไฟล์ภายใต้/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 'หยุดชั่วร้าย'

ควรตรวจสอบที่ระดับเคอร์เนล สามารถเพิ่มอุปกรณ์ได้ทุกที่: เช่นmknod /root/video0 b 81 0
user123456

@ j658063.mvrht.com แต่มีเพียง root เท่านั้นที่ทำได้ ถ้ารูทไม่ทำสิ่งที่โง่คุณก็ปลอดภัย ถ้ารูททำสิ่งที่งี่เง่าคุณก็จะเมาอยู่แล้ว - รูทสามารถเปลี่ยนเคอร์เนลเพื่อซ่อนกระบวนการ
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.