[HS] shell : permission non accordée en sudo
Le
Alexandre Hoïde

Bonjour Debianistes,
En essayant de modifier la luminosité de mon écran : des 3
commandes ci-dessous, je ne comprends pas pourquoi la méthode
« $ sudo echo » échoue avec « permission non accordée »
tandis que « sudo tee » et « su - » fonctionnent.
Quelqu'un pourrait-il m'éclairer ? (Dans mon /etc/sudoers mon
utilisateur est en « ALL=(ALL:ALL) ALL »)
Exemple :
$ sudo echo 100 > /sys/class/backlight/nv_backlight/brightness
bash: /sys/class/backlight/nv_backlight/brightness: Permission non accordée
$
$ su -
Mot de passe :
# echo 24 > /sys/class/backlight/nv_backlight/brightness
# exit
déconnexion
$
$ sudo tee /sys/class/backlight/nv_backlight/brightness <<< 100
[sudo] Mot de passe de moi :
100
--
___________________
| $ post_tenebras ↲ | waouh!
| GNU / |
| -- * -- | o
| $ who ↲ / |_-- ~_|
| Alexandre Hoïde | _/| |
-
En essayant de modifier la luminosité de mon écran : des 3
commandes ci-dessous, je ne comprends pas pourquoi la méthode
« $ sudo echo » échoue avec « permission non accordée »
tandis que « sudo tee » et « su - » fonctionnent.
Quelqu'un pourrait-il m'éclairer ? (Dans mon /etc/sudoers mon
utilisateur est en « ALL=(ALL:ALL) ALL »)
Exemple :
$ sudo echo 100 > /sys/class/backlight/nv_backlight/brightness
bash: /sys/class/backlight/nv_backlight/brightness: Permission non accordée
$
$ su -
Mot de passe :
# echo 24 > /sys/class/backlight/nv_backlight/brightness
# exit
déconnexion
$
$ sudo tee /sys/class/backlight/nv_backlight/brightness <<< 100
[sudo] Mot de passe de moi :
100
--
___________________
| $ post_tenebras ↲ | waouh!
| GNU / |
| -- * -- | o
| $ who ↲ / |_-- ~_|
| Alexandre Hoïde | _/| |
-
Merci Erwan, mais pareil : « permission non accordée » avec
/bin/echo.
--
___________________
| $ post_tenebras ↲ | waouh!
| GNU / |
| -- * -- | o
| $ who ↲ / |_-- ~_|
| Alexandre Hoïde | _/| |
-------------------
Essaye avec sudo /bin/echo : tu as un echo builtin du shell qui vient peut-être perturber.
--
Erwan
Bonjour Alexandre,
dans ton example, le shell utilisateur lance la commande "sudo echo
100", puis redirige son résultat vers /sys/.../brightness, sur lequel
tu n'as pas la permission d'accès en simple utilisateur.
Il faut donc lancer un shell avec sudo, qui redirigera avec les
permissions qui vont bien.
sudo sh -c "echo 100 > /sys/class/backlight/nv_backlight/brightness"
Amicalement,
--
Charles Plessy
Tsurumi, Kanagawa, Japon
Non, ce n'est pas un problème de echo built-in / pas built-in.
Pour commencer, il faut bien lire _tout_ le message d'erreur :
~$ sudo /bin/echo "test" >> /etc/hosts
bash: /etc/hosts: Permission denied
Le problème c'est "bash" lui-même, pas echo ou /bin/echo
car bien les redirections sont faites par le processus
bash lui-même et non par echo ou /bin/echo. Et comme bash,
lui, est lancé en tant qu'utilisateur « lambda », toute
redirection dans un fichier où on n'a pas les permissions
est vouée à l'échec, built-in ou non, sudo ou pas sudo,
c'est cuit.
Mais avec la commande tee effectivement on peut contourner.
--
François Lafont
Merci à François Lafont et Eric Degenetais pour la bonne réponse,
o/
--
___________________
| $ post_tenebras ↲ | waouh!
| GNU / |
| -- * -- | o
| $ who ↲ / |_-- ~_|
| Alexandre Hoïde | _/| |
-------------------
… et merci à Charles Plessy également !
o/
--
___________________
| $ post_tenebras ↲ | waouh!
| GNU / |
| -- * -- | o
| $ who ↲ / |_-- ~_|
| Alexandre Hoïde | _/| |
-------------------
en fait tu n'es pas root toute la ligne mais seuleument jusqu'au > et
donc tu fais la redirection en tant qu'utilisateur non root. En gros
sudo ne te permet que faire une commande echo 100 et donc tu fais la
commande sudo echo 100 puis la redirection.
Si tu veux faire cela en une ligne il faut
sudo sh -c "echo 100 > /sys/class/backlight/nv_backlight/brightness"
tu n'executes qu'une commande sh -c qui fait la redirecion
… et merci également à Lorenzo Bernardi!
<o
--
___________________
| $ post_tenebras ↲ | waouh!
| GNU / |
| -- * -- | o
| $ who ↲ / |_-- ~_|
| Alexandre Hoïde | _/| |
-------------------