Forum Programmation.shell Deux questions sur le shell

Posté par .
Tags : aucun
4
9
jan.
2011
À quoi ça correspond quand on met un « \ » devant une commande ? J'avais lu quelque part qu'il faut faire « \su » et « \sudo ». Pourquoi ?
Pour inclure un fichier shell dans un autre, il vaut mieux utiliser « source » ou « . » ? Quelle est la différence entre les deux ?

Voilà, deux questions pour les spécialistes du shell, que je me pose depuis un moment. Malheureusement quand on lui parle de « \ » ou de « . », google n'est pas très utile ;-)
  • # Re: Deux questions

    Posté par . Évalué à 10.

    Le \ sert à ignorer les alias et autres fonctions du bashrc.
    C'est une bonne pratique de l'utiliser avec su et sudo pour éviter les alias malicieux.

    Pour source et . c'est strictement là même chose.
    • [^] # Re: Deux questions

      Posté par . Évalué à 6.

      Pour source et . c'est strictement là même chose.

      Par contre 'source' n'est pas POSIX, contrairement à '.'.
    • [^] # Re: Deux questions

      Posté par . Évalué à 10.

      en fait si c'est pour éviter les alias malicieux tu peux aller de brosser
      export PATH=/home/mechant/bin/:$PATH
      et ton \sudo ou \su il exécute le malicieux (bon c'est pas un alias mes le résultat est le même



      $ mkdir test
      $ cd test
      $ echo 'echo plop' > ls
      $ chmod +x ls
      $ export PATH=.:$PATH
      $ ls
      plop
      $ \ls
      plop
      $ /bin/ls
      ls


      la bonne pratique, c'est /bin/su ou /bin/sudo. Le \commande est utile pour bypasser les alias qui pourraient foutre la merde (ls --color, grep --color=always, ou autre alias qui changeraient les sortie des commandes de manières imprévue), mais d'un point de vue sécurité c'est pas super utile.

      Il ne faut pas décorner les boeufs avant d'avoir semé le vent

      • [^] # Re: Deux questions

        Posté par . Évalué à 2.

        Ah oui, bien vu, au temps pour moi.
        • [^] # Re: Deux questions

          Posté par . Évalué à 3.

          J'ajoute que ce n'est pas un caractère joker utilisé spécialement à cette occasion, mais seulement une des manières de s'en sortir.

          Par exemple, on voyait de temps en temps « ps aux | grep mo[n]process ». Le fait d'encadrer une lettre dans une plage de caractères faisait qu'au final, on éliminait de fait le grep dans la liste des processus qui nous intéressaient.
          • [^] # Re: Deux questions

            Posté par (page perso) . Évalué à 2.

            Et depuis, on a appris à utiliser pgrep.
            • [^] # Re: Deux questions

              Posté par . Évalué à 6.

              ... et adieu la portabilité
              • [^] # Re: Deux questions

                Posté par (page perso) . Évalué à 4.

                En l'état, la commande d'Obsidian n'est pas portable non plus :

                % ps aux|grep em[a]cs
                zsh: no matches found: em[a]cs


                Ce qui bien sûr se corrige par l'utilisation de guillemets.

                Ceci dit, pgrep (et son copain pkill) existe sous Linux, FreeBSD, OpenBSD, NetBSD, Solaris, etc. Il reste des OS dignes d'être utilisés qui n'ont pas pgrep ?
      • [^] # Re: Deux questions

        Posté par . Évalué à 1.

        Merci à tous pour ces explications !

        la bonne pratique, c'est /bin/su ou /bin/sudo.

        Je note pour su. Pour sudo, si on l'utilise sans mot de passe, ça sert à rien de l'appeller avec /usr/bin/sudo, puisque l'intérêt d'un faux sudo c'est de récupérer le mdp utilisateur, non ?

        Bon après, vous allez sans doute me dire que c'est pas une bonne idée d'utiliser sudo sans mdp. Peut-être, mais la sécurité c'est au fond un compromis entre protection et utilisabilité. En l'occurrence, comme je pense pas risquer grand chose sur ma machine personnelle, j'ai pas envie de m'ennuyer à taper un mdp en permanence.

        De plus si sudo se met soudainement à me demander un mdp, je saurais que quelqu'un essaye de me couillonner :)
        • [^] # Re: Deux questions

          Posté par . Évalué à 2.

          un autre exemple, pour compléter un chouilla ceux de Jean B, c'est pour protéger des variables dans une édition en ligne, exemple : echo "echo $PWD >> /foo/bar" pas pareil que echo "echo \$PWD >> /foo/bar"
        • [^] # Re: Deux questions

          Posté par . Évalué à 1.

          Non tu peut très bien avoir dans ton path un peut script shell nomé sudo et qui fait :
          #!/bin/sh

          sudo rm -rf /
          sudo "$*"


          Ou quelque chose du même genre.

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: Deux questions

        Posté par . Évalué à 1.

        note :
        Il est possible de rend PATH en lecture seul.
        Si on fait
        readonly PATH


        Je ne sais pas si ce bloquage est imposable (par root aux users) automatiquement.
        • [^] # Re: Deux questions

          Posté par . Évalué à 2.

          Il suffit de mettre "readonly PATH" dans la configuration de /etc, qui est normalement chargée avant celle de ~.
          À noter que zsh propose la même fonctionnalité.

          bash (ainsi que zsh) possède un "restricted mode" (rbash/bash -r/zsh -r) qui met PATH en lecture seule, ainsi que d'autre limitations (impossible d'invoquer une commande hors du PATH, mais il doit rester possible de contourner cela à l'aide d'autres commandes, comme xargs par exemple)

          Dernière remarque, "::" dans le PATH est équivalent à ":.:", et c'est dangereux... (testez, vous verrez)
          • [^] # Re: Deux questions

            Posté par . Évalué à 2.

            en quoi "." dans le PATH est-il plus dangereux (d'un point de vue sécuritaire) que le PATH en écriture (à part les bêtises que cela peut provoquer).
            • [^] # Re: Deux questions

              Posté par (page perso) . Évalué à 1.

              Tu peux dire à l'admin sys "hey, j'ai un fichier bizarre dans /home/toto/blah/, tu peux regarder ?". Bien sûr, auparavant, tu auras mis dans ce dossier un fichier exécutable du nom de `ls', qui par exemple fait un "usermod -ou 0 toto" ou toute autre joyeuseté.
              • [^] # Re: Deux questions

                Posté par . Évalué à 4.

                Et sans changer d'utilisateur :
                % tar xzf fichier_juste_téléchargé.tar.gz
                % ls # et oui, c'était une en:tarbomb

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.