Docker上のcentosでgdbを動かそうとしたら、以下のようなエラーが出たので対応策のメモを書きます。

エラー内容

warning: Error disabling address space randomization: Operation not permitted
Cannot create process: Operation not permitted
During startup program exited with code 127.

原因

Dockerのコンテナ上で動くプロセスはそのままではptraceが使えないらしいです。
ptraceシステムコールは実行中の他のプロセスの動作をみたり、メモリーを書き換えたりできます。
straceやgdbはptraceシステムコールを使ってデバッグ機能を実装しているみたいです。

対応

コマンド

以下コマンドでdockerを起動します。

docker run -i -t --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" [CONTAINER_NAME] /bin/bash

—cap-add=SYS_PTRACE と —security-opt="seccomp=unconfined”を追加しています。

注意

セキュリティレベルが低下するので、外部に公開された環境などで実施する際は注意しましょう。

その他

これでやっとCTF用の環境ができた。

参考

https://qiita.com/koemu/items/547e6e8d0043b815279e https://stackoverflow.com/questions/35860527/warning-error-disabling-address-space-randomization-operation-not-permitted/35860616 http://itchyny.hatenablog.com/entry/2017/07/31/090000