Comment utiliser $ ORIGIN et l’application suid?

J’utilise python avec setcap CAP_NET_RAW activé. Mon script python importe une bibliothèque partagée qui a $ ORIGIN dans sa RPATH. Puisque mon python est maintenant une application suid, $ ORIGIN n’est pas évalué et la bibliothèque ne se charge pas correctement (ceci est dû à une fuite de sécurité trouvée dans la glibc ). Est-il possible de dire à l’éditeur de liens que le chemin de ma bibliothèque est sécurisé et de charger la bibliothèque de toute façon?

Quelques notes supplémentaires:

  1. Je n’ai besoin de cette fonctionnalité que dans la phase de développement. Je ne cherche pas de solution de production.
  2. Lorsque vous travaillez en tant que root, tout fonctionne.
  3. Je ne veux pas travailler en tant que root.

Merci Dave

Vous pouvez en essayer un. Considérez que est le chemin absolu après avoir résolu la référence rpath $ORIGIN .

  1. Ré-exécuter ldconfig après lui avoir dit où trouver votre bibliothèque

     $ echo "" > /etc/ld.so.conf.d/my-new-library.conf $ ldconfig -v 
  2. Si l’exécution en tant que root n’est pas une option, exportez LD_LIBRARY_PATH avec le répertoire approprié pour chaque exécution du processus.

     $ echo "export LD_LIBRARY_PATH=" >> ~/.bashrc $ export LD_LIBRARY_PATH= $ # then run your stuff... 

Avez-vous essayé sudo?

Au lieu de $ ORIGIN, utilisez des chemins fixes pendant le développement car ils fonctionneront sur les programmes setuid. Ne changez pas votre processus de construction principal, utilisez simplement le patch pour définir le chemin vers ce dont vous avez besoin. Vous pouvez créer un script shell qui fait quelque chose comme:

 ln=`readelf -d |grep RPATH` IFS=: set -- $ln newrpath=`echo $2 |sed 's/\$ORIGIN/\/devel\/myprog\/lib/'` patchelf --set-rpath newrpath myprogram 

Alors votre binary ne cherchera plus $ ORIGIN /../ lib mais /devel/myprog/lib/../lib