GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Les capacités peuvent-elles être utilisées dans des scripts sans définir le binaire de l'interpréteur ?

En ce moment, j'utilise cap_net_bind_service MY_USERNAME dans /etc/security/capability.conf.
Il ne me reste plus qu'à définir cap_net_bind_service+i sur l'interpréteur de mon langage de script préféré pour pouvoir ajouter CAP_NET_BIND_SERVICE à l'effectif défini via libcap[-ng].

Cela fonctionne bien, mais je me demande s'il existe un moyen d'obtenir la même chose sans fixer de limite au binaire de l'interpréteur. Bien que ce ne soit pas un gros problème (les autres comptes d'utilisateurs n'ont pas le plafond, ils ne peuvent donc pas l'utiliser même avec le bit défini sur le binaire de l'interpréteur), c'est un peu ennuyeux car je dois réinitialiser le drapeau chaque fois que l'interpréteur est mis à jour.

Réponse acceptée :

Habituellement, les capacités sont héritées des enfants. Comme indiqué dans la page de manuel :

Un enfant créé via fork(2) hérite des copies des ensembles de capacités de son parent.

Le problème avec les scripts est qu'ils ne sont pas directement exécutables. Le noyau passe par une liste de vérifications (le code du noyau se trouve dans fs/binfmt_*.c). L'un d'eux est "binfmt_script.c", qui vérifie la première ligne pour un shebang, puis appelle le véritable interprète (celui du shebang) avec votre script comme argument. En tant que tel, l'interpréteur standard/commun est appelé et lit simplement votre script en tant qu'argument.

Cela signifie que vous devrez définir la capacité sur l'interpréteur, pas sur le script.
La même chose s'applique à suid bits et autres drapeaux spéciaux.

Donc, soit vous faites une copie de votre interpréteur, y définissez les capacités que vous souhaitez (vérifiez également que personne ne peut y accéder via chmod/chown), et appelez cet interpréteur copié dans votre shebang.
Vous pouvez également faire le setcap logique dans votre script.


Linux
  1. Modules du noyau Linux sans lesquels nous ne pouvons pas vivre

  2. Comprendre les scripts rc sous Linux

  3. Comment puis-je supprimer un utilisateur sous Linux lorsque le système indique qu'il est actuellement utilisé dans un processus

  4. Puis-je exécuter un binaire Linux sans que le bit d'autorisation d'exécution ne soit défini ?

  5. Comment définir l'affinité processeur d'un processus sous Linux ?

Comment définir ou modifier le fuseau horaire sous Linux

Les 7 espaces de noms Linux les plus utilisés

Commande Linux DF – Les 3 options les plus utilisées

Comment configurer le pare-feu UFW sous Linux

Comment puis-je déterminer la cause de l'augmentation lente de l'espace disque utilisé sous Linux ?

Comment définir l'interface réseau préférée sous Linux