日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么在Docker里使用gdb调试器会报错

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么在Docker里使用gdb调试器会报错 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

前幾天一個小伙伴發郵件問我,他在docker內部使用gdb調試時刻遇到了gdb如下報錯信息
ptrace:Operation not permitted
當時我的答復是在docker create或者docker run時刻開啟萬精油--privileged參數。小伙伴的問題就此解決了。
但是事實并非如此簡單

Docker上涉及到gdb調試權限的特性

capabilities

Docker借用了linux對進程設置capabilities,而其子進程繼承父進程capabilites特性來完成對容器capacities的控制。Docker create和docker run參數中有下面兩個參數可以對容器默認的capabilites進行修改:
--cap-add //添加某個capabilites屬性 --cap-del //剔除某個默認的capabilites屬性
cap-add和cap-del可以設置的參數可以通過下面鏈接查詢到:
https://docs.docker.com/engine/reference/commandline/run/

  • Docker 將gdb調試需要SYS_PTRACE屬性被禁止掉了,所以gdb在調試的時候會顯示ptrace被禁止。所以想在docker內部調試gdb解決辦法就是create和run的時候帶上--cap-add sys_ptrace*
    例如:
docker run -it --cap-add sys_ptrace centos:latest /bin/bash root@7f5a2130e975>cd /home/ root@7fa2130e975> vi test.c \#include <stdio.h> int main(){int i = 0;printf(“Testing begin\n”);While(1){printf(“Loop cnt:%d\n”,i++);sleep(10); }}root@7fa2130975>gcc -c -g -o test.o test.c root@7fa2130975>gcc -o test -g test.o root@7fa2130975>./test& [1] 18 root@7fa2130975>gdb attach 18 //ok可以調試了

但是這并不是問題的全部,對于上述測試程序,如果執行下面命令gdb又有告警出來

root@7fa2130975>gdb ./test (gdb) r Warning:Error disabling address space randomization:Operation not permitted

雖然依然可以調試,但是我們還是需要搞清楚上述告警的意思。地址隨機化是linux一項安全特性,它允許內核進程啟動每次加載庫的時候都在隨機化的分布在進程虛擬內存地址空間上(早期固定的庫要加載到固定地方,如果固定地方被占用才加載到別地方。會造成多次加載程序,其庫地址都不變。如此有安全隱患)。在gdb調試中gdb默認需要關閉linux的地址隨機化功能,可以通過gdb 命令set disable-randomization off關閉。如果在地址隨機化下調試同一段程序,多次run時候可以看到它的運行地址和函數地址不一致,這沒有什么太大的問題。問題可以結束了
關于gdb 設置地址隨機化開關詳情見下面鏈接:
http://visualgdb.com/gdbreference/commands/set_disable-randomization
當然上述告警其實也可以不通過gdb設置來完成,可以通過下面介紹的Docker參數可以達成。

seccomp

Docker默認情況下為每個容器都設置了一個默認的seccom profile。一般情況下無需修改。但是docker依然支持
docker create或者docker run時候通過--security-opt seccomp=xxx參數來設置docker容器的seccomp策略。
xxx可以是一個json格式文件,里面定義了docker容器每個具體的seccomp規則。也可以是字符unconfined表示關閉默認的docker seccomp 規則。
可以通過下面命令徹底關閉docker默認seccomp引入的任何限制
docker run -it --security-opt seccomp=unconfined centos:lastes
在運行上述gdb 調試命令run一個進程,告警信息終于徹底消失了。
Docker設置的seccomp 默認profile規則可以通過如下鏈接查詢到:
https://docs.docker.com/engine/security/seccomp/
本文就不再做詳細展開了。

Docker背后的實現技術

Docker實現seccomp控制

從Linux 2.6.23開始支持這種特性對進程能夠使用的系統調用進行控制,如此可以進行一些安全性策略。sandbox就是依賴于此技術。docker梳理了Linux的系統調用,從300+個系統調用中屏蔽掉了44個系統調用,但是又最大程度的不影響正常的應用使用系統。

  • 在Docker engine上有一個叫seccomp模塊提供了為docker提供默認seccomp規則(GetDefaultProfile()函數),而我們在命令行配置的seccomp屬性會覆蓋默認的seccomp規則(在setSeccomp()函數里)。最終規則在engine內部創建runc spec時刻函數createSpec生產。將seccomp傳遞到oci runtime spec的spec.linux.seccomp字段里。
  • 而runc通過seccomp庫的InitSeccomp()函數,在Init一個容器時刻和exec觸發的將一個進程setns到容器內部時刻調用此函數 將seccomp屬性設置到容器的init進程或者exec進程里。
  • Linux進程屬性里有seccomp屬性,此屬性也會父子繼承,通過/proc/$pid/status里可以看到進程的seccomp屬性。

Docker實現capabilities

從Linux 2.1開始支持的特性,將超級用戶的權限劃分為多個組,每個進程都有一個capabilities屬性,子進程從自己的父進程中基礎capacities。這個特性和sudo不一樣,因為sudo控制粒度太粗;而capabilities控制粒度很精細。linux有一系列的調用可以設置、查看,清除和比較進程的capabilities。可以通過:
man cap_set_flag
來查看這一系列的系統調用。而具體進程的capacities可以通過/proc/$pid/status中:
Capxxx字段看到,本文就不再展開。感興趣的朋友可以參考
https://www.cnblogs.com/iamfy/archive/2012/09/20/2694977.html

  • 在oci runtime spec里規定了spec.Process.Capabilities屬性。runc中finializeNamespace()根據此屬性對進程的capabilities進行設置。此函數會在init容器和exec加一個進程到容器時刻調用。

總結

以上是生活随笔為你收集整理的为什么在Docker里使用gdb调试器会报错的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 肉丝美足丝袜一区二区三区四 | 亚洲第二页 | 免费成人进口网站 | 国产一区二区久久精品 | 婷婷久久五月 | 日本免费网站在线观看 | 亚洲综合一区在线 | 欧美色噜噜 | 亚洲影院在线播放 | 麻豆av电影在线观看 | 国产福利在线视频观看 | 91亚洲综合 | 天天射夜夜爽 | 欧美三级色图 | 黑人巨大猛烈捣出白浆 | 欧美大色一区 | 亚洲欧美一区二区视频 | 九色国产| 成人1区2区3区 | 亚洲aaaaaaa | 一品道av| 韩国三级bd高清中字2021 | 日韩大片免费在线观看 | 亚洲精品一区二区三区新线路 | www.一区二区三区四区 | 亚洲午夜精品久久久久久人妖 | 男人av在线| 国产福利一区在线观看 | 欧美精品免费一区二区三区 | 91久久极品少妇xxxxⅹ软件 | 免费在线观看毛片 | 日本一区二区三区在线观看视频 | 喷潮在线观看 | 亚洲国产成| 91免费国产在线 | 影音先锋啪啪 | 一区二区福利 | 波多野结衣福利 | 无限资源日本好片 | 精品成人av一区二区在线播放 | 99久久婷婷 | 中文字幕视频 | 日韩亚州 | 91色站| 久久艹在线观看 | 免费观看亚洲 | 日韩激情网址 | 精品亚洲一区二区三区四区五区 | 天天躁狠狠躁 | 精品国产一区二区三区久久久 | 欧美20p| 亚洲性久久| 女同毛片一区二区三区 | 日韩少妇一区 | 色婷婷久久久 | 少妇无码av无码专区在线观看 | 精品肉丝脚一区二区三区 | 青青草91视频 | 秋霞7777鲁丝伊人久久影院 | 国产亚洲制服 | 中文字幕久久久久久久 | 桃色一区| 三级影片在线播放 | 手机看片日韩在线 | 久久久久久久久久久久久久久久久久久 | 无遮挡边吃摸边吃奶边做 | 午夜网| 97国产精品视频人人做人人爱 | 特级做a爱片免费69 少妇第一次交换又紧又爽 亚洲大胆人体 | 天天躁夜夜躁狠狠是什么心态 | 国产精品xxx | 寂寞午夜影院 | 四虎成人免费视频 | 亚洲AV成人无码久久 | 精品国产一区二区在线观看 | 国产羞羞 | 国产精品xxx在线 | 天天操天天碰 | 久久人妖 | 国产不卡网 | 天天干夜夜草 | 视频一区中文字幕 | 狠狠干天天爱 | 精品视频中文字幕 | 久久久久九九九 | 欧美日本中文字幕 | 天天想你在线观看完整版电影免费 | 你懂的在线免费观看 | 亚洲国语| wwwwxxxx欧美 | 亚洲精品v天堂中文字幕 | 99热8| 精品欧美一区二区久久久久 | 亚洲成人免费av | 欧美乱码精品一区二区 | 伊人一区二区三区四区 | 青青草超碰 | 三级色视频 | 在线视频精品一区 |