デフォルトのec2-user
を使用して、Amazon Linux2013.09を実行しているAWSt1.microインスタンスにssh
edします。デフォルトの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
と異なるのはなぜですか?AmazonEC2はUbuntuのように構築されています。root
アクセスはなく、代わりにSudo
ですべてが行われます。
Sudo
コマンドが行ったことは、postgres
になりすまそうとしたことであり、そのための許可が必要でした。 ec2-user
にはこの権限がないため、Sudo
はパスワードを要求します(パスワードがないため失敗します)。
あなたがしたときSudo sudo
、他のユーザーになりすます権限を持つrootとして2番目のSudo
を呼び出しているので、コマンドは機能します。 Sudo
の構成方法(sudoersのNOPASSWD行)により、rootとして実行するためにパスワードは必要ありません。