解決docker使用GDB,無(wú)法進(jìn)入斷點(diǎn)的問(wèn)題
問(wèn)題
docker里運(yùn)行g(shù)db,打了斷點(diǎn),卻無(wú)法進(jìn)入斷點(diǎn)
原因
docker為了保證主機(jī)安全,docker開(kāi)了很多安全設(shè)置,其中包括ASLR(Address space layout randomization),即docker里的內(nèi)存地址和主機(jī)內(nèi)存地址是不一樣的。
ASLR會(huì)導(dǎo)致GDB這種依賴地址的程序無(wú)法正常運(yùn)作。
解決方法
使用docker的超級(jí)權(quán)限,加入--privileged(兩個(gè)橫線,markdown語(yǔ)法
如:
docker run --privileged ……
GDB即可正常運(yùn)作
超級(jí)權(quán)限會(huì)關(guān)閉很多安全設(shè)置,可以更充分的使用docker能力
例如,docker里再開(kāi)docker都可以了,呵呵。
補(bǔ)充知識(shí):docker ptrace: Operation not permitted. 處理方法
docker中g(shù)db在進(jìn)行進(jìn)程debug時(shí),會(huì)報(bào)錯(cuò):
(gdb) attach 30721
Attaching to process 30721
ptrace: Operation not permitted.
原因就是因?yàn)閜trace被Docker默認(rèn)禁止的問(wèn)題。考慮到應(yīng)用分析的需要,可以有以下幾種方法解決:
1、關(guān)閉seccomp
docker run --security-opt seccomp=unconfined
2、采用超級(jí)權(quán)限模式
docker run --privileged
3、僅開(kāi)放ptrace限制
docker run --cap-add sys_ptrace
當(dāng)然從安全角度考慮,如只是想使用gdb進(jìn)行debug的話,建議使用第三種。
安全計(jì)算模式(secure computing mode,seccomp)是 Linux 內(nèi)核功能,可以使用它來(lái)限制容器內(nèi)可用的操作。
Docker 的默認(rèn) seccomp 配置文件是一個(gè)白名單,它指定了允許的調(diào)用。
下表列出了由于不在白名單而被有效阻止的重要(但不是全部)系統(tǒng)調(diào)用。該表包含每個(gè)系統(tǒng)調(diào)用被阻止的原因。
| Syscall | Description |
|---|---|
| acct | Accounting syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_PACCT. |
| add_key | Prevent containers from using the kernel keyring, which is not namespaced. |
| adjtimex | Similar to clock_settime and settimeofday, time/date is not namespaced. Also gated by CAP_SYS_TIME. |
| bpf | Deny loading potentially persistent bpf programs into kernel, already gated by CAP_SYS_ADMIN. |
| clock_adjtime | Time/date is not namespaced. Also gated by CAP_SYS_TIME. |
| clock_settime | Time/date is not namespaced. Also gated by CAP_SYS_TIME. |
| clone | Deny cloning new namespaces. Also gated by CAP_SYS_ADMIN for CLONE_* flags, except CLONE_USERNS. |
| create_module | Deny manipulation and functions on kernel modules. Obsolete. Also gated by CAP_SYS_MODULE. |
| delete_module | Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. |
| finit_module | Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. |
| get_kernel_syms | Deny retrieval of exported kernel and module symbols. Obsolete. |
| get_mempolicy | Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. |
| init_module | Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. |
| ioperm | Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. |
| iopl | Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. |
| kcmp | Restrict process inspection capabilities, already blocked by dropping CAP_PTRACE. |
| kexec_file_load | Sister syscall of kexec_load that does the same thing, slightly different arguments. Also gated by CAP_SYS_BOOT. |
| kexec_load | Deny loading a new kernel for later execution. Also gated by CAP_SYS_BOOT. |
| keyctl | Prevent containers from using the kernel keyring, which is not namespaced. |
| lookup_dcookie | Tracing/profiling syscall, which could leak a lot of information on the host. Also gated by CAP_SYS_ADMIN. |
| mbind | Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. |
| mount | Deny mounting, already gated by CAP_SYS_ADMIN. |
| move_pages | Syscall that modifies kernel memory and NUMA settings. |
| name_to_handle_at | Sister syscall to open_by_handle_at. Already gated by CAP_SYS_NICE. |
| nfsservctl | Deny interaction with the kernel nfs daemon. Obsolete since Linux 3.1. |
| open_by_handle_at | Cause of an old container breakout. Also gated by CAP_DAC_READ_SEARCH. |
| perf_event_open | Tracing/profiling syscall, which could leak a lot of information on the host. |
| personality | Prevent container from enabling BSD emulation. Not inherently dangerous, but poorly tested, potential for a lot of kernel vulns. |
| pivot_root | Deny pivot_root, should be privileged operation. |
| process_vm_readv | Restrict process inspection capabilities, already blocked by dropping CAP_PTRACE. |
| process_vm_writev | Restrict process inspection capabilities, already blocked by dropping CAP_PTRACE. |
| ptrace | Tracing/profiling syscall, which could leak a lot of information on the host. Already blocked by dropping CAP_PTRACE. |
| query_module | Deny manipulation and functions on kernel modules. Obsolete. |
| quotactl | Quota syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_ADMIN. |
| reboot | Don't let containers reboot the host. Also gated by CAP_SYS_BOOT. |
| request_key | Prevent containers from using the kernel keyring, which is not namespaced. |
| set_mempolicy | Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. |
| setns | Deny associating a thread with a namespace. Also gated by CAP_SYS_ADMIN. |
| settimeofday | Time/date is not namespaced. Also gated by CAP_SYS_TIME. |
| socket, socketcall | Used to send or receive packets and for other socket operations. All socket and socketcall calls are blocked except communication domains AF_UNIX, AF_INET, AF_INET6, AF_NETLINK, and AF_PACKET. |
| stime | Time/date is not namespaced. Also gated by CAP_SYS_TIME. |
| swapon | Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. |
| swapoff | Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. |
| sysfs | Obsolete syscall. |
| _sysctl | Obsolete, replaced by /proc/sys. |
| umount | Should be a privileged operation. Also gated by CAP_SYS_ADMIN. |
| umount2 | Should be a privileged operation. Also gated by CAP_SYS_ADMIN. |
| unshare | Deny cloning new namespaces for processes. Also gated by CAP_SYS_ADMIN, with the exception of unshare –user. |
| uselib | Older syscall related to shared libraries, unused for a long time. |
| userfaultfd | Userspace page fault handling, largely needed for process migration. |
| ustat | Obsolete syscall. |
| vm86 | In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN. |
| vm86old | In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN. |
以上這篇解決docker使用GDB,無(wú)法進(jìn)入斷點(diǎn)的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何在Docker中設(shè)置容器間通信的權(quán)限和訪問(wèn)控制策略
文章介紹了使用Docker網(wǎng)絡(luò)進(jìn)行訪問(wèn)控制的方法,包括自定義Bridge網(wǎng)絡(luò)、基于容器名稱的訪問(wèn)控制和使用網(wǎng)絡(luò)策略(如Calico)進(jìn)行更精細(xì)的控制2024-11-11
Centos7下安裝與卸載docker應(yīng)用容器引擎的方法
這篇文章主要介紹了Centos7下安裝與卸載docker應(yīng)用容器引擎的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
詳解docker進(jìn)行數(shù)據(jù)掛載的三種模式
Docker?提供了三種方式將數(shù)據(jù)從宿主機(jī)掛載到?Docker容器中:?volumes、bind?mounts、tmpfs?,這篇文章主要介紹了docker進(jìn)行數(shù)據(jù)掛載的三種模式,需要的朋友可以參考下2022-05-05
使用Docker部署Dashdot服務(wù)器儀表盤(pán)的步驟
Dashdot是一款簡(jiǎn)單、實(shí)用的開(kāi)源服務(wù)器儀表盤(pán),設(shè)計(jì)時(shí)考慮到了玻璃形態(tài),它旨在用于較小的?VPS?和私人服務(wù)器,這篇文章主要介紹了使用Docker部署Dashdot服務(wù)器儀表盤(pán),需要的朋友可以參考下2022-12-12

