+1. TIL lsof(dan fuser) tidak secara default melakukan apa yang Anda inginkan.
Celada
@celada, bisakah Anda jelaskan?
YoungFrog
Apa kekhawatiran Anda? Apakah video menonton Anda, atau apakah Anda juga khawatir tentang audio (dalam hal menutupi lensa tidak akan menyelesaikan masalah Anda)? Atau apakah ini tentang debugging atau bahkan rasa ingin tahu? #
Chris H
@YoungFrog Saya hanya memuji OP atas pertanyaan ini karena itu membuat saya belajar sesuatu. Saya awalnya berasumsi bahwa lsof /dev/video0akan menyukai semua proses yang memegang deskriptor file terbuka yang terhubung ke objek kernel vfs yang /dev/video0merujuk, tidak peduli jalur filesystem mana yang telah digunakan untuk membukanya, tetapi pertanyaan OP menjelaskan bahwa ini tidak benar.
Celada
Jawaban:
15
Jika kernel Anda menggunakan modul (yang sangat mungkin), salah satu cara untuk menentukan apakah suatu program mengakses webcam Anda adalah dengan melihat jumlah penggunaan modul:
$ lsmod | grep uvcvideo
uvcvideo 90112 0
Angka 0 pada bidang ketiga menunjukkan bahwa tidak ada perangkat yang terbuka untuk uvcvideowebcam yang dikendalikan (saat lsmoddijalankan). Tentu saja Anda perlu tahu persis modul mana yang bertanggung jawab atas webcam Anda; mudah untuk diperiksa, Anda akan melihat perubahan output saat menjalankan program seperti Keju.
Perhatikan bahwa, secara tegas, hitungan positif hanya berarti bahwa sesuatu telah membuka perangkat, itu tidak berarti gambar ditangkap.
Tidakkah hitungan positif juga hanya berarti bahwa sesuatu telah membuka perangkat seperti itu sekarang , sebagai lawan mungkin membukanya selama sepersekian detik untuk menangkap gambar dan kemudian menutupnya? Dengan pola penggunaan seperti itu, Anda harus sangat beruntung untuk menangkapnya saat beraksi.
CVn
@ MichaelKjörling itu sebabnya saya sebutkan "ketika lsmodberlari". Memang pantas ekspansi mengingat skenario yang Anda berikan (meskipun dalam pengalaman saya, latensi kamera cukup tinggi sehingga membuka perangkat, mengambil gambar dan menutup perangkat membutuhkan waktu cukup lama). Melihat penggunaan perangkat menggunakan fuseratau lsofmenderita masalah yang sama; pendekatan yang lebih kuat akan membutuhkan mengaitkan V4L API menggunakan tracepoints atau yang serupa.
Stephen Kitt
@ MichaelKjörling Memang. Untuk menangkap pola penggunaan ini, Anda harus memantau akses ke file perangkat, tidak hanya memeriksa pada satu titik waktu.
Gilles 'SO- stop being evil'
7
Dengan asumsi bahwa apa yang sebenarnya Anda inginkan adalah memastikan webcam Anda tidak digunakan saat Anda tidak menginginkannya , solusi paling sederhana adalah dengan mencabutnya (jika eksternal) saat tidak diperlukan. Atau menutupi webcam (hanya selembar lakban akan bekerja).
Pendekatan berbasis fisik jauh lebih aman daripada yang berbasis perangkat lunak.
Tape tidak menghalangi mikrofon, yang dapat (bahkan pada webcam bawaan) disusun sebagai bagian dari kamera daripada melalui modul suara.
Chris H
Saya akan sangat menyarankan terhadap lakban karena dapat dengan mudah meninggalkan residu. Saya telah menggunakan selotip bedah (tersedia di toko obat) karena hanya meninggalkan sedikit residu ketika dilepas, dengan stiker kecil yang menutupi lensa, sisi lengket ke sisi lengket. Dengan begitu tidak ada risiko residu lem pada lensa. Memang, itu adalah solusi yang sedikit di sisi permanen; Anda tidak ingin melepas dan memasang kembali kaset sepanjang waktu.
CVn
@ Chris, itu tidak masuk akal (ironisnya, SE top Anda adalah bahasa Inggris ...) Apa maksud Anda?
theonlygusti
@ theonlygusti yang saya maksud adalah modul seperti perangkat keras; tentu saja di utas ini akan lebih logis untuk membacanya sebagai perangkat lunak yang berarti, yang tidak masuk akal. Pita tidak menghalangi mikrofon. Mikrofon dapat menjadi bagian dari perangkat keras webcam, bukan atau selain dari apa pun yang terhubung melalui kartu suara (istilah yang saya hindari karena perangkat keras SoC). Jadi untuk menentukan apakah webcam diaktifkan / aktif / memata-matai Anda mungkin khawatir tentang lebih dari sekedar lensa. Tetapi satu-satunya sistem linux yang saya miliki di sini adalah chromebook (crouton) jadi agak terbatas.
Chris H
1
Tentu, tapi itu bukan pertanyaannya
Gilles 'SO- stop being evil'
7
Pada sistem waras apa pun, kecuali jika Anda telah mengatur chroot dengan milik mereka sendiri /dev, semua file perangkat berada di bawah /dev. Hanya root yang dapat membuat file perangkat, jadi Anda tidak perlu khawatir tentang pengguna jahat membuat file perangkat di tempat lain.
Jadi yang perlu Anda lakukan adalah mencari file di bawah /devyang merujuk ke perangkat yang sama dengan yang Anda minati.
Kemungkinan ini hanya akan ditampilkan /dev/video0. Biasanya, ada satu file perangkat untuk setiap perangkat, dan mungkin ada tautan simbolik tambahan ke sana.
Jadi jawaban praktis untuk pertanyaan Anda adalah yang sederhana. Cukup periksa proses apa yang membuka file perangkat.
fuser /dev/video0
Jika Anda ingin memantau akses (mis. Menangkap proses yang dapat membuka file perangkat kapan saja), gunakan salah satu metode pemantauan akses file Linux pada file perangkat: atur arloji (dan periksa proses apa yang sudah memiliki perangkat itu) file terbuka)
inotifywait -m -e open,close /dev/video0 &
sleep 1; fuser /dev/video0 # check for processes that have already opened the device
atau mengatur aturan audit yang akan mencatat akses dalam log sistem (biasanya /var/log/audit/audit.log)
auditctl -w path=/dev/video0 &
sleep 1; fuser /dev/video0 # check for processes that have already opened the device
Poin bagus! Tapi, itu masih menderita dari masalah point-in-time dari solusi Angel! (Lih. Komentar di sana). Solusi perangkat lunak yang paling kuat mungkin untuk memasukkan perangkat ke dalam daftar hitam udevsehingga tidak mendapatkan file perangkat saat boot up; dan kemudian tambahkan file perangkat jika dan ketika Anda berencana untuk menggunakan kamera ... atau mencabutnya secara fisik.
jpaugh
@ jpaugh Pertanyaannya adalah menemukan proses menggunakan webcam, tidak menonaktifkan webcam.
Gilles 'SO- stop being evil'
Itu harus monitor di tingkat Kernel. Perangkat dapat ditambahkan di mana saja: mis.mknod /root/video0 b 81 0
user123456
@ j658063.mvrht.com Tapi hanya root yang bisa melakukannya. Jika root tidak melakukan hal-hal bodoh maka Anda aman. Jika root melakukan hal-hal bodoh maka Anda tetap kacau - root juga dapat mengubah kernel untuk menyembunyikan beberapa proses.
lsof
(danfuser
) tidak secara default melakukan apa yang Anda inginkan.lsof /dev/video0
akan menyukai semua proses yang memegang deskriptor file terbuka yang terhubung ke objek kernel vfs yang/dev/video0
merujuk, tidak peduli jalur filesystem mana yang telah digunakan untuk membukanya, tetapi pertanyaan OP menjelaskan bahwa ini tidak benar.Jawaban:
Jika kernel Anda menggunakan modul (yang sangat mungkin), salah satu cara untuk menentukan apakah suatu program mengakses webcam Anda adalah dengan melihat jumlah penggunaan modul:
Angka 0 pada bidang ketiga menunjukkan bahwa tidak ada perangkat yang terbuka untuk
uvcvideo
webcam yang dikendalikan (saatlsmod
dijalankan). Tentu saja Anda perlu tahu persis modul mana yang bertanggung jawab atas webcam Anda; mudah untuk diperiksa, Anda akan melihat perubahan output saat menjalankan program seperti Keju.Perhatikan bahwa, secara tegas, hitungan positif hanya berarti bahwa sesuatu telah membuka perangkat, itu tidak berarti gambar ditangkap.
sumber
lsmod
berlari". Memang pantas ekspansi mengingat skenario yang Anda berikan (meskipun dalam pengalaman saya, latensi kamera cukup tinggi sehingga membuka perangkat, mengambil gambar dan menutup perangkat membutuhkan waktu cukup lama). Melihat penggunaan perangkat menggunakanfuser
ataulsof
menderita masalah yang sama; pendekatan yang lebih kuat akan membutuhkan mengaitkan V4L API menggunakan tracepoints atau yang serupa.Dengan asumsi bahwa apa yang sebenarnya Anda inginkan adalah memastikan webcam Anda tidak digunakan saat Anda tidak menginginkannya , solusi paling sederhana adalah dengan mencabutnya (jika eksternal) saat tidak diperlukan. Atau menutupi webcam (hanya selembar lakban akan bekerja).
Pendekatan berbasis fisik jauh lebih aman daripada yang berbasis perangkat lunak.
sumber
Pada sistem waras apa pun, kecuali jika Anda telah mengatur chroot dengan milik mereka sendiri
/dev
, semua file perangkat berada di bawah/dev
. Hanya root yang dapat membuat file perangkat, jadi Anda tidak perlu khawatir tentang pengguna jahat membuat file perangkat di tempat lain.Jadi yang perlu Anda lakukan adalah mencari file di bawah
/dev
yang merujuk ke perangkat yang sama dengan yang Anda minati.Kemungkinan ini hanya akan ditampilkan
/dev/video0
. Biasanya, ada satu file perangkat untuk setiap perangkat, dan mungkin ada tautan simbolik tambahan ke sana.Jadi jawaban praktis untuk pertanyaan Anda adalah yang sederhana. Cukup periksa proses apa yang membuka file perangkat.
Jika Anda ingin memantau akses (mis. Menangkap proses yang dapat membuka file perangkat kapan saja), gunakan salah satu metode pemantauan akses file Linux pada file perangkat: atur arloji (dan periksa proses apa yang sudah memiliki perangkat itu) file terbuka)
atau mengatur aturan audit yang akan mencatat akses dalam log sistem (biasanya
/var/log/audit/audit.log
)sumber
udev
sehingga tidak mendapatkan file perangkat saat boot up; dan kemudian tambahkan file perangkat jika dan ketika Anda berencana untuk menggunakan kamera ... atau mencabutnya secara fisik.mknod /root/video0 b 81 0