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