Por que um double sudo modifica as permissões?

2

Contexto:

ssh em uma instância AWS t1.micro executando o Amazon Linux 2013.09, usando o padrão ec2-user . Estou tentando listar o conteúdo do diretório postgresql padrão:

O que tem lá?

$ ls /var/lib/pgsql9/

ls: cannot open directory /var/lib/pgsql9/: Permission denied

Ok. Quem é o dono disso?

$ ls -l /var/lib | grep pgsql
drwx------ 4 postgres postgres 4096 Jun 22 16:06 pgsql9

Ah. Tola eu.

$ sudo -u postgres ls /var/lib/pgsql9/

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for ec2-user:

... O que? ec2-user tem uma senha? Hora de uma arma maior.

$ sudo sudo -u postgres ls /var/lib/pgsql9/
backups  data

Sucesso! Agora, vá para superuser.com para descobrir o que aconteceu.

Por que o sudo sudo se comporta de maneira diferente de sudo ?

    
por kdbanman 23.06.2014 / 18:17

1 resposta

4

O Amazon EC2 é construído como o Ubuntu: sem root access e tudo é feito com sudo .

O que seu comando sudo fez foi tentar representar postgres , exigindo permissão para isso. ec2-user não tem essa permissão, então sudo pedirá uma senha (que falhará porque não tem uma).

Quando você fez sudo sudo , está chamando o segundo sudo como root, que tem as permissões para representar outros usuários, portanto o comando funciona. Por causa da maneira como o sudo está configurado (a linha NOPASSWD em sudoers) ele não precisa de uma senha para executar como root.

    
por 23.06.2014 / 18:27