OVH Cloud OVH Cloud

[HS] shell : permission non accordée en sudo

8 réponses
Avatar
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   |  _/| |
 -------------------

8 réponses

Avatar
Alexandre Hoïde
On Wed, Apr 19, 2017 at 02:13:00PM +0200, Erwan David wrote:
On Wed, Apr 19, 2017 at 02:00:34PM CEST, Alexandre Hoïde said:
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

Essaye avec sudo /bin/echo : tu as un echo builtin du shell qui vient peut-être perturber.

Merci Erwan, mais pareil : « permission non accordée » avec
/bin/echo.
--
 ___________________
| $ post_tenebras ↲ | waouh!
| GNU         /    |    
|          -- * --  |     o
| $ who ↲    /     |_-- ~_|
| Alexandre Hoïde   |  _/| |
 -------------------
Avatar
Erwan David
On Wed, Apr 19, 2017 at 02:00:34PM CEST, Alexandre Hoïde said:
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

Essaye avec sudo /bin/echo : tu as un echo builtin du shell qui vient peut-être perturber.
--
Erwan
Avatar
Charles Plessy
Le Wed, Apr 19, 2017 at 02:00:34PM +0200, Alexandre Hoïde a écrit :
$ sudo echo 100 > /sys/class/backlight/nv_backlight/brightness
bash: /sys/class/backlight/nv_backlight/brightness: Permission non accordée

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
Avatar
Francois Lafont
On 04/19/2017 02:16 PM, Alexandre Hoïde wrote:
Essaye avec sudo /bin/echo : tu as un echo builtin du shell qui vient peut-être perturber.

Merci Erwan, mais pareil : « permission non accordée » avec
/bin/echo.

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
Avatar
Alexandre Hoïde
On Wed, Apr 19, 2017 at 02:31:03PM +0200, Eric Degenetais wrote:
Bonjour,
la redirection est appliquée à la sortie de sudo, or sudo lui-même est
exécuté avec les privilèges normaux de l'utilisateur. Par contre c'est la
commande tee, exécutée avec les privilèges modifiés par sudo, qui écrit
dans le fichier. D'où la différence.
Cordialement

Merci à François Lafont et Eric Degenetais pour la bonne réponse,
o/
--
 ___________________
| $ post_tenebras ↲ | waouh!
| GNU         /    |    
|          -- * --  |     o
| $ who ↲    /     |_-- ~_|
| Alexandre Hoïde   |  _/| |
 -------------------
Avatar
Alexandre Hoïde
On Wed, Apr 19, 2017 at 09:38:06PM +0900, Charles Plessy wrote:
Le Wed, Apr 19, 2017 at 02:00:34PM +0200, Alexandre Hoïde a écrit :
$ sudo echo 100 > /sys/class/backlight/nv_backlight/brightness
bash: /sys/class/backlight/nv_backlight/brightness: Permission non accordée

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

… et merci à Charles Plessy également !
o/
--
 ___________________
| $ post_tenebras ↲ | waouh!
| GNU         /    |    
|          -- * --  |     o
| $ who ↲    /     |_-- ~_|
| Alexandre Hoïde   |  _/| |
 -------------------
Avatar
Lorenzo Bernardi
On 04/19/2017 02:16 PM, Alexandre Hoïde wrote:
On Wed, Apr 19, 2017 at 02:13:00PM +0200, Erwan David wrote:
On Wed, Apr 19, 2017 at 02:00:34PM CEST, Alexandre Hoïde said:
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



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
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

Essaye avec sudo /bin/echo : tu as un echo builtin du shell qui vient peut-être perturber.

Merci Erwan, mais pareil : « permission non accordée » avec
/bin/echo.
Avatar
Alexandre Hoïde
On Wed, Apr 19, 2017 at 02:27:27PM +0200, Lorenzo Bernardi wrote:
On 04/19/2017 02:16 PM, Alexandre Hoïde wrote:
On Wed, Apr 19, 2017 at 02:13:00PM +0200, Erwan David wrote:
> On Wed, Apr 19, 2017 at 02:00:34PM CEST, Alexandre Hoïde said:
> > 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
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   |  _/| |
 -------------------