4859 links
  • GuiGui's Show

  • Home
  • Login
  • RSS Feed
  • Tag cloud
  • Picture wall
  • Daily
Links per page: 20 50 100
page 1 / 1
  • Rappels de sécurité concernant sudo

    Ces derniers temps, j'ai utilisé sudo pour faire du contrôle d'accès, donc j'ai dû réviser les bases :

    • sudo ne prend pas en charge les regex dans sa configuration, uniquement les glob patterns, un sous-ensemble de caractères substituables. Il n'est donc pas possible d'indiquer la répétition d'un ou de plusieurs caractères avec « + », « * » ou « {} », par exemple ;

    • Le caractère substituable « * » autorise toujours plus d'actions que ce que l'on pense initialement en écrivant la règle sudo. Parfois à cause des programmes à qui l'on donne des droits avec sudo (exemple avec less, mais on peut faire la même avec vim qui permet d'exécuter des commandes ;)), très souvent à cause de la configuration de sudo.

    Exemples :

    • toto ALL=(titi) NOPASSWD: /usr/bin/id : l'utilisateur toto peut se faire passer pour l'utilisateur titi afin d'exécuter la commande id sans avoir à saisir un mot de passe. Tous les paramètres du programme id sont utilisables (« - g », par exemple). Plus largement, tous les arguments sont possibles : autoriser less ou cat donne la possibilité de consulter tooous les fichiers du système en se faisant passer pour titi. C'est pourquoi il ne faudrait jamais avoir une entrée dans la configuration de sudo de la forme toto ALL=(root) NOPASSWD: /usr/bin/id * si le but est d'autoriser tous les arguments d'une commande (lire les points suivants pour connaître les dangers de l'entrée sudo énoncée à l'instant) ;

    • toto ALL=(titi) NOPASSWD: /usr/bin/id -[gu] (pas « -(g|u) » puisque sudo ne prend pas en charge les regex) : toto peut lancer id -u et id -g sans mot de passe en se faisant passer pour titi ;

    • toto ALL=(root) NOPASSWD: /usr/bin/ssh root@cluster[0-9] id : toto peut se faire passer pour root afin de se connecter, en SSH, aux machines nommées clusterX où X doit être entre 0 et 9 inclus. Pour autoriser les dizaines (« clusterXX ») : « cluster[0-9][0-9] ». Surtout pas « cluster[0-9]* » : il ne s'agit pas d'une regex, donc « * » n'agit pas sur le groupe précédent afin de le répéter 0 ou n fois : il autorise clusterX (où X = entre 0 et 9, ça ne change pas) suivi de n'importe quoi (des chiffres, des lettres, des espaces, etc.). Toto peut donc exécuter : sudo ssh root@cluster10 'rm -rf / ; id' ;

    • toto ALL=(root) NOPASSWD: /usr/bin/ssh root@web[0-9]*.monorganisation.example id : toto pourra exécuter sudo ssh root@web1 rm -rf /#.monorganisation.example id. # = commentaire, tout ce qui suit ne sera pas exécuté. Il faudra juste définir le nom web1 dans /etc/hosts (sauf s'il y a une instruction search ou domain dans /etc/resolv.conf).

    Il y a un cas que je ne sais pas résoudre sur le plan de la lisibilité :

    • On veut se connecter à un serveur pour exécuter un script maison. Jusque-là, c'est facile : toto ALL=(root) NOPASSWD: /usr/bin/ssh root@srv.monorganisation.example /usr/local/bin/script.sh ;

    • S'il y a des arguments facultatifs et/ou dont la valeur change ? Facile : toto ALL=(root) NOPASSWD: /usr/bin/ssh root@srv.monorganisation.example /usr/local/bin/script.sh -a start, /usr/bin/ssh root@srv.monorganisation.example /usr/local/bin/script.sh -a stop. Mais plus il y a d'arguments et de valeurs, plus la configurarion de sudo devient lourde, longue et illisible ;

    • Et si, parmi les arguments du script, il y a une chaîne de 4 caractères variables ? toto ALL=(root) NOPASSWD: /usr/bin/ssh root@srv.monorganisation.example /usr/local/bin/script.sh -a start -b [a-z][a-z][a-z][a-z], /usr/bin/ssh root@srv.monorganisation.example /usr/local/bin/script.sh -a stop ;

    • Et si, parmi les arguments du script, il y a une longue chaîne de caractères (comme un hash) ? Il faut les préciser caractère par caractère ;

    • Au final, la configuration de sudo devient illisible.
    Sat 14 Nov 2020 01:05:03 PM CET - permalink -
    - http://shaarli.guiguishow.info/?e6SBSw
Links per page: 20 50 100
page 1 / 1
Mentions légales identiques à celles de mon blog | CC BY-SA 3.0

Shaarli - The personal, minimalist, super-fast, database free, bookmarking service by the Shaarli community - Help/documentation