Author: Pierre Mazein Date: To: guilde Subject: Re: root OK sudo non OK : pourquoi ?
En lisant l'aide de sudo -s, extrait :
"If a command is specified, it is passed to the shell for execution via
the shell's -c option."
j'ai l'impression que
sudo -s = bash -c "sudo commande"
Tu ne peux pas couper au sudo à cause des privilèges.
Il me semble que le post du 05/03/2018 à 07:55 de Christian Marillat
fait le tour des possibilités.
Ma préférée étant
sed 's/^#$//g; /./,/^$/!d' jail.conf | sudo tee jail.local
car elle sollicite le sudo pour une seule commande, donc de cela réduit
les risques pris par l'utilisation de cette puissante commande (qui n'a
jamais vu un espace après un / dans une commande ?).
Pierre
Le 06/03/2018 à 11:36, Marc TERRIER a écrit : > Bonjour Pierre,
>
> En voilà une idée qu'elle est bonne ! Mes scripts sed, contrairement à certains de mes scripts awk, sont tellement courts que je n'utilise jamais cette possibilité de mettre le code sed dans un fichier séparé, mais il est vrai qu'elle existe... et je regrette de ne pas y avoir pensé tout seul ! :-)
>
> Merci !
>
> P.S. : cela n'enlève rien à l'intérêt de creuser plus en détail les pistes "sudo -s" et "bash -c" qui m'ont été suggérées par ailleurs.
>
> --
> Marc TERRIER
>
> ----- Mail original -----
> De: "Pierre Mazein" <mazeinp@???>
> À: guilde@???
> Envoyé: Mardi 6 Mars 2018 11:15:19
> Objet: Re: root OK sudo non OK : pourquoi ?
>
> Bonjour,
>
> Ne pouvez vous pas utiliser un fichier script pour éviter la ligne de
> commande est le travail de substitution de bash :
>
> -f script-file, --file=script-file
>
> add the contents of script-file to the commands to be
> executed
>
> Expérience par l'esprit :
>
> $ cat sedsctipt.txt
> 's/^#$//g; /./,/^$/\!d'
>
> $sudo bash -c "sed -f sedscript.txt jail.conf > jail.local"
>
> Travail fait ?
>
> Pierre
>
> Le 06/03/2018 à 08:11, Marc TERRIER a écrit :
>> Le 05/03/2018 à 14:35, BOITEUX, Frederic a écrit :
>>> Bonjour,
>>>
>>> Ton erreur « !d': event not found » vient du bash, pas de sed : par
>>> défaut le caractère « ! » permet de rappeler une commande précédente
>>> en bash… Pour éviter ton souci, je pense qu'il faut que tu mettes un
>>> anti-slash devant ton ! pour qu'il ne soit pas interprété par bash
>>> ; attention, tu as aussi un $ dans ton expression sed. Tu peux essayer :
>>>
>>> $ sudo bash -c "sed 's/^#$//g; /./,/^$/\!d' jail.conf > jail.local"
>>>
>>> Mais peut-être faudra-t-il des \ supplémentaires, car il y a 2
>>> niveaux de subsitutions : le bash où tu lances ton sudo, et celui
>>> lancé par ton sudo !
>>>
>>> Cdlt,
>>> Fred.
>> Bonjour,
>>
>> Piste intéressante, les antislashs, mais je n'ai pas encore trouvé
>> *la* solution (excepté celle proposée par Christian) :
>>
>> pi@raspi:/etc/fail2ban $ sudo bash -c "sed 's/^#$//g; /./,/^$/!d'
>> jail.conf > jail.local"
>> -bash: !d': event not found
>> pi@raspi:/etc/fail2ban $ sudo bash -c "sed 's/^#$//g; /./,/^$/\!d'
>> jail.conf > jail.local"
>> sed: -e expression n°1, caractère 19: commande inconnue: `\'
>> pi@raspi:/etc/fail2ban $ sudo bash -c "sed 's/^#$//g; /./,/^$/\\!d'
>> jail.conf > jail.local"
>> sed: -e expression n°1, caractère 19: commande inconnue: `\'
>> pi@raspi:/etc/fail2ban $ sudo bash -c "sed \'s/^#$//g; /./,/^$/!d\'
>> jail.conf > jail.local"
>> -bash: !d\': event not found
>> pi@raspi:/etc/fail2ban $ sudo bash -c "sed \\'s/^#$//g; /./,/^$/!d\\'
>> jail.conf > jail.local"
>> -bash: !d\\': event not found
>> pi@raspi:/etc/fail2ban $
>>
>> Je découvre aussi, à cette occasion, que quand la commande provoque
>> une erreur comme le "!d': event not found", la commande n'est pas
>> ajoutée dans l'historique des commandes.
>>
>> Mais ces histoires d'environnement et de niveaux de substitution sont
>> clairement des pistes intéressantes à creuser.
>>
>> Merci.
>>
>
>