web-dev-qa-db-ja.com

ダブルSudoがパーミッションを変更するのはなぜですか?

環境:

デフォルトのec2-userを使用して、Amazon Linux2013.09を実行しているAWSt1.microインスタンスにsshedします。デフォルトの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

Success!では、superuser.comにアクセスして、何が起こったのかを把握します。

Sudo sudoの動作がSudoと異なるのはなぜですか?

3
kdbanman

AmazonEC2はUbuntuのように構築されています。rootアクセスはなく、代わりにSudoですべてが行われます。

Sudoコマンドが行ったことは、postgresになりすまそうとしたことであり、そのための許可が必要でした。 ec2-userにはこの権限がないため、Sudoはパスワードを要求します(パスワードがないため失敗します)。

あなたがしたときSudo sudo、他のユーザーになりすます権限を持つrootとして2番目のSudoを呼び出しているので、コマンドは機能します。 Sudoの構成方法(sudoersのNOPASSWD行)により、rootとして実行するためにパスワードは必要ありません。

5
Nathan C