sudo permission refusée mais su accorde la permission

11

c'est la première occurrence où su était requis pour moi.

J'ai lu un article sur la modification de la valeur dans / sys / devices / virtual / backlight / acpi_video0 / luminosité pour modifier la luminosité de l'écran de mon ordinateur portable.

J'ai d'abord remarqué que lorsque je le ferais $ sudo echo 10 > brightness, j'obtiendrais une autorisation refusée.

Je suis passé à root en utilisant su et # echo 10 > brightnessj'ai changé ma luminosité presque instantanément.

La dernière chose bizarre m'est arrivée quand j'ai essayé # echo 20 > brightness(le fichier maxbrightness contient la valeur 15) et j'ai eu une erreur d'écriture

Quelqu'un pourrait-il m'expliquer cette différence entre sudo et su? Comprendre l'erreur d'écriture serait un bonus supplémentaire. Toute aide, pointeurs et / ou liens seraient très appréciés.

flumpb
la source
1
Lié à unix.stackexchange.com/q/1416/250
phunehehe

Réponses:

17

La redirection ne fonctionne pas de cette façon. L'ajout >à une commande exécutera cette redirection en tant qu'utilisateur invoquant (vous) et non en tant que root. Faites-le avec tee:

echo 20 | sudo tee /sys/devices/virtual/backlight/acpi_video0/brightness

ou en appelant la commande dans un shell privilégié distinct:

sudo bash -c "echo 20 > /sys/devices/virtual/backlight/acpi_video0/brightness"
remuer
la source
Comme la pointe du tee. Cela ne m'était pas venu à l'esprit au cours de mes 15 années d'administrateur système sous Unix :-) Évident quand on le voit.
Mr Shark
8

Ce n'est pas à cause de sudo, c'est à cause de la façon dont votre commande est traitée; Je l'ai en fait expliqué dans cette question . Quand tu fais

$ sudo echo 10 > brightness

le shell exécute la commande sudo echo 10, qui s'exécute en echo 10tant que root. Le shell essaie ensuite de s'ouvrir brightnesspour pouvoir rediriger la sortie depuis echo 10, mais il ne peut pas - votre shell fonctionne avec vos autorisations, pas root. Il existe des solutions de contournement affichées comme réponses à la question à laquelle j'ai lié; une bonne est:

$ echo 10 | sudo tee brightness

C'est maintenant teecelui à ouvrir brightness, et comme il s'exécute en tant que root, il réussit

Michael Mrozek
la source
3

su = s witch u ser: utiliser le shell en tant qu'utilisateur différent

sudo = s uper u ser do : exécutez la commande suivante en tant qu'utilisateur root.

Dans votre cas, la commande suivante est uniquement echo 20, donc seul l'écho 20 est exécuté en tant que root (comme indiqué précédemment). La redirection est exécutée à nouveau comme vous.

Michael Niemand
la source
2

Vous voudrez peut-être jeter un œil au /etc/sudoersfichier. Si votre a / c n'y figure pas, vous ne pourrez pas sudo.

yasouser
la source
Vrai, mais vous obtiendrez un message d'erreur spécifique dans ce cas ("le nom d'utilisateur n'est pas dans le fichier sudoers")
Michael Mrozek