web-dev-qa-db-fra.com

sudo ne change pas les paramètres sysfs

Je ne peux pas exécuter la commande suivante avec Sudo pour modifier un paramètre sysfs:

$ Sudo echo 300 > /sys/block/md0/md/stripe_cache_size
bash: /sys/block/md0/md/stripe_cache_size: Permission denied

Cependant, cela fonctionne avec Sudo lorsque je passe à l'utilisateur root:

$ Sudo su
[root] [ /home/arh ]  
 #  echo 300 > /sys/block/md0/md/stripe_cache_size
[root] [ /home/arh ]  
 # cat /sys/block/md0/md/stripe_cache_size
300

Voici les autorisations de fichier:

$ ls -l  /sys/block/md0/md/stripe_cache_size 
-rw-r--r-- 1 root root 4096 Feb  2 08:50 /sys/block/md0/md/stripe_cache_size

Est-ce que vous saisissez ?

Notez que j’ai modifié le fichier/etc/sudoers avec visudo pour créer des commandes Sudo sans mot de passe.

4
ARH

"Echo 300" est exécuté à l'aide de Sudo, qui envoie 300 à stdout de manière normale. Ensuite, en tant qu’utilisateur normal, vous essayez de prendre cette sortie et d’écrire dans/sys /

Sudo n'est pas une commande magique qui élève les privilèges de toute votre ligne de commande. Il prend les arguments que vous lui avez transmis et les exécute en tant que programme. Bash (qui s'exécute en tant qu'utilisateur normal) exécute 'Sudo echo 300', puis prend cette sortie et tente de l'écrire dans un fichier. Notez que l'écriture dans le fichier est effectuée par bash qui s'exécute en tant qu'utilisateur normal.

Cela devrait fonctionner:

Sudo bash -c "echo 300>/sys/block/md0/md/stripe_cache_size"

Sudo exécutera bash avec des privilèges plus élevés, puis ce root bash exécutera toute la commande.

5
WillW

Vous exécutez ici uniquement echo avec la commande Sudo, mais - ses entrées/sorties/stderr proviennent d'un utilisateur normal.

Si vous souhaitez écrire dans un fichier en tant qu'utilisateur root, vous ne pouvez pas utiliser> depuis Shell. A la place, utilisez par exemple la commande tee:

 echo 300 | Sudo tee /sys/block/md0/md/stripe_cache_size
4
undefine