web-dev-qa-db-ja.com

間違ったパスワードが入力されたときにウェブカメラで写真を撮ることはできますか?

私はラップトップを使用しています。 Ubuntuマシンでサポートすることを考えていました。間違ったパスワードを入力すると、後でアクセスしようとしている人を明らかにする写真が撮られます。

私はあちこち検索しましたが、私が見つけた唯一のことはMacでこれを行うものです。 Ubuntuが同じことをするためのスクリプトを書くことは可能ですか?.

可能であれば、これを実現するスクリプトまたはソフトウェアは何ですか。

72
twister_void

この投稿 に基づく BkkBonanza によるUbuntuforums.

これはPAMを使用するアプローチであり、失敗したすべてのログイン試行に対して機能します。 SSH、仮想端末、または通常のログイン画面を使用すると、すべてが最終的にPAMによって処理されるため、問題ではありません。

  1. インストール ffmpeg Install ffmpeg 、これをウェブカメラの画像を取得するコマンドラインの方法として使用します。 Update:Ubuntu 14.04にアップグレードすると、ffmpegは削除されます。以下のスクリプトでは、ffmpegの代わりにavconvを使用できます。個別に何かをインストールする必要はありません。

  2. どこかに小さなスクリプトを作成します。 /usr/local/bin/grabpicture次のコンテンツ:

    #!/bin/bash
    ts=`date +%s`
    ffmpeg -f video4linux2 -s vga -i /dev/video0 -vframes 3 /tmp/vid-$ts.%01d.jpg
    exit 0  #important - has to exit with status 0
    

    ウェブカメラの実際のビデオデバイスで/dev/video0を変更し、画像を保存するパスを選択します-/tmpを選択します。 Ubuntuの新しいバージョンでは、avconvSudo apt-get install libav-tools)の代わりにffmpegを使用します。

  3. 実行可能にします。 chmod +x /usr/local/bin/grabpicture

  4. /usr/local/bin/grabpictureを呼び出すだけでテストします。 /tmp/vid....jpgにファイルが表示されるかどうかを確認します。

  5. 失敗するたびにこれを呼び出すようにPAMを構成します。

    注:これを慎重に行う-これが失敗した場合、通常の方法でシステムに再度アクセスすることはできません。

    1. ルートアクセス(Sudo -i)でターミナルウィンドウを開き、開いたままにします-次の手順で失敗した場合に備えて。
    2. お気に入りのエディターで/etc/pam.d/common-authを開きます。 gksudo gedit /etc/pam.d/common-authを実行します。このファイルの行の順序が重要である以下の手順に留意してください。
    3. 以下の行を見つけます。デフォルトでは、1行beforepam_deny.soの行です。 12.04システムでは、次のようになります。

      auth    [success=1 default=ignore]      pam_unix.so nullok_secure
      
    4. この行でsuccess=1success=2に変更して、成功時にスクリプトをスキップします。これは重要なステップです。

    5. すぐ下に、新しいスクリプトを追加して実際のスクリプトを呼び出します。

      auth    [default=ignore]                pam_exec.so seteuid /usr/local/bin/grabpicture
      
    6. ファイルを保存して閉じます。何も再起動する必要はありません。

  6. 試して。

    1. 新しいターミナルウィンドウで、通常のユーザーとして、su -l usernameを試して、ユーザー名usernameを使用して別のユーザーとしてログインします(もちろん実際のユーザーで変更します)。故意に間違ったパスワードを入力してください。この結果が新しい写真になるかどうかを確認してください。
    2. 上記と同じですが、正しいパスワードを入力してください。ログインしていて、写真が撮られていないかどうかを確認してください。
  7. テストが成功した場合、DE(Unity/KDE/...)からログアウトできます。ログイン画面から間違ったパスワードを入力すると、同じように表示されます。

59
gertvdijk