Docker上でgdbを動かす
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