GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je remplacer lsof dans un Docker (natif, pas basé sur LXC)

(REMARQUE :il n'est pas clair dans la question comment le demandeur entre dans le conteneur Docker. Je suppose docker exec -it CONTAINER bash a été utilisé.)

J'ai eu ce problème lors de l'utilisation d'une image docker basée sur centos:7 avec la version docker 1.9.0 et pour surmonter cela, j'ai juste couru :

docker exec --privileged -it CONTAINER bash

Notez l'inclusion de --privileged .

Ma compréhension naïve de la raison pour laquelle cela est nécessaire :il semble que docker fasse un effort pour que le conteneur soit plus "sécurisé", comme documenté ici.


Hah, l'intrigue s'épaissit. Si quelqu'un a une meilleure réponse, veuillez l'écrire et je l'accepterai, si elle est acceptable. Mais voici la raison apparente. Quelle négligence de ma part d'ignorer les fichiers journaux sur l'hôte :

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"

Apparmor semble donc être le coupable, bien que je doive trouver comment le convaincre d'autoriser cela sans compromettre la sécurité de l'hôte/du conteneur ou voir si c'est possible sans compromettre la sécurité.


Autre possibilité, cette fois avec un paramètre de sécurité plus fin :donner le privilège SYS_PTRACE au conteneur docker :

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

Linux
  1. Un script peut-il être exécutable mais pas lisible ?

  2. Comment puis-je vérifier qu'un fichier existe et exécuter une commande sinon?

  3. Comment puis-je lire la documentation sur les commandes zsh intégrées ?

  4. Comment puis-je envoyer un ping à d'autres conteneurs dans un réseau Docker via leur nom d'hôte ?

  5. Comment puis-je déterminer quel processus a un fichier ouvert sous Linux ?

Comment exécuter une tâche cron dans un conteneur docker

Comment puis-je savoir si l'option set -e est activée ou non ?

Android - Comment puis-je compiler des applications natives sur mon téléphone rooté ?

Comment puis-je savoir quels fichiers un processus a ouverts ?

Comment savoir si je cours dans un écran Linux ou non ?

Pourquoi ma crontab ne fonctionne-t-elle pas et comment puis-je la dépanner ?