permissão sudo negada, mas su concede permissão

11

esta é a primeira ocorrência em que su foi necessário para mim.

Li um artigo sobre como alterar o valor em / sys / devices / virtual / backlight / acpi_video0 / brightness para alterar o brilho da tela do meu laptop.

Percebi pela primeira vez que, quando quisesse $ sudo echo 10 > brightness, teria permissão negada.

Eu mudei para root usando su e # echo 10 > brightnessmudei meu brilho quase instantaneamente.

A última coisa estranha que aconteceu comigo quando tentei # echo 20 > brightness(o arquivo maxbrightness mantém o valor 15) e recebi um erro de gravação

Alguém poderia explicar essa diferença entre sudo e su para mim? Compreender o erro de gravação seria um bônus adicional. Qualquer ajuda, ponteiros e / ou links seriam muito apreciados.

flumpb
fonte
1
Relacionados unix.stackexchange.com/q/1416/250
phunehehe

Respostas:

17

O redirecionamento não funciona dessa maneira. Anexar >a um comando executará esse redirecionamento como o usuário que chama (você) e não como raiz. Faça isso com tee:

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

ou invocando o comando em um shell privilegiado separado:

sudo bash -c "echo 20 > /sys/devices/virtual/backlight/acpi_video0/brightness"
abanar
fonte
Como a ponta do tee. Isso não me ocorreu durante meus 15 anos de administrador de sistemas unix :-) Óbvio quando visto.
Mr Shark
8

Não é por causa sudodisso, é por causa da maneira como seu comando é processado; Na verdade, eu expliquei isso nesta pergunta . Quando você faz

$ sudo echo 10 > brightness

o shell executa o comando sudo echo 10, que é executado echo 10como root. O shell tenta abrir brightnesspara redirecionar a saída echo 10para ele, mas não pode - seu shell está sendo executado com suas permissões, não com raiz. Existem soluções alternativas postadas como respostas na pergunta à qual vinculei; uma boa é:

$ echo 10 | sudo tee brightness

Agora teeé o único a abrir brightnesse, como está sendo executado como root, ele consegue

Michael Mrozek
fonte
3

su = s bruxa u ser: Use o shell como um usuário diferente

sudo = s uper u ser do : execute o seguinte comando como usuário root.

No seu caso, o comando a seguir é apenas echo 20, portanto, apenas o echo 20 é executado como root (como dito anteriormente). O redirecionamento é executado como você novamente.

Michael Niemand
fonte
2

Você pode dar uma olhada no /etc/sudoersarquivo. Se o seu a / c não estiver listado lá, você não poderá sudo.

yasouser
fonte
É verdade, mas você receber uma mensagem de erro específica nesse caso ( "username não está no arquivo sudoers")
Michael Mrozek