Quem é o proprietário do arquivo se o arquivo for criado usando o comando sudo?

5

Eu fiz o login usando meu nome de usuário ravbholua :

ravbholua @ ravbholua-Aspire-5315: ~ $ echo $ LOGNAME Ravbholua

Eu crio o arquivo chamado a1 :

ravbholua@ravbholua-Aspire-5315:~$ echo>a1
ravbholua@ravbholua-Aspire-5315:~$ ll a1
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a1

Como esperado, o arquivo acima tem-me ( ravbholua ) como proprietário.

Em seguida, crio a2 usando sudo com o comando echo :

ravbholua@ravbholua-Aspire-5315:~$ sudo echo>a2
ravbholua@ravbholua-Aspire-5315:~$ ll a2
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a2

O proprietário é somente eu, ou seja, ravbholua .

Agora eu crio o a3 usando o sudo novamente, mas com o comando vim :

ravbholua@ravbholua-Aspire-5315:~$ sudo vim a3
ravbholua@ravbholua-Aspire-5315:~$ ll a3
-rw-r--r-- 1 root root 10 Oct  8 09:57 a3

Oh! Por que o dono muda agora? Não sou eu, mas raiz. Por que tal variação com echo e vim ! É uma surpresa que com mudança de comandos como o dono do arquivo criado pode mudar.

    
por Ravi 08.10.2013 / 06:43

2 respostas

11

O segundo exemplo executa echo sob sudo , mas o redirecionamento acontece sob o shell original.

sudo bash -c "echo > a4"
    
por 08.10.2013 / 06:48
3

sudo é apenas um comando.

Então, para o seu primeiro exemplo: sudo echo>a2

sudo é o comando. E enquanto você tem o redirecionamento contra o eco, isso não significa nada.

Por exemplo: %código% Você não obterá o conteúdo de / etc / passwd em / tmp / foo. Você só terá echo cat /etc/passwd > /tmp/foo . sudo não é diferente. A parte do eco é apenas um argumento para o sudo. o sudo o usa para executar coisas, mas o shell não sabe disso.

Essa é uma das maneiras pelas quais o acesso ao sudo é muito diferente de fazer as coisas como root.

Para o seu exemplo, onde você usa cat /etc/passwd sudo executa sudo vim a3 para você como root. E o vim é executado como root, então o arquivo é de propriedade do root.

    
por 08.10.2013 / 07:07