sudo não altera os parâmetros sysfs [duplicados]

3

Não consigo executar o seguinte comando com sudo para alterar um parâmetro sysfs:

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

No entanto, funciona sem o sudo quando mudo para o root user:

$ 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

Aqui estão as permissões do arquivo:

$ 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

Faz sentido para você?

Observe que eu tenho o arquivo / etc / sudoers das alterações com visudo para tornar os comandos sudo sem senha.

    
por ARH 02.02.2015 / 15:58

2 respostas

4

O "echo 300" é executado usando sudo, que gera 300 para stdout da maneira normal. Então, como usuário normal, você está tentando obter essa saída e gravar em / sys /

Sudo não é um comando mágico que eleva privilégios para toda a sua linha de comando. Leva os argumentos que você passou para ele e os executa como um programa. Bash (que está sendo executado como um usuário normal) executa 'sudo echo 300', em seguida, pega essa saída e tenta gravá-la em um arquivo. Note que a gravação no arquivo é feita pelo bash que está sendo executado como usuário normal.

Isso deve funcionar:

sudo bash -c "echo 300 > / sys / bloco / md0 / md / stripe_cache_size"

sudo executará o bash com privilégios mais altos, e então o bash root executará o comando inteiro.

    
por WillW 02.02.2015 / 22:59
3

Você roda aqui apenas o echo com o comando sudo, mas - o seu input / output / stderr é do usuário regular.

Se você deseja gravar no arquivo como usuário root, não é possível usar o > da casca. Em vez disso, use por exemplo o comando tee:

echo 300 |sudo tee /sys/block/md0/md/stripe_cache_size
    
por undefine 02.02.2015 / 23:08