Rakeタスクのサニタイズアップロード

GitLab 11.9以降、JPGまたはTIFF画像のアップロードからEXIFデータが自動的に取り除かれるようになりました。

EXIFデータには機密情報(GPSの位置情報など)が含まれている可能性があるため、GitLabの以前のバージョンにアップロードされた既存の画像からEXIFデータを削除することができます。

要件

このRakeタスクを実行するには、exiftool がシステムにインストールされている必要があります。GitLab.Rakeをインストールした場合は、GitLab:

  • Omnibusパッケージを使えば、準備は万端です。
  • ソースから、exiftool がインストールされていることを確認します:

     # Debian/Ubuntu
     sudo apt-get install libimage-exiftool-perl
    
     # RHEL/CentOS
     sudo yum install perl-Image-ExifTool
    

既存のアップロードからEXIFデータを削除

既存のアップロードからEXIFデータを削除するには、次のコマンドを実行します:

sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif

デフォルトでは、このコマンドは “ドライラン” モードで実行され、EXIF データは削除されません。 このコマンドは、画像をサニタイズすべきかどうか(およびその数)をチェックするために使用できます。

Rakeタスクは以下のパラメータを受け付けます。

パラメータ タイプ 説明
start_id 整数 IDが同じかそれ以上のアップロードのみが処理されます。
stop_id 整数 IDが等しいか小さいアップロードのみが処理されます。
dry_run ブーリアン EXIF データを削除せず、EXIF データが存在するかどうかだけをチェックします。 デフォルトはtrue
sleep_time フロート 各画像を処理した後、何秒間一時停止するかを設定します。 デフォルトは0.3秒です。
uploader 指定されたアップローダーのアップロードに対してのみサニタイズを実行します:FileUploader,PersonalFileUploader, またはNamespaceFileUploader
since 日付 指定された日付より新しいアップロードに対してのみサニタイズを実行します。 例えば、以下のようになります、2019-05-01

アップロードが多すぎる場合は、次の方法でサニタイズを高速化できます:

  • sleep_time を低い値に設定。
  • 複数の Rake タスクを並列に実行し、それぞれのアップロード ID を別々の範囲に設定します(start_idstop_idを設定)。

すべてのアップロードからEXIFデータを削除するには、以下を使用します:

sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[,,false,] 2>&1 | tee exif.log

IDが100から5000の間のアップロードのEXIFデータを削除し、各ファイルの後に0.1秒間一時停止するには、以下を使用します:

sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[100,5000,false,0.1] 2>&1 | tee exif.log

出力はおそらく長くなるため、exif.log ファイルに書き込まれます。

アップロードのサニタイズに失敗した場合、Rakeタスクの出力にエラーメッセージが表示されるはずです。 典型的な理由としては、ストレージにファイルがないか、有効な画像ではないことが挙げられます。

イシューを報告し、イシューのタイトルに接頭辞「EXIF」を使用し、エラー出力と(可能であれば)画像を添えてください。