GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso sostituire lsof all'interno di un Docker (nativo, non basato su LXC)

(NOTA:nella domanda non è chiaro come il richiedente stia entrando nel contenitore docker. Sto assumendo docker exec -it CONTAINER bash è stato utilizzato.)

Ho riscontrato questo problema durante l'utilizzo di un'immagine docker basata su centos:7 con la versione docker 1.9.0 e per ovviare a questo, ho appena eseguito:

docker exec --privileged -it CONTAINER bash

Nota l'inclusione di --privileged .

La mia ingenua comprensione del motivo per cui è necessario:sembra che docker si sforzi di rendere il contenitore più "sicuro", come documentato qui.


Ah, la trama si infittisce. Se qualcuno ha una risposta migliore, per favore scrivila e la accetterò, se accettabile. Ma qui il motivo apparente. Che negligenza da parte mia ignorare i file di registro sull'host :

Jun 12 01:29:46 hostmachine kernel: [140235.718807] audit_printk_skb: 183 callbacks suppressed
Jun 12 01:29:46 hostmachine kernel: [140235.718810] type=1400 audit(1402536586.521:477): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="trace" denied_mask="trace" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718860] type=1400 audit(1402536586.521:478): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718886] type=1400 audit(1402536586.521:479): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718899] type=1400 audit(1402536586.521:480): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718921] type=1400 audit(1402536586.521:481): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718954] type=1400 audit(1402536586.521:482): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719001] type=1400 audit(1402536586.521:483): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719043] type=1400 audit(1402536586.521:484): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719086] type=1400 audit(1402536586.521:485): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719126] type=1400 audit(1402536586.521:486): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"

Quindi Apparmor sembra essere il colpevole, anche se dovrò capire come convincerlo a consentire ciò senza compromettere la sicurezza dell'host/contenitore o vedere se è possibile senza compromettere la sicurezza.


Un'altra possibilità, questa volta con un'impostazione di sicurezza più dettagliata:assegna il privilegio SYS_PTRACE al contenitore docker:

docker run --cap-add=SYS_PTRACE ...

Linux
  1. Trovare file che un utente non può leggere?

  2. Come posso verificare che un file esista ed eseguire un comando in caso contrario?

  3. read(2) può restituire zero quando non è in EOF?

  4. Come posso verificare se PostgreSQL è installato o meno tramite script Linux?

  5. Come posso fare in modo che R legga le mie variabili ambientali?

Come posso eseguire il ping di altri contenitori in una rete docker tramite il loro nome host?

Come posso determinare quale processo ha un file aperto in Linux?

Come posso sapere se l'opzione set -e è abilitata o meno?

Come correggere l'updateb:non riesci a trovare il gruppo `mlocate' su entware?

Android - Come posso compilare applicazioni native sul mio telefono rooted?

Come faccio a sapere che sto correndo all'interno di uno schermo Linux o no?