3

Контекст:

ssh перешел в экземпляр AWS t1.micro под управлением Amazon Linux 2013.09, используя ec2-user по умолчанию. Я пытаюсь перечислить содержимое каталога postgresql по умолчанию:

Что там?

$ ls /var/lib/pgsql9/

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

Хорошо. Кому это принадлежит?

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

Ах. Дурак я.

$ 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:

... Какие? ec2-user есть пароль? Время для большей пушки.

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

Успех! Теперь отправляйтесь на superuser.com, чтобы выяснить, что произошло.

Почему sudo sudo ведет себя иначе, чем sudo?

1 ответ1

5

Amazon EC2 построен как Ubuntu: нет root доступа, и вместо этого все делается с помощью sudo .

Ваша команда sudo пыталась выдать себя за postgres , требуя разрешения для этого. ec2-user нет этого разрешения, поэтому sudo запросит пароль (который не удастся, потому что у него его нет).

Когда вы сделали sudo sudo , вы вызываете второе sudo как root, у которого есть права на олицетворение других пользователей, поэтому команда работает. Из-за способа настройки sudo (строка NOPASSWD в sudoers) ему не нужен пароль для выполнения от имени пользователя root.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .