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_id
とstop_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」を使用し、エラー出力と(可能であれば)画像を添えてください。