sudo e sudo -i acessam recursos

3

Quais são as diferenças de privilégio entre sudo e sudo -i?

Com sudo ,

    $sudo echo "search foo.bar.baz" >> /etc/resolv.conf
    bash: /etc/resolv.conf: Permission denied

... e com sudo -i

    $sudo -i
    #echo "search foo.bar.baz" >> /etc/resolv.conf

... funciona. Os privilégios são:

    drwxr-xr-x 166 root root 12288 2009-10-17 21:02 .
    -rw-r--r--   1 root root 42    2009-10-17 20:55 /etc/resolv.conf

Foi uma surpresa que esses comandos tenham um comportamento diferente, o que faz com que a versão sudo falhe?

    
por Alex 17.10.2009 / 19:17

3 respostas

12

No primeiro exemplo, o redirecionamento está acontecendo no seu shell atual e não no subshell sudo. Portanto, sudo está executando echo "search foo.bar.baz" e retornando o resultado ao seu shell atual, que então tenta gravá-lo em /etc/resolv.conf .

Você pode fazer o primeiro exemplo funcionar invocando bash diretamente como seu comando sudo:

sudo bash -c "echo 'search foo.bar.baz' >> /etc/resolv.conf"
    
por 17.10.2009 / 19:53
1

Com sudo , você pode usar 1 comando com privilégios de administrador.
Com sudo -i você loga na conta root, com suas próprias variáveis de shell e ambiente.
Caso contrário, você pode usar sudo -s , com ele você faz o login na conta root, mas fica com o shell e as variáveis.

A coisa é que com sudo -i você pode obter outro shell e outro $ PATH que pode resolver o problema.

    
por 17.10.2009 / 19:24
1

Do sudo manpage:

-i  The -i (simulate initial login) option runs the shell specified in
    the passwd(5) entry of the user that the command is being run as.
    The command name argument given to the shell begins with a ‘-’ to
    tell the shell to run as a login shell.  sudo attempts to change to
    that user’s home directory before running the shell.  It also ini‐
    tializes the environment, leaving TERM unchanged, setting HOME,
    SHELL, USER, LOGNAME, and PATH, and unsetting all other environment
    variables.  Note that because the shell to use is determined before
    the sudoers file is parsed, a runas_default setting in sudoers will
    specify the user to run the shell as but will not affect which
    shell is actually run.

O problema que você está tendo é que o shell está apenas aplicando o sudo na primeira parte do pipeline que você construiu. O >> etc é executado como suas permissões, em vez de root.

    
por 17.10.2009 / 21:17